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

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

AR.Drone四轴上的电调, 芯片上连个字都没有

[复制链接]
跳转到指定楼层
楼主
发表于 2010-11-2 00:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道AR.Drone四轴上的电调芯片是啥. 从其Linux驱动源程序看是PWM波调速的: 由ARM9 CPU的四个时钟单元分别产生PWM波. Linux主机与电调通过5线连接, 用串口ioctl()控制PWM波. 电机遇塞可自动停转.

电调是个易损件, 厂家配件卖得很贵: 电调(带电机)每个340港币.
想用其它商品电调(淘宝上很多几十元的)作替代品, 尤其想用大电流的以增加负载, 不知是否可行.

电调可互换的原则是什么?
换用其它电调后, 飞控程序参数要作相应调整吗?还是可以自适应?(PID算法?)

正面:


反面:

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

沙发
发表于 2010-11-27 15:47 | 只看该作者
AR好玩具
3
发表于 2010-11-27 17:12 | 只看该作者
比较重要的一点是先要破解通讯模式!
4
发表于 2010-12-4 10:04 | 只看该作者
同意ls的主意。
5
 楼主| 发表于 2011-4-21 21:41 | 只看该作者
捕获了一下AR.Drone串口(/dev/ttyPA1)的PWM通信数据.
以下是AR.Drone飞控程序program.elf启动运行, 初始化四个电机, 起飞几秒后降落, 总个过程中向串口写的字节数据.

有高手能破解一下其PWM通信协议吗?

0xe0
0x01
0x40
0xe0
0x02
0x40
0xe0
0x03
0x40
0xe0
0x04
0x40
0xa0
0xa0
0xa0
0xa0
0xa0
0xa0
0xa0
0x20 0x00 0x00 0x00 0x00
...
0x20 0x00 0x00 0x00 0x00
0x28 0xc4 0x62 0x31 0x18
...
0x28 0xc4 0x62 0x31 0x18
0x60 0x00
0x28 0xc4 0x62 0x31 0x18
0x29 0x24 0x62 0x31 0x28
0x29 0x44 0x62 0x41 0x1c
0x29 0x44 0x62 0x49 0x18
0x29 0x44 0x62 0x39 0x20
0x29 0x44 0x62 0x31 0x24
...
0x29 0x44 0x62 0x49 0x18
0x29 0x44 0x62 0x41 0x1c
0x29 0x44 0x62 0x51 0x18
0x28 0xe4 0x82 0x31 0x28
0x28 0xc4 0xb2 0x31 0x28
0x28 0xc4 0x92 0x31 0x28
0x28 0xc4 0xa2 0x31 0x28
0x29 0x04 0x72 0x31 0x28
0x29 0x44 0x62 0x39 0x20
0x28 0xe4 0x82 0x31 0x28
0x29 0x04 0x72 0x31 0x28
0x28 0xc4 0x92 0x31 0x28
0x28 0xc4 0xb2 0x31 0x28
...
0x29 0x64 0x72 0x69 0x18
0x2a 0x44 0x62 0x69 0x28
0x2a 0x44 0x62 0x51 0x34
0x2a 0x44 0x62 0x59 0x30
...
0x2a 0x44 0x62 0x49 0x38
0x2b 0x44 0x62 0x79 0x40
0x2b 0x44 0x62 0x61 0x4c
0x2b 0x44 0x62 0x49 0x58
0x2b 0x44 0x62 0x69 0x48
0x8c
0x2b 0x44 0x62 0x41 0x5c
0x2b 0x44 0x62 0x59 0x50
...
0x2c 0x44 0x62 0x61 0x6c
0x2d 0x04 0xc2 0x79 0xa8
...
0x2d 0xe5 0xa2 0xd9 0xec
0x2e 0x45 0xa2 0xd1 0xe0
0x2e 0x25 0x92 0xd9 0xe4
0x2e 0x25 0x92 0xd9 0xe4
...
0x2f 0x05 0xb3 0x01 0xe8
0x8b
0x2f 0x05 0xb3 0x11 0xe4
0x2f 0x66 0x03 0x29 0xfc
...
0x30 0x46 0x93 0x5a 0x20
0x30 0x46 0x93 0x62 0x1c
0x30 0x26 0x83 0x62 0x24
0x8c
0x30 0x26 0xb3 0x52 0x20
...
0x31 0xa6 0xf3 0xa2 0x38
...
0x32 0x07 0x53 0xc2 0x48
0x31 0x87 0x63 0xba 0x58
...
0x32 0x47 0x13 0xda 0x40
0x32 0xe7 0x34 0x02 0x50
0x33 0x07 0x44 0x0a 0x48
0x33 0x27 0x24 0x12 0x44
...
0x34 0x67 0xf4 0x6a 0x7c
0x34 0x68 0x64 0x72 0x98
0x35 0x08 0xb4 0x8a 0xa8
0x35 0x08 0xb4 0x92 0xa8
0x37 0xe6 0xe3 0xb3 0x20
0x37 0xc7 0x03 0xab 0x1c
0x37 0xe6 0xe3 0xb3 0x1c
0x38 0x26 0xe3 0xc3 0x0c
0x38 0x66 0xe3 0xd3 0x00
0x38 0x86 0xe3 0xd2 0xfc
0x39 0x07 0xa3 0xe3 0x18
0x38 0xa7 0xd3 0xd3 0x20
0x37 0xc8 0x43 0xd3 0x20
...
0x36 0x28 0x54 0xb3 0x30
...
0x35 0x6b 0x36 0xa2 0xe0
0x34 0x0b 0x26 0xb2 0xac
0x32 0xeb 0x96 0xba 0x98
0x32 0x8b 0xc6 0xc2 0x64
...
0x31 0xab 0x76 0xca 0x20
0x30 0x8b 0x46 0xd1 0xfc
0x2f 0x4b 0x07 0x11 0xac
...
0x2f 0xec 0x83 0xeb 0x28
0x8a
0x30 0x8c 0x84 0x2b 0x1c
0x31 0x2c 0x84 0x5b 0x18
0x31 0xac 0x84 0x8b 0x10
0x31 0x6c 0x84 0x83 0x34
0x20 0x00 0x00 0x00 0x00
0x20 0x00 0x00 0x00 0x00
0x20 0x00 0x00 0x00 0x00
...
6
发表于 2011-4-22 00:18 | 只看该作者
:em26: :em26: 期待高手破解、这个飞控太牛逼了。
7
发表于 2011-5-4 18:08 | 只看该作者
那个高手来攻克AR.Drone改正它的软当:em24:
8
 楼主| 发表于 2011-5-29 21:30 | 只看该作者

