【2月26日领奖】 GD32MCU.com网站上线啦!快来寻宝赢大礼!

[复制链接]
楼主: 21小跑堂
手机看帖
扫描二维码
随时随地手机跟帖
dai277530706| | 2014-2-26 12:26 | 显示全部楼层

使用特权

评论回复
jjjyufan| | 2014-2-26 12:26 | 显示全部楼层
无标题.jpg

使用特权

评论回复
大秦正声| | 2014-2-26 12:31 | 显示全部楼层
玩捉迷藏游戏!!!

使用特权

评论回复
胡斯哲| | 2014-2-26 12:32 | 显示全部楼层
QQ截图20140226123034.jpg
谁然来晚了  还是要参加

使用特权

评论回复
z00| | 2014-2-26 12:53 | 显示全部楼层
找到了 2014-02-26_12-52-34.jpg

使用特权

评论回复
hxfxt| | 2014-2-26 14:19 | 显示全部楼层



1.png
0.png

使用特权

评论回复
lanseshuijing| | 2014-2-26 15:22 | 显示全部楼层
找到啦
333.jpg

使用特权

评论回复
ddllxxrr| | 2014-2-26 15:39 | 显示全部楼层
顶一个 123123.png

使用特权

评论回复
c506749189| | 2014-2-26 15:45 | 显示全部楼层

使用特权

评论回复
led控制卡| | 2014-2-26 15:50 | 显示全部楼层
未命名9.jpg

使用特权

评论回复
mmbs| | 2014-2-26 16:53 | 显示全部楼层
GD32F103+MPU9150四旋翼飞行器第一步:姿态融合算法

使用特权

评论回复
mmbs| | 2014-2-26 16:53 | 显示全部楼层
1.jpg

使用特权

评论回复
mmbs| | 2014-2-26 16:54 | 显示全部楼层
前言:
相比直升机来说,四旋翼乃至多旋翼飞行器的机械结构简单,操控灵活,飞行稳定,体积也能做的更小,当然也能更大,它将直升机复杂的机械结构设计难度转化到了电子电路和算法上面,因此四旋翼飞行器的设计更容易上手,更民众化。
四旋翼飞行器的软件核心包括两大部分:姿态融合算法和控制算法;硬件核心便是MCU和传感器。
先介绍下姿态融合算法,姿态融合说白了就是将3轴加速度、3轴角速度和3轴磁场强度融合成四元数,再将四元数转化为欧拉角,最后将欧拉角最为控制量输送到所有电机以达控制飞行器姿态的目的。欧拉角包括偏航角Yaw、俯仰角Pitch和滚动角Roll。我用的算法是Madgwick写的AHRSUpdate和IMUUpdate,简单有效,其中AHRSUpdate是融合了陀螺仪、加速度计和磁力计,而IMUUpdate只融合了陀螺仪和加速度计,就优缺点来说,IMUupdate算法只融合了加速度计和陀螺仪的数据,还需要使用互补滤波算法来融合磁力计以修正偏航角Yaw,不然飞行器会找不到北,但是这种互补滤波有个小问题,就是假如定义偏航角的范围是0-360度,那么当机头大概从北偏西1度转到北偏东364度时,机头会经过0度(360度)这个点,那么这时,yaw不会直接1-0-364这么变化,而是会被逆向积分从 1-20-180-270-364这么转一圈,这是个不好的现象,实验了半天也没有解决,而AHRSupdate很好的解决了这个问题,不过由于AHRSupdate把磁力计的数据融合进了所有欧拉角,因此当传感器受到外围强磁场干扰时,就会造成全方位失控,导致坠机,而使用IMUupdate算法,顶多飞行器会转圈而已。
传感器我用的是invensense公司的MPU9150,MPU9150芯片集成了加速度计、陀螺仪和磁力计,并且内置硬件DMP用于姿态融合,不过不好用;MCU则用是Gigadevice公司的GD32F103系列,由于我也是刚接触四旋翼飞行器,第一个目的当然是能够平稳的飞起来,暂不考虑加入其他外围设备。后续可能会考虑使用GD32F107或者GD32F2xx系列,可扩展摄像头小玩一把航拍,当然更好的是GD32F4xx系列(期盼中),自带浮点运算单元,由于我软件太菜,算法中出现大量的浮点运算导致姿态更新频率和控制频率达不到很高。

