MultiWii 飞控 DIY-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 43394|回复: 18

[资料] MultiWii 飞控 DIY

[复制链接]
发表于 2016-1-23 15:55 | 显示全部楼层 |阅读模式
本帖最后由 skypup 于 2016-1-23 18:35 编辑

MultiWii 飞控是用在 Arduino 下开发的一个经典例程,原生程序目前最新版本是 2.4,此贴分享 DIY MWC(MultiWii Copter的简写)4轴过程。

MWC飞行中.jpg



MWC地面.jpg





目录

1 AVR Mega328P 的 Arduino 最小系统

2 OptiBoot

3 飞控电路板

4 多轴机架

5 WinGUI 软件及 PID 初步调整


 楼主| 发表于 2016-1-23 18:30 | 显示全部楼层
4 多轴机架


机架的 CAD 图,选用的是 2mm 厚的层板。
机架CAD图.rar (34.01 KB, 下载次数: 81)



组装后的效果图,除了电池,其它电子设备都放在机壳内部。
1.jpg



V型尾电机座
2.jpg



V型尾电机座的爆炸图
3.jpg



前机身电机座
4.jpg



前机身电机座的爆炸图
5.jpg



机身尾杆
6.jpg



机身尾杆的爆炸图,黑色层板是 MWC 飞控放置的位置。
7.jpg



完成后,加上 3S 11.1V 2200mAh电池,一共 815 克。
8.jpg



使用了4个 MT2213 电机,1045桨。普通 20A 电调。
9.jpg





 楼主| 发表于 2016-1-23 16:33 | 显示全部楼层
本帖最后由 skypup 于 2016-1-23 17:46 编辑

1 AVR Mega328P 的 Arduino 最小系统


一个由 Mega328P 和几个常见元器件组成的 Arduino 最小系统:
mega328p.jpg

这个系统由一个 Mega328P 单片机,16MHz晶振电路,一个10K的电阻将 Reset 脚上拉到 Vcc,再把串口引出来就好了。AREF 和 AVCC 管脚 ,可以连接 Vcc。


Arduino 程序的烧写是通过串口进行的,我们可以DIY一个 USB 转 TTL 的烧录器:
ftdi.jpg

与普通4根线的 USB 转 TTL 不同的是,需要再多一条线将转换芯片的 DTR 管脚串联一个 104电容,再与 Mega328P 的 Reset 管脚连接。


建议使用 Arduino 1.0.5 版本,进行 MWC 代码的维护。
空的 Mega328P 芯片,可以使用 Tools 目录下的 Burn Bootloader 来烧写 Bootloader,烧写 Bootloader 之后,就可以通过串口来烧写 Arduino 程序了。
arduino.jpg




 楼主| 发表于 2016-1-23 16:58 | 显示全部楼层
2 OptiBoot(此步骤可选)

OptiBoot 是 Arduino 的第三方 Bootloader,烧程序的速度快。
先下载压缩包,把 bootloader 文件放在正确的目录下。
1.jpg


再在 boards.txt 文件中加入 Mega328P 的代码段。
2.jpg


##############################################################

atmega328o.name=[Optiboot] Arduino Duemilanove or Nano w/ ATmega328
atmega328o.upload.protocol=arduino
atmega328o.upload.maximum_size=32256
atmega328o.upload.speed=115200
atmega328o.bootloader.low_fuses=0xff
atmega328o.bootloader.high_fuses=0xde
atmega328o.bootloader.extended_fuses=0x05
atmega328o.bootloader.path=optiboot
atmega328o.bootloader.file=optiboot_atmega328.hex
atmega328o.bootloader.unlock_bits=0x3F
atmega328o.bootloader.lock_bits=0x0F
atmega328o.build.mcu=atmega328p
atmega328o.build.f_cpu=16000000L
atmega328o.build.core=arduino:arduino
atmega328o.build.variant=arduino:standard



在 Arduino 的 Tools -> Board 菜单项下增加了 OptiBoot 的 Mega328p 选项。
3.jpg




 楼主| 发表于 2016-1-23 17:39 | 显示全部楼层
本帖最后由 skypup 于 2016-1-23 17:41 编辑

3 飞控电路板