我自己来结贴了

AR.Drone的ARM Linux飞控主板很强大, 但它与电调/电机之间的通信协议却一直是个迷.

最近我与rcgroups上的miru:
http://www.rcgroups.com/forums/showthread.php?t=1420951
一直在PM中讨论这个问题.在Fenrir:
http://fenrir.naruoka.org/
的前期研究基础上, 搞清了AR.Drone的电调通信协议.

AR.Drone电调上的CPU为ATmega8a.

AR.Drone的飞控主板与电调之间用5线连接, 串口PWM油门数据通信:
Pin 1: 12V 电源 (红线)
Pin 2: 5V 电源 (白线)
Pin 3: TTL半双工串口(即RX与TX接在一起), 用于PWM油门数据发送等. 波特率115200. 详细见后.
Pin 4: 电机报警(低电位: 正常, 高电位: 电机卡住或空转)
Pin 5: 地 (黑线)

飞控主板发送给电调的串口数据前3bits为命令字:
001 油门量: 5字节数据, 后37bits为: 8bits电机1油门量 + 0 + 8bits电机2油门量 + 0 + 8bits电机3油门量 + 0 + 8bits电机4油门量 + 00
010 版本查 询: 1字节数据, 后5bits为: 00000  
011 LED电机灯控制: 2字节: 4个LED各2bits
100 状态查 询: 1字节数据, 后5bits为: 01 + 3bits BLC# (0...3)
101 同步字节: 1字节数据, 后5bits为: 00000  
111 复位: 1字节数据, 后5bits为: 00000