使用特权

评论回复
mmbs| | 2014-2-26 16:54 | 显示全部楼层

做四轴飞行器也是为了好玩,目前我只完成了第一步:姿态融合。接下来才是更重要的,选择合适的机架、电调、电机、螺旋桨,写PID控制代码,系统整合以后还要调试各种参数,抗干扰,抗震动,最后还要加各种应用器件。在此鼓励一下自己,**就是胜利,慢慢磨洋工。

    我现在软件实现的功能:算法用AHRSupdate、陀螺仪零偏校准、加速度计平滑滤波、磁力计平面校准,以后看情况可能会慢慢更新加速度计精确校准、磁力计椭球拟合校准、陀螺仪温度补偿等。

第一部分:硬件

1.传感器:MPU9150(INVENSENSE公司的,单芯片内集成了加速度计、陀螺仪和磁力计,并且内置DMP用于姿态融合,不过只融合了加速度计和陀螺仪,没有融合磁力计进去,具有自校准功能,价格比MPU6050贵很多,但是省PCB面积,省事,轴向重合度高。实际上就是把MPU6050和磁力计AK8975放在同一个芯片里,程序还是使用MPU6050的驱动,缺点是会偶尔丢失数据,自带的姿态融合算法的更新频率不高);

2.MCU:GD32F103CB(Gigadevice公司的,ARMcortex-M3内核,32位MCU,主频最高108Mhz,48Pin,与ST同型号的32位MCU 直接兼容,性价比更高,外接8M晶振,也可使用内部8M晶振,晶振远离传感器,避免干扰磁力计,不过当时考虑不周,这个芯片的timer太少了,以后会先采用GD32F103VCT6或者GD32F107VCT6);

3.电源芯片:TLV70233DBVR(TI的LDO,输入2-6V,输出3.3V,只需要外接2个X7R无极性陶瓷电容,价格太高)

4.串口:MAX3232(方便调试)

5.USB供电,输出电压5V


使用特权

评论回复
mmbs| | 2014-2-26 16:55 | 显示全部楼层

6.目前机架、电调、电池、电机和螺旋桨已买好,来张图,比较大众化:


上图:

图1:PCB的3D效果图,测试版,先追求调通得出姿态角,后续改版会做大的调整:


使用特权

评论回复
mmbs| | 2014-2-26 16:55 | 显示全部楼层

第二部分:软件

1.使用keil,uvision4.1.0,工具链:RealViewMDK-ARM Version4.12;

2.驱动:官方的MPU6050驱动inv_mpu.c和inv_mpu_dmp_motion_driver.c;

先看几个图,然后再说坐标轴的设定和算法部分。

上图:

图1:系统初始化,顺序从上到下依次是:初始化MPU、设置需要使用哪些传感器、设置陀螺仪测量范围(我设的是正负500度/s)、设置加速度计测量范围(我设的是正负4g)、配置fifo、设置采样率、装载DMP、设置陀螺仪轴向(比较重要)、使能DMP的一些玩意儿、设置DMP的FIFO、自校准陀螺仪和加速度计、开启DMP、开始姿态融合,见下图:


使用特权

评论回复
mmbs| | 2014-2-26 16:56 | 显示全部楼层

图2:由四元数求出的最终姿态角,其中Yaw为航向角,表示机头偏离正北方多少度,范

围-180到+180;Pitch为俯仰角,表示机头正方向与水平线的夹角,范围-90到+90;Roll为翻滚角,表示机翼与水平线的夹角,范围:-180到+180。下图为机身水平,且机头正北偏西37度左右的数据:


使用特权

评论回复
mmbs| | 2014-2-26 16:56 | 显示全部楼层

图3:下图为机翼水平,机头指向正北,且机头向下25度的数据


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则