本文原文发于网易博客上。记录的是我的飞行器学习的黑历史,主角是一台类似 阿凡达里面的双桨 VTOL (Vertical Take-Off and Landing)飞行器的详细制作过程。错字连篇,虽然烂尾,没有但是..
版权所有,转载请看
先放张图吓吓人,以下原文
项目名称:AUTO FLY SYSTEM
项目编号: FL project 005
目的:制作一个能自动导航并自动进行姿态调节的无人机控制系统
要求:
1.使用惯性导航和GPS进行导航
2.能自动进行姿态调节
3.能手动/自动飞行随意切换
4.有实时远距离状态/控制数据传输能力
5.实现自动航线飞行/航点实时切换
6.实现定点自动起飞/着陆
7.地面控制站支持
8.功能模块挂载
整体思路:
通过惯性导航和GPS等实现飞行器自动控制和导航,并进行实时修正姿态,接受地面控制等
预计用时:6个月
开始时间:2011年1月20日
结束时间:
硬件清单:
预算:2000RMB
逻辑图解:
首先,这是个大项目,其次,我有信心完成它
涉及的新知识有:
新的单片机C8051F
稳定的电源
AD转换
IIC接口
SPI接口
UART接口
上位机串口编程
上位机Labview编程
模拟输出传感器
IIC数字传感器
PI算法
导航算法
空气动力学
材料科学
无线RF模块
GPS数据格式
在初期,我打算用洞洞板先把硬件组装出来,然后写软件一个个调试。画板我还不会,顺利的话等到下学期应该定型可以做板了。
个人精力有限,对于这个AFS(Auto Fly System),作为一个C语言只写了1000行的初级入门半爱好者来说,姿态算法才是最有挑战的东西。所以寒假着重在算法上面花心思。其次,我是个电子盲(在一个唯一不学电子技能基础的专业的大学新生),所以传感器,能买到模块的就买模块的。买不到就尽量买数字的了,比起模拟的数字的外设少很多。
Auto Balance Module
MCU:C8051F410
使用内部晶振,工作在49MHZ
传感器:
1三轴模拟输出陀螺仪
2三轴模拟输出加速度传感器
以上采样率500HZ
3数字三轴电子罗盘 IIC接口 采样率50HZ
工作周期
500Hz
2HZ
PWM信号输出周期50HZ
输出接口
八通道周期50HZ的PWM信号
C8051F410的高速SMBus(IIC)
工作周期概述
并行周期1:500HZ
1转换三轴陀螺仪数据,取三轴加速度数据做融合,计算出短期的调整量。
2等待定时器中断
并行周期2:50HZ
1将30次短期调整量移动加权平均为 输出量,乘上速度系数,设定好PWM参数
2根据上次传回的PWM数据,设置好定时器,输出信号
3 取电子罗盘数据50次平均后,校准陀螺仪中立点。
4根据电子罗盘计算四轴姿态并保存。
5向AFN传输数据(航向,姿态…)
6接收AFN数据 设置飞行数据(速度参数…)
并行周期3:2HZ
1在0.5秒内对50HZ平均输出量进行计算平均,得出长期调整量,然后积分加入到输出量积分处
2等待定时器中断
Auto Fly Navigator Module
MCU:C8051F410
使用内部晶振,工作在49MHZ
使用外部晶振作串口基准 11.0592MHZ
外部模块:
1 PPM解码模块接收机(真讨厌!)
2 气压传感器
3 GPS模块 接口UART 38.4Kbps 取样4HZ
4 Auto Balance Module 接口SMBus
5 RF905 2W模块 SPI接口
工作顺序概述
1.接到ABM输出数据
航向,俯仰角,倾斜角…
2.回传ABM上一次的数据和指令
飞行模式(起飞,着陆,左转,右转,爬升,降落),PPM信号,其他需要PWM参数
3.开始转换PPM数据
根据ABM传回的数据,结合GPS坐标,航标和气压计,计算下一个航标的相对角度和高度,或者根据PPM信号进行调整。形成新的ABM回传数据。
4.写入SD卡,并通过Zigbee传输回数据地面(后来决定用RF905 433mhz)
5.等待下次ABM的数据
2011/2/12
好吧,这么多天,我一直没写这个,其实…真不是我偷懒。从1月29号到现在,我已经买了陀螺仪(LY530,LPR530),加速度计(ADXL335),磁阻传感器(HMC5883L),GPS模块(LEA-5Q),C8051F单片机下载器(EC6)…看上去差不多了是吧?错!最最最关键的单片机(C8051F410)没买到!淘宝商家个个都回家过年去了!我哭…不过这么多天来,我一遍又一遍地看了各个传感器的datasheet(都是英文的,想哭TAT),查了很多各方面的资料,泡飞行器的论坛,看各种各样的算法。(但是感觉什么都没学)
好吧,没事,只能先YY载体(飞机)了。
今天之前的文字是最初步想法,大概就是做一个惯性导航和GPS,磁阻传感器等配合而成的一个包括姿态控制和飞行导航的系统,并在载体上实践。
最初打算用固定翼模型飞机作为载体。选固定翼的原因很简单,我从小就接触固定翼的模型飞机,从绕橡筋,到后来的电动,从买来的商品机,到后来完全自己做的飞机。我虽然很久不玩模型飞机了,但是就制作能力来说,我还是很有自信的。给我两个小时,我就可以完成一台基于KT板的载体飞机。除了制作,我对固定翼飞机的飞行特点和控制方式都有很详细的了解。这些都是我一开始打算把固定翼飞机作为载体的原因。
但是,我必须得放弃固定翼了。第一,我忽略了实验场地问题,固定翼飞机飞行需要太大的场地,只少是一个足球场的空地,即使能在学校的足球场飞起来,也因为离自己太远不好观察和调整参数。第二,GPS不能提供足够的精度供固定翼使用,几十米的动态误差足够飞机撞体育场主席台了。即使飞起来了,想让它找准位置降落是很困难的。除非我能使用到DGPS技术,我现在还不太了解,理论上是可行的,我买的GPS模块也支持DGPS,等我有时间看过以后再说吧。
除去固定翼,我第一个想到的是四轴飞行器。我有做这个AFS(Auto Fly System)的想法也是因为看了其他人做的四轴飞行器例子。四轴飞行器,资料多,姿态算法都有现成的,而且控制原理最简单,又是对称的飞行器,没有复杂的控制算法。但是说真的,我自从第一眼看见四轴飞行器,就不喜欢它的样子,有点丑,有点突兀。我不是很愿意做这个。
上图是国内玩家自己DIY的四轴飞行器
另一个想法,是《AVATAR》里的直升飞机,样子很酷很酷,在哈利路亚这种低重力的星球上,它的两个涵道风扇显得并不是那么不合道理。之前几天我一直在思考,那么另类的飞行器,姿态检测和控制算法会不会比较复杂?我结合四轴飞行器和AVATAR的直升机,经过分析,得出一些结论:这两者之间,姿态检测是完全一样的,机体的倾斜,加速度的检测都差不多,控制算法上,AVATAR直升机和四轴飞行器在横滚控制上是相同的,但在前后倾斜控制上不同,但也不是很复杂。其次,AVATAR直升机相对于四轴有一个优点,重心比较低,这样,调试会变得简单许多。我看过许多四轴飞行器的视频,不少在飞行时会发生振荡,选择适合的参数显得比较困难。
结合这几天的分析,我决定选择AVATAR直升机作为实验载体。同于四轴的姿态检测,资料多,做起来会比较容易,相似又有不同的控制算法,对于我来说也是一种新的挑战。
AVATAR直升机
主体结构,有两个方向,玻璃钢和桐木。桐木是模型飞机里经常用到的,主要特点是轻,比轻木稍重,但强度大于轻木,小于松木,而松木最重强度最大,一般用于支撑结构上,比如翼梁。淘宝上有提供激光切割非金属材料的服务,我计算了一下,切1平方米3mm厚的桐木板大概需要100元,还可以接受吧。玻璃钢的话,又有两个方向,自己做(环氧树脂+稀释剂+玻璃纤维布),或者送去PCB打样,至少1平方米(这个价格估计比较杯具)。自己做呢,初中的时候我收集过许多资料,环氧树脂也买了,但是当时不知道怎么买玻璃纤维布,一直没动手做过玻璃钢,比较悬。固化剂那个浓烈的氨气味,不是一般人能承受的,不可能在宿舍做了,比较麻烦。但如果能用玻璃钢做,效果当然是最好的,我继续纠结ing。
另外,碳纤维不用考虑,完全不用考虑,我考虑不起,不解释。(好吧,刚刚我淘宝了一下,看来碳纤维也不是什么难事,有碳纤维布卖,如果做法跟玻璃刚差不多的话,就简单了。看来我的思想一直以来被碳纤维这个词吓得不轻。但是价格还是稍微悲剧,是玻璃纤维布的15倍)
好吧,再更新一下,刚刚又淘宝一下,发现有成品的玻璃钢板卖,价格还行 1mm厚的,50x50cm 20元。材料决定用玻璃钢了。
我查了很多资料,在动力选择上,最终决定用两个KV980 A2212的电机,配上1047的正、反螺旋桨(这些数字代表啥自己百度一下,我要是全部解释完,我都可以出书了),左右两边各一个。电子调速器,选用两个I2C总线控制的25A四轴用无感电子调速器。电池我选择 11.1V 2200mAh~4000mAh 10C以上的聚合物锂离子电池。旋翼伺服舵机使用两个扭力1KG/cm以上的50Hz PWM信号控制的金属齿轮舵机(刚刚看到这几年数字舵机已经普及了,但是我查不到数字舵机的通信协议,如果普通PWM舵机速度跟不上,也许会自己做舵机的驱动板,改装普通舵机,用自己协议,I2C总线控制)。
好吧,刚刚又查了很多资料,稍微有点失望了,数字舵机看来也不是那么数字的,只是把普通模拟舵机的50Hz PWM 信号速度加快了而已,250Hz以上。不管了,至少不用费那么多心思再去研究一个新的协议了。但是如果速度精度跟不上,不排除自己改装成I2C总线控制的舵机的可能。
根据电机的测试(希望这个数据是真实的),这个动力系统悬停效率最高的输出为两个电机各输出 480g 的推力(此时输入功率为54瓦,力效率为8.77g/W),两个电机加起来一共960g推力。整机质量最好能在1000g以下。悬停时间(2200mAh的电池)可以达到12分钟。
粗略计算一下:
电机+电调+桨 = 80x2=160g
电池(2200mAh)= 190g
伺服舵机 = 17x2 = 34g
机体结构(玻璃钢)= 250g
AFS主控电路 = 100g
连接线 = 50g
总计784g
这个估算~嘻嘻,很乐观嘛…
这套动力系统满功率300w时推力可以有1600g以上。看来有得玩了…希望不是我少算了什么~哈哈,要不然就强大了,推重比达到2以上,可以挂上跟自己本身一样重的挂载(外挂800g以上的负载)。不过此时,只有 4分钟的悬停时间,少得可怜。
哈哈,以上纯属无聊了YY…能不能做好姿态检测还是个未知数,我的能力就那么一点点。
好久不说话了,今天废话多了点
2011/3/5
距离上次更新已经差不多一个月过去了。现在是开学的第二周的周末。说一下,我第一周主要还是买东西,买了很多电子元件,还买了一个最便宜得焊台(60多RMB吧,发顺丰发了30RMB..其他快递就不敢用了)
其实,当我发现,我想要什么,那箱电子元件里就有什么的时候,也就不在乎300RMB买来一堆零零散散的垃圾样的东西了~
我想,今天可以发布这篇文章了,虽然都还只是在硬件上焊焊芯片,软件上写写串口驱动,但是我想,这个星期我学到的已经很多很多了,绕了不少弯路,有必要记录一下。当然,并不是说这个项目到此为止,更新会持续下去。
首先说说,这是我接触的新的单片机。我现在大一下学期,接触过的单片机只有STC 的1T系列的。说是接触,也只是接触一下而已,没用它做过什么像样的东西。大一还没开单片机课,估计要学也是学最标准的8051、8052而已。虽然没“接触”过,我想应该差不多吧。这回是C8051F410 这片是我在新华龙的C8051F选型表上经过很多对比选出来的。
LQPF 32的封装
50MIPS的速度
5V的IO口
200kbps N通道 12Bit的AD
各种串行接口都挺全的(UART I2C SPI)
很合适我的项目。
要说这是51单片机,我就郁闷了,根本不止51那么简单,说完全兼容标准51是不对的,至少兼容没有STC做得那么好。还有一些很不可思议的地方,比如默认开启看门狗!我在这里郁闷了2天的时间,才找出原因。当然,他这么做是 有道理的,我不会用罢了
另一个问题是,焊接的单片机,芯片的时候,坚决不要用普通的非恒温的电烙铁了,我为此废掉了一片C8051F410 14RMB就这么飞走了,还有我两个小时的青春…
不知道为什么,芯片在下载程序的时候只要接上外部晶振,就会出错。根本识别不了单片机,这点我也郁闷了4天,直到我的焊台到了,用飞线焊好第二片单片机的时候,没来得及焊上外部晶振,才偶然间连上下载器了。
外部晶振是11.0596MHz的,打算做标准UART波特率发生器。现在的结论是不需要了,内部晶振的精度勾了 0.15%的波特率误差,传送少量字节的时候完全不会出错(我现在一次传送6个字节 (5位数字ASCII+1位换行))。
再说说软件,软件也有一些奇奇怪怪的东西,比如开了UART0中断后,TIMER2的中断就废掉了。我了个嚓!
现在已经写了300多行,实现了系统周期计时,9通道AD转换,UART0发送16位的变量,16位变量转ASCII码…
好像现在能做的也只有这些了。
另外,大赞一个,C8051F的Config2真是太好用了,各种初始化函数,“一键”写完,Just copy and paste.计算波特率,通信速率的,很直白明了,各个设置之间关联也很紧密,不需要考虑太多。波特率在Datasheet上有,注意一下如果用了时钟乘法器的话,乘一下就好。
一堆堆的电子元件,花了我300RMB
这个星期奋战的环境…比较简陋。等到下学期我们学院解散了,我们进山里的新校区后,环境会好很多。
新买的焊台,什么牌子不记得了,挺便宜的。60多RMB ,来源淘宝
这好像是那种高频的电烙铁,通电10秒钟就可以焊接了,电源在柜子里,桌面上实在是没位置了。
这段时间,我一共飞了2片,可见我的焊工有多么烂,每只管脚我都测试过没短路短路后我才敢上电的。飞一片要1个多小时,我了个嚓!
左边的是UART2USB,右边的是433的UART透传模块。(这东西是高一的时候买的圆梦小车上的,那车在我手里从未自己跑过,焊H桥出了问题。我就是在这里接触STC的单片机的,是我第一次认识单片机)。
这东西320RMB 不多说…没能力焊接只好添钱,卖家说他自己焊坏了很多个了,这价格是加上焊坏的一起的。
三轴加速度计 ADXL335
三轴陀螺仪 LPR530 + LY530
成本最多120RMB
XP虚拟机上的结果,很不错~
现在的成果,为了今后焊接更简单,我昨天花了1个小时用NOKIA n81的烂屏幕DIY了一个USB“无影灯”。
具体看FL project 006 usb light
补光效果相当好的。昨天晚上的照片
(照片丢失)
今天早上的照片
(照片丢失)
我很满意~除了多占用了一个USB口。接下来有心情的时候再改装吧~酷酷的补光灯
今天就先到这里吧~
下一步就是提取传感器信息,然后开始写姿态代码了,给自己加油~哈~
2011/3/7
这两天主要是软件上面做,尝试了一下编写上位机,Labview卡在下不到VISA上,(刚刚才下载到,还没安装)试了一下VC编串口的上位机,用的是C语言,但是还是有很多看不懂的。大葱说VC6要在XP的虚拟机上开,有点纠结。VC还是很有难度的(当然对于我这种懒人来说)。按着ourdev上的《从零开始学VC系列教程 一.信息显示实验》,做了一个串口接收程序,但还是不太明白,代码都是别人写的,自己看得也不太懂。
还在纠结VC还是Labview的选择。
至少还不急,也许不急吧。
现在分析数据可以用串口助手接收数据,然后matlab和Excel做表似乎都很方便。就先不纠结上位机用什么编了。
程序已经写了500多行,最大的进步就是把串口收发和ADC转换做成了中断的方式,这样就可以留更多的时间放在姿态算法的计算上了。
串口中断收发程序是在网上找的,修改了很多,精简了一点,缓冲换成32字节(兼容以后无线数传,每帧字节也是32个)就放到我的代码里,代替了原来的串口收发函数,用起来很好~只是要做成指针的形式,指向一个数组,还要知道长度,在中断里循环发送。不是很直观,但也很好理解。
于是我也模仿这种方式,在GetSensorData()
函数里,只写了一个语句,ADC0BUSY = 0;
用来调用ADC的interrupt函数。中断函数第一次只选择一个通道,然后开始转换。第二次就设置下一次的通道,把上一次转换的值付给所需的变量。一共转换9次,调用interrupt 10次。
期间调试了很多,还遇到输出都是00000的情况,原因是在一个八位变量里左移了8位(相当于乘以256)。后面换成这样的语句后就解决了
AccAdX = ADC0H;
AccAdX = (AccAdX<<8) + ADCHL;
要注意的是,上面的小括号一定要加,不然还00000.巨囧。
这样以来,UART0 和 ADC 都换成中断的形式了,这就留给姿态算法更多的时间了,至少这500多行里只有一个 while(TF2H != 1){;}
用来判断是不是达到系统周期定时4MS了。没有把时间浪费在不该浪费的地方,我很欣慰。
昨天做好UART 中断,今天做好ADC 中断。绕了很多弯子,不过总算现在都工作得很正常了~很HAPPY
自己写的(其实是抄的)代码,用我的单片机发送的AD转换结果,好像很正常.也许吧..呵呵。至少收到数据了。有点点曙光~
总结到这吧~
希望姿态算法能写得很顺利~
2011/3/26
额…很久又没更新了,怎么说,不是我懒(其实也懒),是有些问题实在太纠结了。直接说正题好了。
尝试写了一些姿态算法,写出来,思想并不难,但是必须先做好底层的东西,比如通信。于是姿态算法就先不做了。
最近一直都在忙一个东西,一个小小的外设,可能在晶圆上面它占用的面积也就跟一粒灰尘差不多,但是实在是让我觉得纠结。不过到今天总算差不多弄清楚了。这个东西就是 C8051F410 的硬件SMBus总线。
这个SMBus不是真正的SMBus,我觉得叫做加强版I2C比较合适。第一是没有速度的限制,速度可以达到系统时钟的1/10,如果是100MIPS的C8051F,就是10MHz了很夸张的…他有I2C没有的功能,低电平超时检测等等…功能多了,带来的问题就是配置麻烦。
我是第一次接触这类串行总线,着实让我郁闷了好久(一个星期)。一开始我去看I2C的总线规范,并不是很难,用到的就只是最简单的几种时序。模式很简单,就是4种(主机发送,主机接收,从机发送,从机接收),思路很清晰。英文文档里,主机叫 Master,从机叫Slave…字面上解释,比中文的主、从要深刻得多,主人和奴隶…
要做这个,我第一反应是上网找现成的程序,边看边改。很快我找到了一个,在一个网易空间里的(做技术的用网易空间的人好多哦)。马上复制粘贴,编译了一下,发现不行,有一个寄存器中的值名字叫 “AA” 我找了C8051F410.H ,根本没有这个值,我开始觉得有些不对经了,然后我又找了其他的地方,发现配置寄存器410中是SMB0CN,而程序里是SMB0STA…越来越蹊跷了,后来看了看文章发表的时间,我才反应过来,原来我落后了。文章是09年写的,好像是针对 C8051F9XX 写的,因为9xx 的 datasheet 里才有那个寄存器,我在书里看见过。而 9xx 的 SMBus 跟 410 的不同,9xx 的是简化过的,而且又增加了一些功能,比如地址自动检测等。
于是,我只能自己看文档自己写程序了,看了很久,但是不懂,又是后来,才反应过来,去找 C8051F 的example 程序,在里面找到了 SMBus,纯英文的注释,不过好过没有…注释写得很简单很清楚很明了…于是连我这种英文垃圾都能看的懂。花了好几天的时间去研究他的例程,得到的结论依旧悲剧。SMBus 文件夹中一共有6个文件…
翻译过来分别是:
单主机,单字节传送
单主机,多字节传送
多主机,单字节传送
多主机,多字节传送
从机,单字节传送
从机,多字节传送
我不明白的是,为什么偏偏。。偏偏要把功能都分开呢!
我要的是一个能传送多个字节,又做主机,又能做从机的程序…
最后我选择在多主机单字节上面改。
于是又花了好几天,到现在的样子。(省略过程几万字的感慨)
结构已经基本明了,函数写完了,编译出来没有错误,只差上机实验了。今晚有点累了,明天是周末,明天再弄吧。
其次。。我找到了合适的机架~喔耶耶
机架一直是我一个比较郁闷的问题。怎么说呢,在我自己做的话,不是不可能,我有这个能力,之前的打算就是买玻璃纤维板,然后锯成条,再用环氧树脂胶把条粘贴成立体结构的机架,原理可行,有点麻烦,我不是很愿意做。
今天上英语课的时候,我突然想到,既然我做的也挺想直升机的,为什么不能直接利用直升机的机架?改一下就可以啦,电池位置也可以很方便地调整,重量也可以得到控制,最主要的还是,我不用动太多手~
于是上网查了一下,这个才148元,还是碳纤维的,决定要这个了。(还挺帅哈~)
其次,上位机的问题继续纠结住。
又经不住拉框框的诱惑,打算去买本VB的旧书学习学习。
今天就到这里吧,好累。
2011/3/27
知难而退的好孩子~VC6我搞不定,换个最简单的 Basic 语言弄弄。反正“黑猫白猫,能抓到老鼠就是好猫”搞定一件事,用最简单的方法不更好么?
花了两天的时间,把 Visual basic 学了个大概,去旧书店买了一本书(好像昨天是什么地球日来着,提倡7点半开始逛灯一个小时?很形式,到处发传单。我觉得,提倡买旧书更能保护环境…)书是基于,VB6.0 的,这里我纠结了很久。之前我用 VC6,在 64 位 WIN7 里面编译不了,只能开虚拟机弄。现在心想着,也许用 BASIC 语言,就可以用 VS 2008 了,那就意味着更智能的编译环境,和更加方便的编译条件…
但是一切都想得太完美了,导致我又绕弯弯了,关键就在于书是 VB6 的,我的是 VS2008,这里面的 Basic 语法有一点区别的。具体有多少区别我不懂,我才接触BASIC 两天而已。但是至少我用“组合框”的时候,根本赋值不了。有必要的话,我再去买一本 VS2008 或者VS2010 的书吧~
后来我还是得回到 XP 虚拟机里面…还好我寒假果断给电脑换了 7200 转的硬盘和 4G 的内存,不然估计得卡德悲剧。
Basic 跟 C 其实差不多…但是也差很多。其实在我眼里,他们的区别感觉就是,C 更底层,Basic 更应用,C 区分大小写,要注意内存,Basic 不区分大小写,内存可以不管。我对 basic 还不了解…别拍我..
Basic 里弄串口还是很简单的,MScomm 控件就可以,挺方便的。今天的成果,已经可以实现接收串口数据了,接收到的是加速度传感器的值,已经在单片机内转成 ASCII 了。发送没测试,应该不成问题。
下面那一大块空白是留作曲线绘制的时候用的,不知道有什么好的图形控件,实时观察传感器和参数的曲线。
比起前段时间用VC来说,VB感觉起来是自己写的,上次的VC更像是抄的…也许以后都用VB开发上位机了,功能够就行,方便更好…
VB很方便啊
2011/3/31
待会就是愚人节了
AFN上位机第一版终于做出来了,现在实现的功能是实时显示6轴姿态传感器的数据,并画成实时曲线图。
看图吧,累死了。从五天前,从刚刚接触 VB6和Basic 语言,到现在做出第一版简单的数据分析,绕了好大的弯弯,不过到现在总是是有了点点希望。宿舍快断网了...先传照片吧。
2011/4/1
愚人节~
今天是母校南宁二中的校庆。。
听到何伟萍校长病逝的消息..心情有点沉重。我对她的了解不多,她是我们高三的时候才上任的。百度一下,才知道她生前的获的很多荣誉,是个值得敬佩的人..
昨天写上位机写得太匆忙,现在做一下补充说明
整个上位机是基于VB6写出来的,Basic 语言入门真的很快很好很简单。也许对于我这种又懒又没人教又不努力的人来说,是最好的选择了。
之前尝试过了LabView,VC6。labview 是我在 ourdev 上的上位机板块找到的,然后百度一下,做工控软件似乎很是简单。用的是G语言,图形化的语言,怎么说,我每次看到都会小小地纠结一下。不习惯,看不懂,然后去尝试看labview教程视频。越看越反感,觉得框框还不如代码清晰(这个仅是个人意见...别敲我,特别是我这种傻瓜,不值得你敲~)。labview 之后,大葱推荐我去看 ourdev上的一个帖子,讲的是VC上位机编程的(上文提过),我按照帖子做,是做出了一点成果,不过当时我不是很有耐心去看,也不知道是怎么办到的。其次我不喜欢VC6的代码编辑界面,至少得多点“色彩”吧?(单片机里我一直用 keil4 自己分配关键字的颜色,代码会清楚很多)。还有就是,VC 生成的是 C++ 语言的.....
图表控件是 teechart 4 pro 破解版的....
Text框显示的是接收到的传感器的值,空格做分隔符。
下面的浅蓝色条条是实时的三轴加速度(Acc),三轴陀螺仪(Gyro)的实时显示,用进度条来作指示,值得范围是4095~0,加速度计输出电压是0~3.3V,我的AD是0~2.5V,所以整体高了一点。图表是自动往右平移的,网上找不到方法,只好自己摸索。方法是这样,把横轴的最大值设置为自动,然后把 最大值减去一个定值,赋值给最小值 就可以了。触发用的是定时器,触发间隔是20ms 刷新率50HZ,我在虚拟机里开,CPU占用有点高了,达到35%这样...
有了图表观察起来就方便多了,自动更新数据,用起来很不错~~
软件还有点问题,右边的图例错了,应该是
AccX 红
AccY 绿
AccZ 蓝
这是一个问题,Gyro的三条线从刚上电开始,是一直下降,大概持续10秒后才能稳定在2048左右,很蹊跷。
从这里可以看到很清楚的 陀螺仪和加速度计之间存在联动,有了这点设计上就会很方便了。
2011/4/22
好久好久没更新了捏...
因为最近走了很多很多路,换句话说是很多很多弯路
姿态积分已经开始写了,飞机硬件已经开始做了
反复看了 ourdev 和 5imx 上面的帖子,我忽然意识到一个问题:他们都是老手,他们都是高手,步骤一般都是先做好硬件,然后画好电路板,然后送去打样,然后,然后的然后!才开始写程序,写代码。
只有我这菜鸟发癫发癫的先写软件,写得差不多了,不管怎样陀螺仪就是有点点漂移,加速度怎么样都是那么准,姿态积分怎么调都不能再 0 附近...
看了多少姿态算法,看了多少帖子,试了多少自己的方法。才意识到原来是没有硬件调试,调试个P啊...你把一块电路板传感器放那,他能按你的程序作出反应咩?我发现我就是傻X。
在 C8051F410 的 SMBus 上,徘徊了6天,最终发现是飞线有管脚虚焊,这坚定了我下一步一定要学protel 画板去打样的信念。(省略1000字感言)
今天早上上完课后,就回到宿舍开始锯玻璃钢。我有3种厚度的玻璃钢,2mm 1mm 0.5mm
2mm太厚,1mm太薄...唉!
我放弃了电磨的方式,电磨太重口味,弄得宿舍一股消毒水的味道,试过在水里切割玻璃钢,但却又多了四溅的水
于是手工+锉刀,慢慢磨,慢慢磨....于是成这样了。。。
锯子
单条的重量,一共需要4条,作用以后解释
(皂片丢失了。。)
机架的重量,最终应该在200上下
这重量相当于除了电池外的所有东西了...很乐观
当然上位机也改了,传输改成变量直接传,加了加法效验,不需要转换成ASCII了
加了CPU 占用率,实现的方法就是在等待定时器达到系统周期之前,累加 SystemIdle 这个32位无符号变量的值。最大值是不通信,不做运算的时候记录下来的,然后用又计算又通信的值除以他,得到一个相对的空闲量,再变换一下就成了占用率了。虽然是相对的,但也很够用很直观了
看来我低估了这颗 C8051F410 了, 现在计算的东西已经有最终的大约 1/2 了,然而才占用了8%。49Mhz 50MIPS,真的不是盖的。
以后可以把系统时钟提高到500HZ哈哈
2011/4/24
今天把机架装起来了,用的是504胶水,看上去很不错哦,挺坚固的,等明天完全凝固了,就开始钻电机空了,之后就可以上电机啦~~
全部是手工做的,用锉刀等工具,扩孔,从2mm大的空扩到13mm,锉刀一点一点锉出来的。弄得我手上面都是伤。以后打算用protel画PCB然后送去加工好了,像他们做四轴一样,多方便啊。300块我都愿意了…自己磨太痛苦了。
今天主要放图片哈~
正在晒太阳…等胶水干的日子,也有点点无聊,下面那两个支架,上面还用纤维胶带绑着…定型,不然就白费了
(皂片迷失了。。)
机架部分特写..
轴承直接用钳子锤进去,然后串上铝棒,定好位,马上上胶,大概2个小时后就固定好了
支架的重量,有点重了…如果能用PCB做好,就好了,可以在上面打洞,而且也不需要那么厚的。这个2mm有点夸张了(因此我的手…),其实1.6mm这样应该刚好合适了。
(照片丢了。。)
加上6mm * 250mm的铝棒后的质量
组装上去啦,好帅呀~哈哈 208g 是已经加了两个舵机在上面的重量了,还是很令人满意的~
转轴特写~很流畅,每一边2个大轴承,没有虚位,胶水很给力,缺点是比较重,玻璃钢难加工!
请看下集: 与飞控无关 - 记刚开始弄飞控那会儿(下)