我们可以通过Arduino I/O小板子来与普通电调PWM进行中转通信, 这可用Arduino上的Servo库来简单实现:
http://gaishi.vicp.net/#article_id_8

这样就可以使用市场上能买到的普通电调/电机, 乃至机架来作替代品.
9
发表于 2011-5-29 22:49 | 只看该作者
非常期待~
10
发表于 2011-9-18 20:38 | 只看该作者
这破解一出世推广,DRONE又少了赚钱的地方,主机本来又是赔钱货.........杀鸡取乱.:em03: 所以天C出不了好东西,自己不愿意创造东西,别人有好的东西出来了就一起举起了大刀向肥羊,破坏型。。。。等喷
顺便说句,我只是个穷打工仔,我也想买DRONE,但买不起,我也希望DRONE能玩得更低成本,更多乐趣.如果这电机电调破解出了,嘞紧裤带我也要去买个来玩了:em01:

[ 本帖最后由 gameboyw2 于 2011-9-21 23:15 编辑 ]
11
发表于 2011-11-19 15:13 | 只看该作者
:em26:
12
发表于 2011-12-6 16:57 | 只看该作者
mapgps兄:
    拜读您的帖子,尝试根据你研究的通讯协议,对上面的16进制数据进行解读,发现有些问题,特请教!
1、0xe011100000复位
2、0x0100000001 ??
3、0x4001000000 版本查 询?
4、0xe011100000 复位
5、0x0200000010 ??
6、0x4001000000 版本查 询?
7、0xe011100000 复位
8、0x0300000011 ??
9、0x4001000000 版本查 询
10、0xe011100000 复位
11、 0x0400000100 ??
12、 0x4001000000 版本查 询
13、 0xa010100000 同步
………………
14、 0x20 0x00 0x00 0x00 0x00
;00100000……油门设置,油门量为零
……
15、 0x28 0xc4 0x62 0x31 0x18
;001 0100011000100011000100011000100011000
油门设置,四路油门都是46H
………
16、 0x60 0x00 ;01100000 00000000 ;LED灯,相同颜色
17、 0x28 0xc4 0x62 0x31 0x18
……中间数据是调整油门量
18、 0x8c ;10001110 ;状态查 询,后三个字节表征什么状态?
19、 0x2b 0x44 0x62 0x41 0x5c
…………中间数据是调整油门量
20、 0x8b ;10001011 ;状态查 询?
21、 0x2f 0x05 0xb3 0x11 0xe4
……中间数据是调整油门量
22、 0x8c ;10001110 ;状态查 询?
23、 0x30 0x26 0xb3 0x52 0x20
……中间数据是调整油门量
24、 0x8a ;10001010 ;状态查 询?
25、 0x30 0x8c 0x84 0x2b 0x1c
26、 0x31 0x2c 0x84 0x5b 0x18
27、 0x31 0xac 0x84 0x8b 0x10
28、 0x31 0x6c 0x84 0x83 0x34
29、 0x20 0x00 0x00 0x00 0x00
30、 0x20 0x00 0x00 0x00 0x00
31、 0x20 0x00 0x00 0x00 0x00
...降落,油门量减小直至停止。
上面第1行到12行,发送了四个复位指令,每个复位指令后面依次有1、2、3、4的数据和一个版本查 询的指令(40H)。
此处很费解,不知道对应着怎样的动作。
13、14、15行,同步,油门,这个没有疑问。
16行,设置LED灯,根据协议也可以正确解读,但是直至降落设置LED灯得指令再没有出现,似乎有些不正常。
18、20、22、24,四个都是状态查 询,根据协议解读,最后的三位不知表征的什么量?
此外,数据当中有没有电调上传给单片机的数据?尤其是查 询指令,既然是查 询,必然有回应的数据才对啊,怎么回应呢?
以上的问题,可否烦劳MAPGPS兄抽空帮忙解答,不胜感激!
13
发表于 2011-12-8 17:41 | 只看该作者
高手啊

[ 本帖最后由 flier 于 2011-12-9 08:31 编辑 ]
14
发表于 2011-12-9 09:37 | 只看该作者
mapGPS哥们好久没出现了……
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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