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

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

翻译:把 MultiWii 移植到arduino-due中

[复制链接]
跳转到指定楼层
楼主
发表于 2015-11-10 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击查看详情
本帖最后由 payne_pan 于 2015-11-10 16:30 编辑

昨日突然想能否把 MultiWii 移植到arduino-due中, google一下,国外有人做了,翻译如下:

Due 微控板使用 SAM3X8E ARM Cortex-M3 CPU, 可能是下一代Arduino 主流,使用它作飞控板的好处是:

1) 32位core, 可以进行一个时钟周期可以操作 4bytes数据
2) 84M 主频,而现在arduino 主流是16M
96KB SRAM( Mega 2560是8KB)
512KB Flash memory ( Mega 2560是256KB)
3)有DMA控制其,读取数据不占用CPU

有两个主要问题
1)Due 没有EEPROM , 只能使用外置 Flash memory 来保存数据
2)Due 运行在3.3 v 电压,I/O pins也只能承受3.3V

看这两个问题是如何解决的
1)cmaglie 写了Due上操作Flash的库,直接用它
2)3.3v好像不是个问题
   3.3v 足以让电调认为是高电位
   RX的5V电压是50Hz的,有间隔,平均电压不足以烧坏Due

为何用MultiWii
1)MultiWii  比较出名,也不那么复杂
2)很多Arduno板子(Pro Mini, Mega 2560) 都支持 MultiWii
3)  Arduino 社区或许可以在此基础上做出更强的飞控

步骤
1)定义DUE板子,以便进行条件编译
#if defined (ARDUINO_DUE)
2)include <arm/ pgmspace.h> 使用 Flash读取接口
3)定义pins的设置
THR:      PIN 62  - A8
ALE:       PIN 63  - A9
ELE:        PIN 64  - A10
RUD:      PIN 65  - A11
AUX1:   PIN 66  -DAC0
AUX2:   PIN 67 - DAC1


Motor 1:  PIN 34
Motor 2:  PIN 36
Motor 3:  PIN 38
Motor 4 / Servo 4:  PIN 40


代码改动
以 MultiWii 2.3为base, 大部分代码都是小改,只有下面3个文件是大改
EEPROM.cpp :使用了cmaglie的 Flash class
RX.cpp: 使用了 Rouan的代码,读取接受机的pwm
Output.cpp: 又使用 Rouan的代码,输出pwm
Sensors.cpp: 基于原生wire.h库写了Wire_DUE.h,提高效率,原生的I2C也备份了,防止新代码让旧的不work

遇到的问题
1)使用 __CM3_REV 而不是 ARDUINO_ARCH_SAM 检查是否是 DUE 板子,结果出现linker错误,问题bypass了,但没有找到原因
2)大量 cast 在 _getADC() 在sensors.cpp中,因为左移位操作( << )对负数是错误的
3)对齐! 连接WiiGUI, 出现错误,原来是 structue 序列化(protocol.cpp)时候出现的, 32bits的编译器保存数据是4byte对齐;应该使用__attribute__ ((packed)) 让其按实占字节对齐
4)GYRO Hopping ( 陀螺仪数据跳跃)
scale = (currentT - previousT) * (GYRO_SCALE * 65536);
发现问题在 使用int32_t 对 bothcurrentT & previousT强制转型后消失了。







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

沙发
发表于 2015-11-10 18:49 | 只看该作者
NAZE32貌似就是MWC的32位版本
来自安卓客户端来自安卓客户端
3
 楼主| 发表于 2015-11-10 19:06 | 只看该作者
Director_Liu 发表于 2015-11-10 18:49
NAZE32貌似就是MWC的32位版本

板子不一样, 开发软件API不一样。

4
发表于 2015-11-10 23:06 | 只看该作者
payne_pan 发表于 2015-11-10 19:06
板子不一样, 开发软件API不一样。

都是M3内核,感觉移植意义不太大。
来自安卓客户端来自安卓客户端
5
 楼主| 发表于 2015-11-11 10:28 | 只看该作者
Director_Liu 发表于 2015-11-10 23:06
都是M3内核,感觉移植意义不太大。



有意义,MultiWii 支持传感器很多,很容易diy
但MultiWii 的稳定算法不太好,改进了用在快的处理器上才有价值。

6
发表于 2015-11-11 11:41 | 只看该作者
payne_pan 发表于 2015-11-11 10:28
有意义,MultiWii 支持传感器很多,很容易diy
但MultiWii 的稳定算法不太好,改进了用在快的处理器 ...

稳定算法不好……那不能靠升级处理器来解决吧
来自安卓客户端来自安卓客户端
7
 楼主| 发表于 2015-11-12 12:32 | 只看该作者
看作者这么麻烦移植,没有改进,也很难维护。
所以 MultiWii 的stm32继承者很可能是 cleanflight
8
发表于 2018-11-3 13:00 | 只看该作者
期待multiwii这样的好飞控快快发展,支持的机型很多,和APM等高端一点的飞控相比,优势目前还是有的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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