查看: 21393|回复: 13

[资料] MultiWii 飞控 DIY

[复制链接]
  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 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 初步调整


  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

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


    机架的 CAD 图,选用的是 2mm 厚的层板。
    机架CAD图.rar (34.01 KB, 下载次数: 56)
  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

     楼主| 发表于 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




  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

     楼主| 发表于 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




  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

     楼主| 发表于 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轴,飞控是放在机身里面的,所以受外界的干扰不会太大。



  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

     楼主| 发表于 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做的飞控板,但是硬件连接怎么看?
  • TA的每日心情
    开心
    2018-11-18 00:25
  • 签到天数: 238 天

    [LV.7]常住居民III

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

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

    注意一下区分 3.3V 和 5V 的电压就好。
  • TA的每日心情
    奋斗
    2016-11-10 19:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

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

    本版积分规则

    热门推荐

    学习记录2,Blinker读取温湿度
    学习记录2,Blinker读取温
    开关现在是使用得很6了,准备进行下一步,读取数据。 找了下官方的例程,发现用的是w
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    关于红外控制空调的模块选型
    关于红外控制空调的模块选
    想问问这中模块能支持arduino吗
    LCD1602只亮 不显示
    LCD1602只亮 不显示
    #include // initialize the library by associating any needed LCD interface pin
    18脚的8x8LED点阵如何使用??
    18脚的8x8LED点阵如何使用
    本帖最后由 Creeper666 于 2018-8-14 12:24 编辑 这个点阵模块上面一排有12个脚,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表