孫克勇, 符秀輝
(沈陽化工大學 信息工程學院, 遼寧 沈陽 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.