5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 6644|回复: 37
打印 上一主题 下一主题

自制Mini四轴,想配玩具小四轴的遥控,请大神助我一臂之力(已成功,详见24楼)

[复制链接]
跳转到指定楼层
楼主
发表于 2015-9-7 12:53 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 LuRenJia 于 2015-9-22 10:55 编辑

淘了个PCB板,焊了个小四轴,就是电机直接装在PCB板上的那种。
板上已经上了NRF24L01+的模块,收、发都没问题了。
现在为了省点米,想用以前买的一个玩具小四轴的遥控来操控,
苦于不知道这种玩具控的协议,所以无从下手。
有大神能指点一二吗?万分感激啊!
玩具控如图:


Mini PCB四轴:



欢迎继续阅读楼主其他信息

38
发表于 2015-12-1 23:54 | 只看该作者
虽然不懂,但是顶你们DIY的精神!!
37
发表于 2015-11-13 07:16 ——“来自手机” | 只看该作者
高手!
36
发表于 2015-9-25 21:46 | 只看该作者
我的45g (电池520mah) , 轴距大概15cm

前段主要研究遥控器,PID还不太懂

我用的 MultiWii 开源
算 IMU 的理论是  http://starlino.com/imu_guide.html80

算PID代码就下面这些,应该不是串级

  //**** PITCH & ROLL & YAW PID ****
  int16_t prop;
  prop = min(max(abs(rcCommand[PITCH]),abs(rcCommand[ROLL])),500); // range [0;500]

  for(axis=0;axis<3;axis++) {
    if ((f.ANGLE_MODE || f.HORIZON_MODE) && axis<2 ) { // MODE relying on ACC
      // 50 degrees max inclination
      errorAngle = constrain((rcCommand[axis]<<1) + GPS_angle[axis],-500,+500) - angle[axis] + conf.angleTrim[axis]; //16 bits is ok here
      PTermACC = ((int32_t)errorAngle*conf.P8[PIDLEVEL])>>7;                          // 32 bits is needed for calculation: errorAngle*P8[PIDLEVEL] could exceed 32768   16 bits is ok for result
      PTermACC = constrain(PTermACC,-conf.D8[PIDLEVEL]*5,+conf.D8[PIDLEVEL]*5);

      errorAngleI[axis]     = constrain(errorAngleI[axis]+errorAngle,-10000,+10000);    // WindUp     //16 bits is ok here
      ITermACC              = ((int32_t)errorAngleI[axis]*conf.I8[PIDLEVEL])>>12;            // 32 bits is needed for calculation:10000*I8 could exceed 32768   16 bits is ok for result
    }
    if ( !f.ANGLE_MODE || f.HORIZON_MODE || axis == 2 ) { // MODE relying on GYRO or YAW axis
      if (abs(rcCommand[axis])<500) error =          (rcCommand[axis]<<6)/conf.P8[axis] ; // 16 bits is needed for calculation: 500*64 = 32000      16 bits is ok for result if P8>5 (P>0.5)
                               else error = ((int32_t)rcCommand[axis]<<6)/conf.P8[axis] ; // 32 bits is needed for calculation

      error -= gyroData[axis];

      PTermGYRO = rcCommand[axis];
      
      errorGyroI[axis]  = constrain(errorGyroI[axis]+error,-16000,+16000);         // WindUp   16 bits is ok here
      if (abs(gyroData[axis])>640) errorGyroI[axis] = 0;
      ITermGYRO = ((errorGyroI[axis]>>7)*conf.I8[axis])>>6;                        // 16 bits is ok here 16000/125 = 128 ; 128*250 = 32000
    }
    if ( f.HORIZON_MODE && axis<2) {
      PTerm = ((int32_t)PTermACC*(512-prop) + (int32_t)PTermGYRO*prop)>>9;         // the real factor should be 500, but 512 is ok
      ITerm = ((int32_t)ITermACC*(512-prop) + (int32_t)ITermGYRO*prop)>>9;
    } else {
      if ( f.ANGLE_MODE && axis<2) {
        PTerm = PTermACC;
        ITerm = ITermACC;
      } else {
        PTerm = PTermGYRO;
        ITerm = ITermGYRO;
      }
    }

    PTerm -= ((int32_t)gyroData[axis]*dynP8[axis])>>6; // 32 bits is needed for calculation   

    delta          = gyroData[axis] - lastGyro[axis];  // 16 bits is ok here, the dif between 2 consecutive gyro reads is limited to 800
    lastGyro[axis] = gyroData[axis];
    deltaSum       = delta1[axis]+delta2[axis]+delta;
    delta2[axis]   = delta1[axis];
    delta1[axis]   = delta;

    DTerm = ((int32_t)deltaSum*dynD8[axis])>>5;        // 32 bits is needed for calculation
                     
    axisPID[axis] =  PTerm + ITerm - DTerm;
  }






35
 楼主| 发表于 2015-9-25 14:32 | 只看该作者
payne_pan 发表于 2015-9-25 09:49
我的也是 7x20 电机
频率应该 50hz expand PWM

看了视频,飞的挺稳的,恭喜、恭喜啊!
你的小四轴有多重?我的电池一起刚好40克。
我也是淘来PCB板,自己焊的。
板子加元器件一起一百五、六了,主要是单买元器件价格没优势。
另外,这家买点,那家买点儿运费就上去了。
你是用的串级PID吗?我现在就卡这儿了,参数一直没调好,飞起来抖得很。

34
发表于 2015-9-25 09:49 | 只看该作者
LuRenJia 发表于 2015-9-25 09:34
你的进展怎样?
我的感觉升力不太够,不知是否是浆的原因。
我的马达PWM频率用的是36K,电流要到3A才能 ...



