孙克勇, 符秀辉
(沈阳化工大学 信息工程学院, 辽宁 沈阳 110142)
四旋翼无人飞行机器人由于其结构简单、成本低廉、性能卓越、可应用领域广泛[1],因此,近年来迅速成为国内外各科研院所新的研究热点.众所周知,四旋翼无人飞行机器人是一个欠驱动的控制系统(少输入多输出的控制系统),它具有四个倾斜角固定的旋翼,通过控制四个旋翼上的升力来控制四旋翼机器人在6个自由度上的运动[2].由于四旋翼无人飞行机器人旋翼攻角固定,且在室内无风条件下,因此,旋翼的升力大小主要由悬翼的转速大小体现出来.
本文设计一种利用光电传感器、STM32单片机以及电子秤测定四旋翼无人飞行机器人旋翼升力系数的试验平台.该平台主要是利用杠杆原理测量旋翼的升力.光电传感器当检测到旋翼的时候就会触发STM32相应的中断,从而计数测量旋翼的转速,最后通过得到的升力和旋翼的转速测得旋翼的升力系数.该试验平台结构简单,测量精确,适用于航模以及各类微小型飞行器旋翼升力系数的测定.
作用在旋翼上的升力在叶素上的体现为[3]:
(1)
其中c为翼型升力系数,ρ为大气密度,w为翼型相对气流速度(m/s),Δs为叶素上翼型的表面积(m2).
由于在实验室条件下,只能测得旋翼的升力(N)和旋翼的转速(r/s),为此将(1)式简化,直接测量旋翼转速和升力,得到旋翼的升力和旋翼转速的关系.假设:
f=kω+b
(2)
其中f为旋翼升力,ω为旋翼转速.
为此,设计了如图1的试验平台.
图1 升力系数测定试验平台
首先,在旋翼静止的时候,保持装置处于水平状态,读取电子秤上重物的重量G1(kg),然后给无刷电机上电,在不同电压条件下分别测量重物的重量Gn(kg)和旋翼的转速ωn(r/s).所以得到升力:
fn=(G1-Gn)g
(3)
光电传感器选用厦门盈创电子公司生产的E18-D80NK.它是集发射与接收于一体的光电传感器,最大检测距离800 mm,为三线NPN输出型.利用光的漫反射原理,光电传感器产生脉冲调制信号,常态时,输出为高电平,当检测到旋翼时,则输出低电平信号.因此,将传感器置于旋翼上方约25 mm的位置,每当旋翼扫过光电传感器时,传感器将输出一个脉冲信号.此时,STM32单片机根据一定时间(ts)内输入的脉冲个数,即可测得旋翼的转速ω:
(4)
式中:ω为旋翼的转速;p为旋翼叶片的个数;m为STM32单片机的脉冲计数器数值.
如图2所示为系统的硬件设计.
图2 系统硬件设计
如图2所示:硬件包括光电传感器模块、STM32单片机控制系统、UTC1212SE无线模块.光电传感器的信号线接STM32单片机的PA1.0口,当光电传感器检测到旋翼的时候,光电传感器的输出电平就会从高电平向低电平发生跳变,此时通过软件设置PA1.0为下降沿触发外部中断,这样,当STM32的PA1.0口每检测到一次跳变就触发一次中断,从而计数输入的脉冲数.再经过STM32的处理转化成转速,通过无线模块UTC1212SE将数据发送给上位机.
测速程序流程如图3、图4、图5所示,其中图3为旋翼测速主程序流程,图4为外部中断子程序流程,图5为定时器中断子程序流程.当给STM32单片机上电时,程序首先执行系统初始化,包括系统时钟初始化、延时初始化、串口初始化、外部中断初始化、定时器T3初始化,设定定时器T3的时长为10 ms,当定时器T3溢出时,CPU响应中断,计数器timer加1[4-5].当timer=100,定时1s时,得到计数器counter的值,令定时器T3中断控制位TIM3->SR=0,关闭定时器T3,根据式(4)即可得到旋翼的转速,将计数器timer和counter清零,然后再重新打开定时器T3,进入下一个测速周期.主程序中,循环扫描发送数据函数,将转速实时地发送到上位机上.
图3 旋翼测速主程序流程
图4 外部中断子程序流程
图5 定时器中断子程序流程
外部中断服务程序如下所示:
void EXTIX_Init(void)
{
RCC->APB2ENR|=1≪2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->ODR|=1≪0; //PA0上拉
Ex_NVIC_Config(GPIO_A,0,FTIR); //下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
}
void EXTI0_IRQHandler(void)
{
counter++;
EXTI->PR=1≪0; //清除LINE0上的中断标志位
}
定时器T3中断服务函数:
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
timer++;
if(timer==100)
{
timer=0;
v=counter/2;
counter=0;
}
}
TIM3->SR&=~(1≪0);
}
//定时器3初始化
//参数:arr:计数器自动重装载值;psc:预分频值
//arr=10000;psc=71:72分频,1000 kHz的计数时钟,计数到10 000为10 ms
void Timer3_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1≪1;//tim3时钟使能
TIM3->ARR=arr;
TIM3->PSC=psc;
TIM3->DIER|=1≪0;//允许更新中断
TIM3->DIER|=1≪6;//允许触发中断
TIM3->CR1|=0X01;//使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
试验采用自制的试验平台,如图6、图7所示.
图6 试验平台
图7 串口上位机
试验结果如表1所示,Gn(kg)为旋翼在不同转速下电子秤上的读数,ωn为上位机读取旋翼的转速(r/s),hn为示波器测得光电传感器输出信号的频率(Hz),tn为驱动电机的PWM信号高电平时间(μs).
通过上位机测的转速和示波器测得的光电传感器输出信号频率得到较为准确的转速值,即:
(5)
(6)
表1 试验结果
表2 旋翼升力、转速及脉宽变化值
根据最小二乘法[6]将表(2)拟合即可得到式(2)中旋翼升力和悬翼转速的关系以及旋翼转速和脉宽之间的关系,如图8和图9所示.
图8 旋翼升力和转速拟合曲线
图9 旋翼升力和脉宽拟合曲线
由此可知:
(7)
设计了一种基于光电传感器及STM32单片机的四旋翼飞行机器人旋翼升力系数的测量方法,并通过自制的试验平台验证了方法的可行性.有效地解决了当前微小型飞行器以及航模的
飞行器在低雷诺数下无法准确测量旋翼升力系数的问题.设计的不足点在于测量旋翼升力时是用电子秤测量重物重力差来获取,由于电子秤的精度问题,可能会给实验带来相应的误差.如果改成用拉力传感器直接测量旋翼升力,可能会避免这个问题.
参考文献:
[1] 甄红涛,齐小慧,夏明旗,等.四旋翼无人直升机飞行控制技术综述[J].飞行力学,2012,30(4):295-299.
[2] 单海燕.四旋翼无人直升机飞行控制技术研究[D].南京:南京航空航天大学,2008.
[3] 杨一栋.直升机飞行控制[M].2版.北京:国防工业出版社,2011:18.
[4] 刘军.例说STM32[M].北京:北京航空航天大学出版社,2011:106-110.
[5] 张志涌.精通MATALAB[M].北京:北京航空航天大学出版社,2011:165-172.
[6] 王文成,李健.基于单片机的电机转速测量系统的设计[J].仪表技术与传感器,2011(8):70-72.