joyrus 发表于 2012-7-11 20:44:58

我的第六个单片机开源项目——PIC单片机模型直升机陀螺仪

本帖最后由 joyrus 于 2012-7-11 20:47 编辑

项目设计目的:通过PIC单片机的ADC采样陀螺仪传感器的角速度电压信号,进行加工处理后生成控制舵机的标准PWM脉宽调制信号。此次项目会尝试性的挑战锁定式陀螺仪的功能。

本项目使用C语言编写使用PICC(Hitech C)

这是一个有很大挑战性的项目,需要了解陀螺仪的一些特性以及简单的数学计算,为了以后设计锁定式的陀螺仪而打下基础。本项目还将建立在PIC16F877A这款超级普及的PIC 8位MCU(单片机)之上。与此同时,我将选择PIC24F系列16位MCU的平台来完成下一个锁定式陀螺仪的开发!

joyrus 发表于 2012-7-13 13:56:36

本来期望借助于PIC16F877A的CCP模块以PWM的工作模式来输出舵机的标准PPM调制信号,但是由于其用户确定PWM周期的TMR2定时器的宽度和预分频的限制,只能产生最低约4ms的PWM周期,而PPM需要20ms的周期信号。所以如果要在877上实现PPM输出的话还是要使用我在我的第二个单片机开源项目——全比例模型遥控器摇杆位置采样与PPM编码信号输出程序中使用的方法。为这个项目增加了一点麻烦。而便利的CCP模块暂时也无法得到很好的利用,当然还有其他的方法比如利用CCP的比较输出来产生中断,而得到固定的周期。

joyrus 发表于 2012-7-17 00:40:30

本帖最后由 joyrus 于 2012-7-17 01:04 编辑

经过几天的学习后首先完成了对陀螺仪传感器釆样的程序。

其实这部分程序是比较关键的,为了保留TMR1和TMR2的资源给之后的ccp模块完成ppm信号输出和接收机ppm信号的输入,所以定时采样的过程使用TMR0来实现。利用分频器可以方便的设定益出的周期,响应中断来保证等间隔采样。

这里要提到一个很重要的内容,无论什么传感器都有自身的噪音,这会给整个系统带来严重的不稳定性。对于陀螺仪来说我们平时提到的温飘问题就是其中之一。由于各种原因,陀螺仪在静止状态下输出的中间值总会出现不同,如果不采取一些措施就会造成所谓的温飘现象。

为了使程序的设计尽可能不被硬件所误导,我使用了一颗日本futaba公司为高端遥控直升机产品设计GY401陀螺仪的传感器。据称这是一颗使用在导弹制导系统中的军品。当年这样一颗陀螺仪需要越1000人民币。

这颗陀螺仪内部结构简单,传感器体积很大。稍后我会附上照片。我的采样程序就是用它完成的。它的稳定性确如其传言,令人映像深刻!

yudezheng 发表于 2012-7-24 19:01:19

怎么版主一个人做,没有其它爱好者。

yudezheng 发表于 2012-7-24 19:08:46

这一套元配件要多少钱?我也想玩,可惜只会一点汇编。

joyrus 发表于 2012-7-25 11:33:40

楼上的朋友也有兴趣的话可以一起玩一玩。

陀螺仪的软件设计和硬件设计都很重要。我简单研究了一下GY401陀螺仪的硬件电路。发现其使用了一个升压模块将输入的电源升到7V再稳压到4.98V(5V),其电压的稳定性非常好。这就避免了采样电压不稳定造成的误差。这一点在我的开发板上得到验证,由于本人的开发板没有提供5V的稳压模块而是直接使用电脑的USB接口电源造成了明显的采样误差!

另外GY401的处理器MCU使用了一颗引脚数量达80PIN的单片机,可见其对于软件数据处理的要求是非常高的,一般只有高端的8位或者16位甚至32位的单片机才会有如此多的引脚,而真正使用到的引脚非常少,因为一般陀螺仪没有附带很多的附加功能。

根据对误差和数据处理的初步接触,陀螺仪的软件数据处理需要较为复杂的数学运算,所以选用至少16位带有硬件乘除法器,甚至是DSP内核的单片机是很有必要的。这也许就是目前低端成品模型陀螺仪性能不理想的主要原因之一。为成本与低价格而舍弃性能,这也是可以理解的。

joyrus 发表于 2012-7-25 11:34:44

这一套元配件要多少钱?我也想玩,可惜只会一点汇编。
yudezheng 发表于 2012-7-24 19:08 http://www.joyrus.com/images/common/back.gif

你是指什么配件,如果是开发板那么选择可多了,1-2百的到5-6百,甚至上千的都有。

joyrus 发表于 2012-7-27 10:21:40

经过各种学习,发现陀螺仪的主要性能受到采样系统电源精度,采样电路的硬件滤波,传感器品质,软件的数据处理(包括数据误差的处理)。在这中间有一个我们无法控制的陀螺仪传感器品质问题,相对应的解决方法就是数据误差的处理。

joyrus 发表于 2012-7-30 18:55:54

{:2_28:}这些天一直在研究一些重要的知识,大部分都涉及到数学知识,以前的东西要重新补补课才能继续这个项目开发。

至少现在需要了解的知识已经很明确了,就是误差的处理过程,包括了系统误差、随机误差等多种类型的误差的综合处理,这真的需要我好好消化一阵子了!呵呵~~

joyrus 发表于 2012-8-15 17:01:08

阶段性的研究后得到的成果是,在陀螺仪的算法中有一项非常重要的内容就是Kalman滤波。kalman滤波正是设计于在计算机上运行的数据处理算法。学过高等数学的朋友是比较容易理解这个算法中的公式的。可惜十几年前的数学功力大多还给了老师,现在啃起来有点吃力。其实并不一定要完全理解其算法的验证过程,甚至也不需要了解其数学原理,也可以直接使用。

不过对于我来说这个陀螺仪项目是自己的一个研究各种技术的载体,所以我并不急于着手立即实现这个项目。而是正好利用这个机会来进一步学习知识,也好为整个系统和未来的项目打下基础。

有关kalman的技术资料网上非常丰富,比如在百度文库,新浪技术资料分享中都有非常详细的中/英文-文献。有兴趣的朋友可以其下载来看看。同时我还在进行另一个邻域的项目准备工作,就是MCU与Enternet的通讯。这个比起串口,usb,甚至是CAN总线在某些方面更有潜力。
页: [1] 2
查看完整版本: 我的第六个单片机开源项目——PIC单片机模型直升机陀螺仪