引言 由于小型无人直升飞机具有的使用价值,目前世界主要发达国家都在积极进行研制。国外具有代表性的机型是日本雅马哈公司生产的RMAX。国内也有几家研究所和企业在研制无人直升飞机,国内一些院校也对无人直升机的遥控飞行和自主飞行进行了研究,都处于实验阶段[1-3]。昆明南天精密机电设备制作所经过多年研究,开发出了FG-10 B无人直升机,该机具有完全的自主知识产权,在昆明1 900 m海拔高度基础上,具有500 mn以上的使用上限,10 kg以上的载荷能力,这就为搭载多种机载航电设备和其他应用设备提供了实用平台[4]。然而,由于小型遥控直升机操作困难、遥控距离短,极大地限制了其应用。为解决这一问题,关键在于研制实用、可靠的增稳系统,实现水平姿态的自动平衡,将遥控直升机升级为无人直升机。 本文采用带8路10位A/D转换的STC12C5410单片机编程来实现机载系统俯仰倾斜姿态及方向信号采集,给出了直升机A/D转换C程序关键代码。同时本文还指出并纠正了宏晶科技“STC12C5410AD系列单片机器件手册”中的错误。 1小型无人直升机研制的难点与增稳试验系统构建 1.1小型无人直升机研制的难点 小型无人直升机研制的最大难点在于飞行姿态的自动稳定控制[5]。 直升机在飞行中,有六个空间自由度,其平衡都是由旋翼旋转产生的升力面的矢量分量和尾翼产生的力矩来进行控制,其控制难度远远大于固定翼飞行器[6]。在世界坐标系中,设X轴的正方向为飞行器向前的飞行方向, Z轴的正方向为向上的方向。空间飞行器在空间飞行时,有六个自由度,即沿X、Y、Z轴的平移运动和绕X、Y、Z轴的转动。 X轴的平移为向前向后飞行,Y轴平移为左右移动,而Z轴为上下移动。绕X轴的转动为横滚变化,绕Y轴的转动为俯仰变化,而绕Z轴的转动为方向变化。绕机体Z轴的转动已经采用锁定陀螺仪对尾桨产生的力矩进行控制,保证了稳定,而Z轴的平移平衡,由旋翼的升力和机体重力平衡,X、Y轴的轴向平行移动遥控起来难度不大。因此只要XY轴绕轴转动能够自动平衡,就能在很大程度上稳定直升机的整体平衡,从而大大减少操纵难度,所以应重点解决遥控直升机水平(XZ轴)姿态自动平衡控制问题。 为解决这一问题,可采用对优秀操纵手控制操纵进行模拟的方式,通过试验来确定控制模型的模糊算法,来实现对小型直升机的俯仰、倾斜自动增稳控制。要实现这一目的,需要对小型直升机的俯仰倾斜姿态进行遥测,对操纵手在发生倾斜误差(X轴向转动)、俯仰误差(Y轴向转动)时的操作进行遥测,以获取必要的数据进行分析[7]。 1.2小型无人直升机增稳试验系统构建 为实现上述要求,研制了一套小型无人直升机增稳试验系统。 小型无人直升机增稳控制系统的框架如图1所示。本系统由PC机应用系统与机载系统共同组成,由PC机上的虚拟场景中虚拟直升机来模拟实际飞行的无人直升机。机载系统采用STC12C5410AD单片机,完成倾角传感器、磁阻传感器、GPS模块数据的采集、编码及与PC机的通信。 2机载系统STC单片机编程 2.1STC系列单片机 STC系列单片机是美国STC公司在8051单片机标准内核结构基础上对芯片内核进行较大改进后推出的一种增强型功能的8051单片机,是具有全新流水线和精简指令集结构的高速率、低功耗的新一代单片机。在8051系列单片机中,STC系列单片机在指令系统、硬件结构和片内资源上与标准8051单片机完全兼容,同时还带有4路PWM/PCA (可编程计数器阵列)以及SPI同步通信口,内部还集成有MAX810专用复位电路和看门狗电路。这些特点不但增加了开发者的使用灵活性,同时还可以帮助用户减小PCB尺寸和系统成本。此外,STC系列单片机还可以通过串口(P3.0/P3.1)直接下载用户程序,从而使其适合于在系统(ISP)可编程和在应用(IAP)可编程,无需专用编程器,无需专用仿真器。其中STC12C5410AD单片机还可以实现八路10位精度的AD转换,使用极为方便灵活,具有极高的性价比[8]。 2.2机载系统单片机主程序框图 机载系统中单片机主要是对俯仰倾斜姿态、方向等模拟信号进行A/D转换,对GPS的串行信号和遥控数字信号进行接收和发送。 主程序首先要完成系统的初始化,对单片机的A/D口、串口、定时器等资源进行设置,系统自检,初始化成功以后,主程序会通过数码管显示,提示初始化是否完成。其机载系统单片机主程序流程图如图2所示。 2.3俯仰倾斜及方位检测A/D转换框图 STC12C5410AD单片机自带八路10位高速A/D转换器,其A/D转换口在P1口( P1. 7-P1. 0 )。 STC12C5410AD单片机的P1口可通过软件将其编程为准双向输出、推挽输出、高阻输入、开漏等四种模式。其中在作A/D转换时应使用高阻输入和开漏模式,转换速度可达100kHz。 A/D转换结果计算公式如下: 结果(ADC_DATA[7∶0],ADC_LOW2[1∶0])=1 024*Vin/Vcc 上式中:Vin为模拟通道输入电压;Vcc为单片机实际工作电压,即用单片机工作电压作为模拟参考电压。取ADC_DATA的8位作为ADC转换的高8位,取ADC_LOW2的低2位作为ADC转换的低2位,则A/D转换结果为10位精度。 本系统中选择P1.3作为俯仰角A/D转换通道,选择P1.7作为倾斜角A/D转换通道,选择P1.2作为X方向角A/D转换通道,选择P1.4作为Y方向角A/D转换通道,其A/D转换程序流程图如图3所示。 2.4直升机A/D转换C程序关键代码 宏晶科技在其“STC12C5410AD系列单片机器件手册”[8]中说明了Timer0、1可通过AUXR寄存器设置成工作在12T或1T模式。但该手册上关于单片机系统管理特殊功能寄存器AUXR中T1、T0的位置说明是错误的: 该说明误导了很多编程人员,位T1x12为0则定时器1是12T模式,传统8051的速度,所用到的C语言程序语句为AUXR=AUXR&0xbf,这个错误的语句显然得不到正确的结果。正确的AUXR寄存器的第7位即最高位 MSB应该是T1x12,而第6位应该是T0x12,从而正确的C语言程序语句为AUXR=AUXR&0x7f。 本系统中直升机俯仰角、倾斜角以及方向角的模拟信号检测中就要用到A/D转换C程序,下面以俯仰角检测的A/D转换为例给出其中C程序关键代码。 //*******俯仰角A/D转换******* ****/ void fyzh() { ADC_CONTR=0xe3;//选择P1.3为转换通道 delay(10);//延时 ADC_DATA=0;//清A/D转换结果寄存器 ADC_LOW2=0; ADC_CONTR=ADC_CONTR|0x08; //启动A/D转换 do { ; } while((ADC_CONTR & 0x10)==0); //等待转换 ADC_CONTR=0xe3; //转换结束,清位,停止 p=ADC_DATA*4 + ADC_LOW2; //存放10位AD转换结果 } //*******主函数********** **/ void main() {unsigned char i; ADC_CONTR = ADC_CONTR|0x80; //1000,0000 打开A/D转换电源 delay(100); //开A/D转换电源后要加延时 P1M0=0x88; //设置A/D通道所在的P1.3,P1.7为开漏模式 P1M1=0x88; AUXR=AUXR&0x7f; PCON=0x80;//PCON=0x80设置波特率加倍 SCON=0x50;//设置串行方式1 TMOD=0x20;//设置定时器方式2 TH1=0xfa;//外部时钟频率fosc= 11.0592 MHz,选择波特率为9 600 b/s TL1=0xfa; TR1=1;//启动定时器 while(1) { //其它程序 fyzh(); //调用俯仰角A/D转换子程序 delay(300); //延时 } } 3增稳试验系统数据显示 小型无人直升机地面系统的试验数据显示使用Delphi开发的程序来进行,其显示界面如图4所示。当程序开始接收数据时,数值显示框将分别显示俯仰和倾斜两组数据,分别为偏移角、操舵量和校正量。偏移角为没有处理过十进制显示的原始数据;操舵量为舵机控制信号脉冲宽度,单位是μS;校正量为添加在舵机控制信号上的脉冲宽度,单位也是μS。在倾斜、俯仰显示图下方的是数据显示区,显示的是经过计算转换的俯仰、倾斜的偏移角度。 4结论 该增稳试验系统已经通过地面联机测试,能够快速准确地采集俯仰角、倾斜角、方向角等模拟信号,以及遥控接收机的控制信号和传输试验所需数据,图形和数据显示均正常,待完成与小型直升机的整合以后,即可开始飞行试验,为获得真实准确的姿态参数,分析研究控制方法,确定控制算法奠定了基础。 摘自:中国计量测控网
|