由于传感芯片的封装比较难焊,我们可以直接买现成的传感器模块。
MWC 支持许多传感器模块,例如:
GY-521,仅支持自稳功能,10元左右。
GY-87,自稳和定高功能,但应用于多轴时,定高功能表现很一般,40元左右。
GY-86,自稳和定高功能,但应用于多轴时,定高功能表现稍好一些,65元左右。


原理图供参考:
1.jpg



PCB 是用傻瓜级的 Proteus 7 画的。
2.jpg



3.jpg



4.jpg



花30元去 taobao 打样、买元器件,焊好了就是这样的。
5.jpg



飞控板的安装需要注意2点:
1 减震。至少也得象征性的用3M的泡棉胶带粘到机身上。我一般还会给飞控上、下各粘一块凝胶垫,粘到机身后,再用胶带把飞控与机身整个粘一圈,让飞控受点儿力压在机身上,增加凝胶垫减震效果。
2 气压计。不要让气压计直接暴露在流动的空气中,可以加个壳;尽可能避免气压计被阳光直接照射,如果壳是黑色的也许会更合适。我们要做的这架4轴,飞控是放在机身里面的,所以受外界的干扰不会太大。



 楼主| 发表于 2016-1-23 19:15 | 显示全部楼层
本帖最后由 skypup 于 2016-1-23 19:20 编辑

5 WinGUI 软件及 PID 初步调整

我选用 WinGUI 软件连接 MWC 飞控调参。WinGUI 是使用 C# 开发的。
1.jpg



PID 的初步调整:
MWC 的默认 PID 对于大多数飞机来说,已经足够稳了。
但是,对于这种V尾的非常规布局,默认 PID 的表现就很不好了。

第一步,自稳模式下,试飞时发现打方向舵时,整个飞机都在各种扭,而且方向舵特别灵。
初步判断是方向Yaw感度太高。事实上,这种V尾4轴的方向舵效明显高于常规4轴。于是,我们同步减小 YAW 的 P 和 I,P 从 6.8 减小到 3.0,I 从 0.045 减小到 0.020,这样调整之后,方向舵对飞行的影响就很不明显了,基本达到预期效果。

第二步,自稳模式下,调整Roll副翼和Pitch升降舵的PID。
先按这样的原则初步调一下:尝试加大P、D的值,如果有自激则减小P;如果反应慢感觉太肉,减小D。I 的值影响抗风性,在调整时与P同步增、减即可。
初步调整之后,Pitch 的 P 减小为 2.5,I 减小为 0.020,D 增加到 35。与普通 330mm 或者 450mm 机架的参数相近,正常。
Roll 由于在这个机架上,仅受前面2个电机影响,所以感度应当加大。 调整后的参数也是这样的,P 增加到 4.0,I 使用默认值 0.030,D 减小到 18。

第三步,定高。
对于 Altitude 的调整,我只是凭经验,习惯 P = 6.4 不变。
如果是 GY-86 的这种MS5611气压计,D 可以相对小一些,如 60;I 可以相对大一些,如:0.035。
如果是 GY-87 的这种BMP180气压计,D可以相对大一些,如80;I则相对减小一些,如:0.018。


以上只是完成了 PID 的初步调整,让小多轴能安全的飞行。
可以再花大量时间做细致的调整,每个人喜欢的飞行手感不一样,参数也会有差异,适合自己的参数就是最好的。这里的PID调参并没有唯一的标准。

发表于 2016-1-24 22:17 | 显示全部楼层
请收下我的膝盖~~
发表于 2016-5-28 09:47 | 显示全部楼层
问下我用mage2560做的飞控板,但是硬件连接怎么看?
 楼主| 发表于 2016-6-1 18:33 | 显示全部楼层
深邃1216 发表于 2016-5-28 09:47
问下我用mage2560做的飞控板,但是硬件连接怎么看?

就是 I2C 接口的4条线,连到传感器模块上就好了吧。

注意一下区分 3.3V 和 5V 的电压就好。
发表于 2016-7-15 09:46 | 显示全部楼层
楼主你好,Bootloader可以直接用串口烧写?不是要用IPS啥的烧吗。。我有一块Pro mini烧程序的时候意外掉电,现在烧程序出现500的错误,我怀疑是Bootloader坏了,准备重新烧Bootloader
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:53 , Processed in 0.274812 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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