本项目设计的是无线遥控直升机接收控制电路。本设计采用飞思卡尔公司生产的MMA7260QT低量程三轴向加速度传感器和低功耗的MC9S08QG8 微控制器,并配合极少量的外围器件。该电路能接收无线遥控发射机的控制指令,使直升机以不同的速度前进、后退、转弯,在没有收到动作指令时能使直升机自动保持稳定。由于该电路的体积小(32×12mm),重量轻,因此可以用于超小型遥控直升机。
设计概述
该系统能通过红外遥控指挥直升机以不同的速度前进、后退、转向。该系统主要有两大部分:第一部分输入转换、指令编码、红外发射部分;第二部分红外接收、解码、飞行状态检测、伺服电机控制部分。这两部分的红外接收部分不是本次设计的重点,不做详述。
直升机是由三个小型电机控制的:一个主旋翼电机,控制飞机的上升或下降;一个尾翼电机,控制飞机的方向;一个前进/后退电机,控制飞机前进或后退。本系统利用螺旋桨产生的推力使直升机的重心发生改变,使直升机向前或向后倾斜,来实现直升机的前进或后退。对直升机的准确控制,就是通过对这三个电机速度的准确控制来实现的。
利用MMA7260QT三轴向加速度传感器将直升机的飞行状态信息转换为相应的电压信号,再利用MC9S08QG8微控制器的10位ADC转换器将信号转换为数字信号。MC9S08QG8的程序将这些信号综合,自动控制直升机上的三个电机,使直升机状态稳定。
系统设计
设计思想和技术关键
遥控直升机的飞行受飞行环境和设备状态的影响很大。随着飞行环境和设备状态的变化,想要保证稳定的飞行姿态是很难的。有了能自动调节飞行姿态的稳定器之后,操纵遥控直升机就变得非常简单。该系统是采用飞思卡尔公司的MMA7260QT作为飞行状态传感器来实现的,具体实现方法如下:
Z轴是直升机的升降轴,在直升机静止时读取MMA7260QT的Z轴数据,作为参考点。飞机上升或下降时读取的数值相对于参考点的变化量,就是Z轴的加速度az,那么飞机上升或下降的速度Vz就是az对时间的积分。上升为正、下降为负。程序按照适当的比例换算后控制主旋翼电机的转速,使直升机保持为悬停状态。当然,这只是对Z轴理想化后的理论计算。
由于当直升机发生倾斜时,Z轴的数据参考点会发生变化。这样,还以原数据作为参考点得到的gz就不是正确的。为什么直升机倾斜会使静止参考点发生变化呢?那是由MMA7260QT传感器的特性决定的:当Z轴垂直于地面,也就是与重力方向平行时,在Z轴上已经加有一个重力加速度。当直升机发生倾斜时,Z轴上的加速度就只是重力的一部分,这样实际的零加速度参考点已经发生了变化。所以,在求Z轴的加速度时,必须解决这个问题。
在直升机飞行过程中,由于直升机的重心很低,所以认为在X-Z面上是不会有倾斜的。Y-Z面的倾斜是操纵直升机前进或后退造成的,当Y-Z面发生倾斜时,Y轴的静态参考点也一定发生了变化。当然,在Z轴和Y轴有合成加速度时,也会出现这种结果。无论是哪一种原因造成的,我们都要先去调整Y轴,使Y轴的数据值在静态参考点上。在倾斜度为零、加速度也为零的状态时,Z轴静止没有变化,这时的条件和理想化的条件是一样的。所以,这时得到的gz是正确的。我们就在这时读取gz的值,作为控制Z轴状态的依据。
在实际飞行状态中,倾斜产生的重力加速度与Y轴加速度的代数和为零是一个特殊状态。这时直升机倾斜在Y轴产生的分力所产生的加速度正好与Y轴的实际加速度数值相等,而方向相反,安装调整时要注意回避这一特殊状态。
Y轴是直升机的前进/后退轴。因为直升机是在室内飞行,认为环境没有风的影响。所以只要直升机有加速度存在,直升机就有倾斜。直升机前进或后退的力Fy是直升机的升力F0的方向与重力的反方向的夹角β的正弦函数。有Fy=F0sinβ,而Y轴的加速度ay正比于Fy。由于直升机的速度很低,忽略空气阻力的作用,则:ay=Fy/M,式中M是直升机的质量。
同时,倾斜角会产生一个重力加速度gY,夹角也是β。它与重力加速度g0有:
gY=-g0sinβ。ay和gY的方向是相反的。测到的加速度a是ay和gY的代数和。这个代数和的方向及大小可以实测得到。
为了减少实测数据的工作量,只测出a的方向和大概数值即可。控制时使a逐步向零靠近,最终基本等于零。
由于在直升机转向时,X轴有加速度,同时Y轴也会有加速度。为了简化计算,Y轴的加速度也要在X轴的加速度为零时检测。
当Y轴有操纵指令时,Y轴的自动控制暂时被停止。
X轴是直升机的左右转向轴,在Z-X面上,直升机不会有倾斜,所以Z轴的加速度不会影响X轴的加速度。在直升机静止时,若直升机发生方向改变,程序就控制尾翼电机,使方向改变停止,使X轴方向速度为零。当Y轴或X轴有操纵指令时,X轴的自动控制暂时被停止。
另外,直升机在飞行过程中,电机和螺旋桨转动引起的振动也使传感器产生失真数据。所以,需要排除自动干扰后的数据才能使用。那么,怎样排除这些振动的干扰呢?该方案采用了两种措施:一是将信号限制范围,超过范围的信号被排除。二是用累加平均法:用远高于振动频率的采样率读取数据,再以远大于振动周期的时间段将数据平均。这样得到的数据,可以排除大部分的振动干扰。
系统的功能和工作过程
直升机接通电源后,处于接收遥控信号状态。
发射机必需先按下启动按钮,直升机方可启动。在启动之前,所有其它操作都是无效的。
收到并确认遥控信号的启动信号时,同时启动三个电机。电机的启动速度很慢,保证直升机不会动。当电机的速度增加到使直升机有微小上升时,控制电路记忆保持直升机不动时电机的最大速度。这时启动过程结束,直升机的移动可随意遥控。
遥控器左手的纵向控制直升机的升降,右手的纵向控制进退,右手的横向控制方向。长时间无正确的遥控信号时,程序会自动使直升机停下来。
电池电压不足时,LED会亮1秒,暗1秒来指示。在电池低到一定程度时,会自动进入停止操作,并同时输出电池电压不足LED指示。
系统框图
系统框图如图1所示。
硬件描述
编码、红外发射和红外接收电路不是本次讨论的重点,不做描述。重点描述飞行姿态传感器电路、ADC电路、解码电路、XYZ轴输出电路。图2所示为其原理图。
飞行姿态传感器电路
该部分电路由MMA7260QT、R1、R2、R3、C1、C2、C3、C5组成。
MMA7260QT是一个三轴小量程加速度传感器模块。它的灵敏度可通过g-Select1和g-Select2来选择。最高灵敏度可达800mV/g。工作电压低、可工作电压范围宽(2.2~3.6V),功耗小(0.5mA,在睡眠状态只有3μA)。非常适合电池供电的应用。另外,小尺寸封装,使其重量也很轻。g-Select1和g-Select2分别接到PTA2和PTA3上。可以根据需要选择灵敏度。
XYZ轴的输出经过电阻R1、R2、R3和电容C1、C2、C3滤波后分别接到了MCU的ADC输入。 因为在这项应用中MMA7260QT 保持在工作状态,所以Sleep Mode脚接到了VDD。C5是为了减小电源波动对传感器的影响加的去耦电容。
XYZ轴输出电路
XYZ轴输出电路由电机Mz、Mx、My、MOSFET管T1、T2、T3、二极管D1、D2、D3和电阻R6、R7、8组成。XYZ轴电机控制信号分别通过普通的B口输出脚PTB5、PTB4、PTB6输出。这里PTB5、PTB4、TB6已经通过软件将其做成PWM输出口。它们输出的是电压PWM信号,通过PWM信号控制电机的转速。
这个PWM信号通过电阻R6(R7、R8)送到MOSFET管的控制极,控制MOSFET管的通/断,带动电机工作。因为MOSFET是电压控制器件,是不需要限流电阻的。这里的R6、R7、R8是为减小电机的脉冲干扰信号通过T1、T2、T3耦合对MCU的影响而设。
D1、D2、D3是在T1、T2、T3关断时为电机提供电流通路。
Mz是主旋翼电机,带动直升机的主旋翼,控制着直升机的升/降。
Mx是尾翼电机,带动直升机的尾翼螺旋桨,控制着直升机的方向。
My是进/退电机,控制着直升机的前进/后退。
系统软件
软件流程
软件流程如图3所示。
软件描述
飞行姿态信号和电池电压AD转换程序
实现飞行姿态信号测量的方法是:首先用准确的时间间隔来测飞行姿态信号;将测得的数据进行比较,大于最大限制值时放弃;对于在规定范围内的数据求代数和,同时记录求和的次数;经过一段规定的时间后,将求得的代数和除以求和的次数,就得到了在这段规定时间的平均值。用计时器设一个定期的时间中断就可实现测量时间的准确间隔。
实现飞行姿态信号测量的程序简略如下:
在初始化程序中:设置ADC在CH4上,ADC关中断连续转换。在CH4上是X轴数据设置,MTIM计时模块T_n时间中断一次。
电池电压监控程序
当检测到电压低到某一值时,程序会通过LED显示,向操纵人员报警。如没有及时控制直升机停止飞行,电压会继续降低。当电压低到不能允许再低的时候,程序将强制直升机停止飞行。这个"强制停止"不是立刻将电机停止,那样会使直升机坠落,而是平衡地减小PWM输出,使直升机缓慢的降落