我的也是 7x20 电机
频率应该 50hz expand PWM

飞起来还可以
http://bbs.5imx.com/bbs/forum.ph ... ;page=1#pid16967575

33
发表于 2015-9-25 09:47 | 只看该作者
LuRenJia 发表于 2015-9-25 09:27
我是在CrazyFlie基础上改的,
跑的是FreeRTOS。

原来 arm 芯片的,不过看taobao的CrazyFlie卖太贵了
我这个成本很低 100元以内,不过自己还是花了很多时间焊接



32
 楼主| 发表于 2015-9-25 09:34 | 只看该作者

你的进展怎样?
我的感觉升力不太够,不知是否是浆的原因。
我的马达PWM频率用的是36K,电流要到3A才能飞起来。
马达用的是720,浆是55mm的。

31
 楼主| 发表于 2015-9-25 09:27 | 只看该作者
payne_pan 发表于 2015-9-24 17:15
你的 mini 四轴是基于 MultiWii 的吗? (只改了接收部分)

我是在CrazyFlie基础上改的,
跑的是FreeRTOS。

30
发表于 2015-9-25 08:51 | 只看该作者
看我的



29
发表于 2015-9-24 17:15 | 只看该作者
你的 mini 四轴是基于 MultiWii 的吗? (只改了接收部分)
28
 楼主| 发表于 2015-9-23 14:53 | 只看该作者
maidoo 发表于 2015-9-22 22:01
恭喜啊,解出了协议细节,下一步就可以和自己的PCB四轴对接了。


遥控是可以了,但长路漫漫啊。
飞起来后发现不稳,又回到姿态解算与PID调整了。
理论知识太匮乏,还要继续学习啊。

27
发表于 2015-9-22 22:01 | 只看该作者
恭喜啊,解出了协议细节,下一步就可以和自己的PCB四轴对接了。
26
 楼主| 发表于 2015-9-22 10:54 | 只看该作者
另外我猜想不同的遥控器发出的对码包内的地址段应该是不同的吧,因只有这样,才能让同品牌的多个飞机在相同的地方一起玩。
25
 楼主| 发表于 2015-9-22 10:53 | 只看该作者
另外我猜想不同的遥控器发出的对码包内的地址段应该是不同的吧,因只有这样,才能让同品牌的多个飞机在相同的地方一起玩。
24
 楼主| 发表于 2015-9-22 10:51 | 只看该作者
搞定了,在这里总结一下,分享给有需要的网友。

遥控上用的确定是 BK系列的(BK242x)。
格式:
数据速率——1M;
地址长度——5字节;
CRC校验开启,1字节;
开自动应答;
动态数据包长度。

分两个过程:
一、对码时——使用固定地址(0x60,0x60,0x60,0x60,0x60),固定频点(60即0x3C)。
遥控会连续发送9字节的包,1~4字节为后续用于传送数据包的地址的低4字节(低字节先出),
5~8为一串固定值,目前还未发现有什么用(我的遥控是:0x56,0xAA,0x40,0x00)。
第9字节为校验字节,保证前8字节与校验字节相加结果为0xFF(只保留一个字节)。
例如我的遥控发出的对码包:0x48,0xCE,0xA3,0x11,0x56,0xAA,0x40,0x00,0xF5。
遥控发送对码包一段时间后,会切换到数据包的发送地址,发送一个数据包,若收到接收机
的应答,则说明对码成功,就进入第二阶段——连续发送数据包。

二、发送数据包——对码成功后,遥控器会等待用户解锁(将油门推至最高再拉回最低)。
若不解锁将不会有数据包发出。解锁后就进入连续的数据包发送阶段,且会一直使用固定
的频点(60也即0x3C)和地址(对码包中的地址低4字节,高字节固定为0xC1)。
数据包的格式也是9字节:
油门——偏航(Yaw)——偏航微调——俯仰(Pitch)——横滚(Roll)——俯仰微调——横滚微调——辅助功能字节——校验字节
例子:0x00,0x80,0x40,0x80,0x80,0x40,0x40,0x00,0xBF。
各种角度是在0x80的基础上增减,各微调是在0x40的基础上增减。
注:接收机需自动应答数据包,若无应答,遥控器会停止发送数据包。



23
 楼主| 发表于 2015-9-16 09:30 | 只看该作者
wangjie 发表于 2015-9-15 23:14
判断不是24L01就是其兼容芯片。

能确定是BK242x系列的IC,因为在初始化的时候发送了“0x50,0x73”、“0x50,0x53”这样的命令。
这是BK系列专用的。

现在已经快调通了,谢谢关注。

22
发表于 2015-9-15 23:14 | 只看该作者
判断不是24L01就是其兼容芯片。
来自苹果客户端来自苹果客户端
21
发表于 2015-9-15 23:13 | 只看该作者
伟力的小四轴是A7105。朋友捡了个四轴送给了我,也是这种邦定的射频模块,但用我自制的多协议高频头的V2X2协议居然能对上,并能爽飞!
来自苹果客户端来自苹果客户端
20
 楼主| 发表于 2015-9-15 16:58 | 只看该作者
对频时会使用60(0x3C)这个频点,不确定是否固定使用这个点,因为我有时能收到数据,有时却又收不到。
Bind时用的地址是 (0x60,0x60,0x60,0x60,0x60)。
Bind时收到的数据是:0x48,0xCE,0xA3,0x11,0x56,0xAA,0x40,0x00,0xF5,共9个字节。

这个玩具四轴说是可以多个在一起玩,就不知是如何区分的,频点不同还是地址不同呢?
希望有谁能说说。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表