三自由度直升机的嵌入式控制系统
扫描二维码
随时随地手机看文章
1 系统工作原理
1.1 系统的整体方案
系统整体方案如图1所示。其中三自由度直升机由2个直流无刷电机带动,模拟横列式直升机,即倾转旋翼机[1]的直升机状态。
三自由度直升机可以绕3个相互垂直的轴旋转,分别对应直升机模型的俯仰角、横侧角和航向角。飞行摇杆选用北通公司的幻影318飞行摇杆,利用摇杆的俯仰和横侧转动,输出与摇杆的俯仰角和横侧角对应的直流电压,用于控制三自由度直升机的俯仰角和横侧角的指令信号;利用摇杆手柄上的按钮,输出脉冲信号,用于控制三自由度直升机在不同工作模式之间切换。
1.2 系统的工作模式
系统具有辅助操纵(有人工操作)、全自动驾驶(无人操作)、(强制)改平3种工作模式[5]。由飞行摇杆上的若干快捷按钮实现对各种工作模式的切换。
1.2.1 辅助操纵
由人工操纵飞行摇杆的俯仰和倾斜,以此作为三自由度直升机俯仰角和横侧角的指令信号,由嵌入式控制器依据闭环反馈的PID控制律实现整体操纵。
这种工作模式用于模拟飞机的有人驾驶状态。此时飞行控制系统辅助飞行员通过摇杆对飞机操纵,可以减轻操纵者的工作负担;同时对飞机进行控制增稳,既确保飞机的稳定,又可抵御阵风等外部干扰,减轻扰动对飞行品质的影响。
1.2.2 全自动驾驶
飞行摇杆对系统的控制被屏蔽,系统以进入该工作模式时刻三自由度直升机的俯仰角和横侧角的当前值为指令信号,由嵌入式控制器依据闭环反馈的PID控制律实现整体操纵。
这种工作模式用于模拟飞机的无人控制全自动飞行状态。当飞行员人工把飞机操纵到理想的飞行姿态后,通过切换按钮进入这种模式,由飞行控制系统对飞行姿态的当前值进行稳定,保证飞机按刚进入该状态时的各种姿态角、速度、高度、航向飞行;同时对飞机进行控制增稳,提高飞行品质。该工作模式突出体现了飞行控制系统的功能,可以大大降低飞行员的工作量,减轻疲劳。
1.2.3 改平
系统强制俯仰角和横侧角的指令值都为0,飞行摇杆对系统的控制被屏蔽,以此强制控制三自由度直升机俯仰角和横侧角为0,实现三自由度直升机的水平稳定运行。
这种工作模式用于模拟飞行控制系统的改平功能。当飞行员遇到突发情况时(如飞行员受伤等),采用这种功能可以很方便地把飞机由任何姿态改变为匀速平飞的稳定状态。当然这种功能也可以用于飞行员平时把飞机拉平的过程,即采用“改平”模式可以方便飞行员的操作。
1.3 系统功能模块
在图1方案的基础上,可以制定出系统实现“辅助操纵”功能时的整体策略,如图2所示。
由图2可知,三自由度直升机平台的嵌入式控制器整体上包含接口与控制两方面的功能。接口功能对应为图2中的ADC采样、旋转编码器解码、PWM输出3个功能模块。控制功能是采用基于反馈系统的PID控制方法计算控制信号,对应为图中的PID控制功能模块。
在图2的基础上进行修改,就可以获得嵌入式控制器的“全自动操纵”和“改平”工作模式的实现方法。区别在于闭环控制系统指令信号的来源不同。这两种模式下,图2中的指令信号不再由摇杆给定,摇杆的功能被屏蔽。“全自动操纵”模式下,指令信号为刚刚进入该工作模式时刻三自由度直升机平台输出的测量值;“改平”模式下,俯仰角和横侧角值的指令信号都为0。
2 硬件与软件设计
2.1 硬件设计
硬件部分的主体是嵌入式控制盒。控制盒由EasyARM1138开发板[6]、信号调理板和机箱外壳3部分组成。
2.1.1 EasyARM1138开发板
EasyARM1138使用32 bit ARM Cortex-M3内核,具有丰富的接口资源。具体配置如下:
(1)采用EasyARM1138的2个ADC端口(ADC0、ADC1)测量飞行摇杆输入的模拟电压信号,采用软件等比例地换算成对应的角度信号,由此实现对飞行摇杆的指令角度信号的测量。
(2)采用EasyARM1138的3个GPIO口(PB0、PF6、PF4)测量三自由度直升机的俯仰角信号的输出脉冲,3个GPIO口(PB2、PF1、PF2)测量三自由度直升机的横侧角信号的输出脉冲。通过软件编程,采用中断的方法实现脉冲计数,由此实现对三自由度直升机飞行姿态的测量。
(3)采用EasyARM1138的Time2模块产生PWM信号,将Timer2模块中的TimerA和TimerB配置为16位的递减计数器,其对应的EasyARM1138上的2个GPIO口(PF7和PC4)的PWM输出作为三自由度直升机的2个直流无刷电机的控制信号,通过调整TimerA和TimerB中的匹配值来等效地调整2个直流无刷电机的输入电压,从而实现对这两个直流无刷电机转速的控制。
[!--empirenews.page--]2.1.2 信号调理板
由于GPIO测量的8个信号(三自由度直升机的角度信号对应的6个脉冲信号和飞行摇杆对应的2个角度信号)在实际测量时不可避免地存在噪声,被噪声污染的信号直接送入EasyARM1138会使测量出现很大的误差,从而对系统产生不利影响。严重时会使三自由度直升机的电机以最大转速运行,此时系统实际上已经发散,无法平衡。
EasyARM1138的GPIO需要测量的8个信号量先经过信号调理电路调理以后,再送入EasyARM1138。经过实际测试发现系统可以稳定运行,而且动态性能理想。
2.1.3 控制盒
嵌入式控制器的外部采用通用的塑料机箱外壳,在其侧面开口用于安放各种接口。控制盒整体采用外接的5 V、2 A电源供电,盒上保留了与外部稳压整流电源的插口。盒上安放了一个电源开关用于对控制盒的供电进行控制,并用一个LED二极管指示灯指示电源的开关状态。
控制盒的端面安放了一个橙色的无锁开关,用来对EasyARM1138进行复位操作。在该端面同时有一个DB9的插孔,用于和来自飞行摇杆(北通瞬风318飞行摇杆改装)的DB9插头相连接。在另一端面安放了一个DB25插孔,用于和来自三自由度直升机的DB25插头相连。
2.2 软件设计
全部软件基于IAR Embedded Workbench for ARM编程平台[7],在μC/OSII操作系统中使用C语言进行开发。生成的全部软件通过外接的USB电缆下载至EasyARM1138。软件整体上分为接口和控制两个功能模块。
2.2.1 接口功能的实现
(1)ADC采样
飞行摇杆上下摇动给出俯仰信号,左右摇动给出横侧信号,2路信号通过滤波电容进行整形,送到EasyARM1138开发板的ADC,ADC同时将2路连续的模拟电压转换成离散的数字量。通过电压的比例换算,计算出飞行摇杆给出的俯仰与横侧的角度。
EasyARM1138开发板的ADC采样模块提供的最大电压为3.3 V,设置摇杆输入的电压量程为0 V~3.3 V,ADC采样率为125 kS/s。ADC模块的转换分辨率为10 bit,其转换范围为0~1 024。当摇杆模拟信号输入到ADC,ADC将其转换成对应的数字量ulVal0,则摇杆输入的电压值ulVal1=(ulVal0/1 024)×3 300。再根据三自由度直升机俯仰角的范围0°~60°将摇杆的电压值转换成对应的角度值,即摇杆输入俯仰的角度angle02 =ulVal1/3 300×60。同理可以将摇杆输入横侧的角度算出来。
(2)旋转编码器解码
三自由度直升机实时姿态信号是通过3个光电旋转编码器检测传送到控制盒中的,为了检测俯仰与横侧的角度,需要对编码器的脉冲计数,算出当前俯仰与横侧的角度。
编码器输出的是相位差为90°的A相和B相两对差分脉冲信号。从A、B 2个输出信号的相位关系(超前或滞后)可判断编码器旋转的方向。当编码器码盘正转时,A道脉冲波形比B道超前π/2,而反转时,A道脉冲波形比B道滞后π/2[8]。旋转编码器输出的波形信号如图3。
对于俯仰时编码器输出的两对差分信号A+与A-和B+与B-,可以只用A+、B+、B-这3个信号测量俯仰角度数。采用EasyARM1138开发板GPIO的边沿触发中断,设B+与B-的脉冲上升沿触发产生中断。当B+脉冲产生中断时,检测A+脉冲输入的高低电平,同时对B+脉冲进行计数。如图4所示,若A+为高电平可判断A超前B,计数变量FA1自动加1(设计数变量初值FA1=30 000);若为低电平可判断A滞后B,计数变量FA1自动减1。为了消除三自由度直升机平衡杆抖动带来的脉冲计数误差,对B-脉冲设置了中断计数,这样相当于对脉冲B进行了二倍频计数。当B-上升沿脉冲产生中断时,检测A+脉冲输入的高低电平,同时对B-脉冲进行计数。若A+为高电平可判断A滞后B,计数变量FA1自动减1;若为低电平可判断A超前B,计数变量FA1自动加1。
编码器码盘上的圆周等分条纹数为600,被测轴旋转一周,编码器的A、B两相分别发出600个脉冲,A、B两相的脉冲当量即对应的角度P=360°/600。由于对B脉冲一个周期进行了2次计数,则FA1计数的每一个脉冲对应的角度为P/2。编码器的旋转角度即三自由度直升机的俯仰角angle00=(FA1-30 000)×P/2。
[!--empirenews.page--]同理,对三自由度直升机横侧时编码器输出的3个信号进行测量,算出横侧的角度。
(3)PWM输出
通过PID控制算出的电压,经由EasyARM1138开发板Timer2产生PWM方波信号,以此来输出控制2个直流无刷电机的电压输入。
设置Timer2模块中TimerA和TimerB的初值为6 000,其输出的电压范围为0 V~3.3 V。PID控制算出的电压V00与TimerA和TimerB装载的匹配值对应成线性变化,比例系数为K=0.3。匹配值 MP1=V00×K×6 000(0≤V00×K≤1)。匹配值随着PID控制算出的电压变化而变化,然后根据PWM占空比输出对应的电压控制三自由度直升机的2个电机。
2.2.2 控制律生成方法
控制律生成方法分为系统建模和PID控制两部分。系统建模的过程具体可以参见固高公司的产品手册[4]。
2个电机的输出电压采用增量式数字PID控制算法,用C语言编程实现:
V01是电机1当前的电压,V00是电机1上一次采样时的电压,Ee[i]是三次采样俯仰角的角度误差值;
V11是电机2当前的电压,V10是电机2上一次采样时的电压,Ep[i]是三次采样横侧角的角度误差值。
3 系统测试及结果
为了对系统的运行结果进行测试,特采用数字示波器(Tektronix TDS220)和万用表对飞行摇杆给出的俯仰角和横侧角的指令信号,以及三自由度直升机的旋转编码器的输出的实际俯仰角和横侧角信号进行测试和分析。测试工具还需要EasyARM1138调试开发软件IAR Embedded Workbench for ARM 5.11及相应的内嵌USB接口的下载仿真器。
摇杆信号与三自由度直升机信号分别接到控制盒的两端,这时将程序加载到EasyARM1138开发板中,对控制系统进行整体调试。
3.1 三自由度直升机的启动与稳定运行
打开三自由度直升机电机的电源,保持摇杆的平衡状态及运行程序,三自由度直升机的俯仰轴会平稳地向上转动,俯仰角稳定地由-30°变化到0°。当俯仰角稳定下来后,俯仰轴基本上不发生旋转,这时的俯仰角轴旋转编码器的测量信号理想值应该是一条平稳的直线,没有任何脉冲产生。但实际上可能会存在小幅振动,对应信号图形为少数的脉冲信号。
图4中每格的时间长度为1 s。由图4可知,在10 s的时间长度内,俯仰角旋转编码器输出了少量脉冲信号,每个脉冲对应角度变化为0.3°(上下波动)。
在理解此图的基础上,对图5所示的图形也就不难理解了。图5中给出的是俯仰角由-30°变化到0°时旋转编码器的输出波形。
可以看出,俯仰角为-30°和0°时,旋转编码器的输出都近似为直线,或只有很少的脉冲。而在从-30°变化到0°的变化过程中,旋转编码器的输出表现为密集的脉冲信号,而且刚开始的时候脉冲比较密,后面稍微稀疏。对应为俯仰角的变化过程,开始时角度变化速度比较快,后面稍慢。
对于该过程,采用EasyARM1138串口通信把旋转编码器的角度数据读入电脑,然后通过Matlab绘制得到如图6所示的数据变化曲线。
3.2 三自由度直升机的增稳
当三自由度直升机稳定运行后,若有外部扰动,例如阵风等冲击信号作用在三自由度直升机的旋转轴上,则在控制器的作用下,系统应该能自动抵御该扰动,扰动消除后,系统恢复到原来位置。
图7给出了三自由度直升机的俯仰轴受到冲击扰动时的俯仰角旋转编码器输出信号波形。由图7可以看出,扰动作用刚发生瞬时,旋转编码器开始输出密集的脉冲,表明此时俯仰轴在做持续运动。而扰动发生以前和扰动过去一定时间后,旋转编码器的输出为少量的脉冲信号,表明俯仰轴基本上处于平衡状态。
在该过程中,采用EasyARM1138串口通信把旋转编码器的角度数据读入电脑,然后通过Matlab绘制得数据变化曲线如图8。
3.3 讨论
(1)系统的连调过程只给出了系统的辅助操纵过程的输出通道效果。因为所用的Tektronix TDS220数字示波器在测试双通道信号时,2个通道信号的波形存在时间偏差,所以无法同时给出理想的输入信号与输出信号的对比波形。
(2)对于系统的另外两个工作模式,“全自动驾驶”的效果与图8类似,而“改平”功能的效果与图6相似,在此不多叙述。
(3)由于三自由度直升机的旋转编码器为增量式的旋转编码器,只能反映角度的变化量,因此,看到的稳态情况下编码器输出脉冲数都近似为零。而当前角度的计算方法是:初始角度+角度变化量。系统对俯仰角和横侧角的稳定,实际上是对相对初始角度变化量的稳定。
本文讨论了三自由度直升机嵌入式控制系统设计的全部开发过程。控制系统经过测试,各项功能满足设计要求。因此整体控制系统的设计思路可行,设计结果合理、可靠。其方法可以推广应用于实现小型无人直升机的飞行控制系统,可以为研制真实的数字式飞行控制系统提供技术储备,可以应用于其他运动测控系统的嵌入式设计。