陳世武 李海俠
(桂林理工大學機械與控制工程學院,廣西 桂林 541004)
四旋翼飛行器的設計與實現
陳世武 李海俠
(桂林理工大學機械與控制工程學院,廣西 桂林 541004)
為了研究四旋翼飛行器的基本工作原理,文章設計了一個基于 PID控制算法的四旋翼飛行控制器。飛行器以STM32F103RCT6的最小系統作為主控單元,實時姿態采用慣性單元MPU6050進行檢測,使用互補濾波融合算法進行姿態修正計算,為了方便調試而設計了一個專用的遙控器,無線通信采用加AP的2.4G無線模塊,專用遙控器和飛控通信時采用分時復用的辦法實現數據回傳功能。軟硬件調試完畢并且整定好PID參數之后測試成功,飛行器實現了垂直升降、小角度控制下的前、后、左、右的遙控飛行。
四旋翼飛行器;STM32;PID控制算法;MPU6050;互補濾波
四旋翼飛行器在一些工業發達的國家中已經作為一個通用平臺去進行實驗和應用,而我國在這方面的研究起步相對比較晚,航模愛好者很多,但是對其飛行控制的研究的人就顯得太少了。四旋翼飛行器的研究范疇非常廣闊并且在技術上也具有很大的難度,隨著不斷的深入研究,四旋翼飛行器的研究領域將繼續擴大。本設計也僅僅是研究四旋翼飛行器基礎的一部分,采用經典的PID控制算法以及通俗易懂的姿態解算方法,設計一個由無線遙控控制的四旋翼飛行器,實現基本的垂直升降、偏航和小角度內的推進飛行功能。通過對四旋翼飛行器的控制技術研究,可以加強自己的控制理論知識,對以后別的運動控制系統研究也具有很重要的意義。
2.1 系統整體方案
飛控的硬件框圖和遙控硬件框圖分別如圖1、2所示,整個飛控的電氣部分硬件比較少但幾乎每一部分都是四旋翼飛行器正常工作的必不可少的部分。飛控和驅動所需要的電源都通過航模鋰電池供電,STM32最小系統上集成了3.3V穩壓電路,4個電調中每個電調都帶有5V穩壓直流電輸出,只需要接一個電調的 5V輸出到最小系統上便可滿足飛控上所有模塊的供電需求。工作時,遙控上的主控通過模數轉換量化四個通道的搖桿電位器的電壓值并傳輸到飛控端合理處理后作為姿態的目標值,飛控處理器讀取MPU6050的數據計算出實時姿態,通過目標姿態值計算得到偏差之后進行PID運算更新 PWM輸出給電調,使電機的轉速得到相應的改變。NRF24L01無線模塊負責遙控端和飛控端的數據傳輸。電池的電壓由處理器通過ADC讀取量化之傳回到遙控端實現實時監測電池電壓。

圖1 飛控硬件框圖

圖2 飛控控制框圖
2.2 電池電壓檢測電路
為了避免四旋翼飛行器上電池電壓過低而導致不能正常工作的問題,在工作時需要對鋰電池的電壓實時監測。由于鋰電池充滿電時電壓高達 12.6伏,使用的單片機自帶 ADC模塊測量范圍在0~3.3伏,所以在ADC采樣之前需要一個電壓分壓電路。
2.3 姿態檢測模塊
對四旋翼飛行器的控制,其實就是根據四旋翼飛行器的姿態角來控制電機的轉速達到系統穩定的目的,因此,系統中必須要有姿態反饋才能做到閉環控制。此處采用集成了三軸加速度計以及三軸陀螺儀的六軸運動傳感器MPU6050,模塊采用3.3V電壓供電,通過IIC總線和處理器通信輸出姿態信息數據。因為IIC總線是開漏輸出,所以需要在總線上加上合適的上拉電阻使信號穩定。
2.4 無線通信模塊
本次設計的遙控器是專用遙控器,在和遙控通信時不需要進行通用性編碼成PPM格式或者是PCM格式,直接使用NRF24L01數傳模塊。使用時硬件電路簡單,不需要對高頻電路部分進行設計,供電電壓為3.3V,若超過3.6V模塊很可能會被損壞。
2.5 人機交互模塊
遙控上的人機交換模塊包括按鍵、撥碼開關和四路搖桿電位器的輸入,輸出顯示用OLED12864顯示屏。
按鍵和撥碼開關與主控IO連接處都并聯上一個100nf的小電容,用來濾除操作時產生的高頻雜波。去掉抖動的辦法有軟件消抖和硬件消抖,在軟件對運行程序實時性要求不是很高的時候采用軟件消抖,本設計中采用硬件消抖,因為系統在運行時不希望處理器有太多的等待時間占用 CPU的資源,硬件成本也沒有體現出優勢,因此采用硬件消抖是個比較好的選擇。
遙控上有兩個搖桿電位器,每個電位器都有兩個方向的滑動變阻器,因此一共有四路電壓需要采集,分別連接到 4個ADC輸入通道。
0.96寸的OLED顯示器具有128*64的分辨率,體積小分辨率高,不顯示數據的地方為黑色,并不耗電。與單片機的連接是串行通信方式,占用較少的IO口,避免了復雜的硬件電路,因此非常適合做遙控的顯示器。軟件設計
2.6 飛控程序主流程圖
圖 3是飛行控制器的軟件主要流程,飛控控制頻率為200Hz。飛控上電之后先對STM32以及外設模塊進行初始化,初始化完畢之后讀取多次陀螺儀的角速度輸出數據進行求平均值,把這個平均值作為本次運行的偏移值,在以后每次讀取陀螺儀數據時把讀出來的數據減去偏移值就可以認為是當前準確的數據。Systick定時器設置為5毫秒中斷一次,打開中斷。在主函數中循環采集電池的電壓并且進行無線通信。
2.7 無線通信
無線通信時,為了實現數據的雙向傳輸,把 NRF24L01的模式在程序運行時不斷改變,運用分時復用的思想來彌補不能全雙工通信的缺陷。通過無線模塊傳回遙控的數據有四旋翼飛行器自身的三個姿態角、在穩定時俯仰角和橫滾角的偏移角度、PID的三個參數以及其他的一些數據,方便調試。

圖3 飛控主程序流程圖
2.8 姿態數據更新
在加速度計的角度計算中,采用了反三角函數的算法,因此在整合成16位數字量之后的加速度計讀出數據不需要轉換成標準加速度而是直接使用標準庫函數做反正切計算,為處理器節省時間。以下是加速度計求取角度的部分代碼:
ACC_XOut = (((Data[0])<<8) + Data[1]);//X軸加速度讀取值
ACC_YOut = (((Data[2])<<8) + Data[3]);//Y軸加速度讀取值
ACC_ZOut = (((Data[4])<<8) + Data[5]);//Z軸加速度讀取值
消費者主權時代,消費者擁有更多選擇權和知情權,消費心態更加成熟、自信和理性,對產品追求更加彰顯個性、自我,強調健康、品質、體驗,不再盲目信任廣告和營銷,喝酒喝品質、喝酒喝健康成為了新的利益點。
ACCAngleX = 57.32 * atan2(ACC_XOut , ACC_ZOut);
ACCAngleY = 57.32 * atan2(ACC_YOut , ACC_ZOut);
計算出加速度計的角度之后,把陀螺儀積分得到的角度和加速度計的角度一起做互補濾波,以下是陀螺儀積分計算及互補濾波的計算:
gyrox = ((Gyro_XOut - GyroXOffset) / 32.8);//計算陀螺儀的角速度
gyroy = -((Gyro_YOut - GyroYOffset) / 32.8);//-號為陀螺儀和加速度計統一坐標方向
gyroz = -((Gyro_ZOut - GyroZOffset) / 32.8);
GyroAngleX = gyrox * dt;//dt為積分周期5毫秒 各軸陀螺的積分角
GyroAngleY = gyroy * dt;
GyroAngleZ += gyroz * dt;
yaw = GyroAngleZ;
/*互補濾波,X軸的加速度對應繞Y軸轉的陀螺儀……*/
pitch = 0.99 * (pitch + GyroAngleX) + 0.01 * ACCAngleY;
roll = 0.99 * (roll + GyroAngleY) + 0.01 * ACCAngleX;
其中pitch、roll分別是互補濾波之后的俯仰角和橫滾角,yaw是偏航角,直接使用陀螺儀在Z軸上的積分角。
2.9 遙控程序主流程
遙控上電初始化完成之后,連續讀取四路搖桿電位器的電壓值,作為控制四旋翼飛行器的輸入期望值原始數據,按鍵掃描是對撥碼開關以及按鍵的輸入進行檢測,配合撥碼開關的不同輸入,按鍵可以對不同的參數進行修改,然后刷新OLED的顯示,最后是進行無線通信,無線通信包含了數據的發射和接收功能,和飛控上的無線模塊相對應。圖 4是無線遙控器的主函數軟件流程圖。

圖4 遙控軟件主流程
2.10 按鍵輸入處理
遙控板上一共有兩個獨立按鍵以及一個八位的撥碼開關,兩個按鍵只能對一個參數進行隨意修改,而有了撥碼開關之后,結合撥碼開關和兩個按鍵就可以修改多個不同的參數了。系統中主要修改的參數有PID三個系數以及pitch和roll的偏移值等。此外撥碼開關的不同狀態也可以決定OLED的參數顯示選擇。
2.11 無線通信
遙控上電初始化時首先執行的是發送模式,此時飛控上的無線模塊執行的是接收模式。只有通信成功之后遙控端和飛控端的無線模塊才會同時改變工作方式。
2.12 顯示刷新
遙控端的OLED顯示內容有四旋翼飛行器的pitch、roll、yaw、水平姿態的偏移值、電池電壓以及一些調試參數等數據信息。在上文提及到的確定參數固定顯示,調試參數根據撥碼開關的狀態來顯示。其中P、I、D三個參數的值是從飛控端接收回來的數據,表示在調試時飛控上的參數修改成功。
串級的PID算法中相當于有兩個控制器在控制飛行器,內環控制角速度,外環控制角度,相對于只有一個PID控制器的單閉環算法來說穩定效果會更好。串級控制框圖如圖 5所示:

圖5 串級ID控制框圖
整定PID參數時,首先整定內環的參數,采用PD控制,讓外環參數為0,內環調整好之后再整定外環參數。整定內環時,飛行器起飛之后會慢慢朝一個方向傾斜,這是正常的,因為沒角度的反饋控制。當傾斜速度比較慢的時候,就可以整定外環參數了,與此同時,內環比例適當減小。外環采用比例控制。最終選擇內環P=15,D=100,外環P=3,I=0,D=0,pitch和roll的控制參數一樣,偏航控制的比例相對大一點。在室內外飛行時可以看到飛行器已經得到了很好的控制效果。
四旋翼飛行器設計是一個比較綜合的項目,在設計與實施過程中遇到了很多問題,花了大量的時間去做實驗、反復驗證,通過這一項目的設計與調試讓自己解決問題的能力得到了一定的提升,理論知識也有了一定程度的增長。
目前飛行器已經實現了在角度不大的前提下進行垂直升降、前、后、左、右的推進飛行以及偏航運動,在室內有較好的穩定性,但是在室外的抗風能力不是很好。因為時間比較倉促,本設計中沒有使用定高、定點等傳感器,沒有了這些硬件傳感器的支持,所以做不到懸停的飛行效果,在控制方向的時候飛行器的飛行高度會不穩定。另外遙控器也是使用自己設計的硬件以及軟件,在使用過程中有可能可靠性不是很好,在人員密集的地方不能輕易使用以避免不必要的傷害。
[1] 呂強,郭善亮,王冬來,等.基于DSP四旋翼飛行器姿態控制系統硬件設計[J].計算機與數字工程,2011,39(7):145-156.
[2] 魏麗文.四旋翼飛行器控制系統設計[D].哈爾濱:哈爾濱工業大學,2010.
[3] 郭曉鴻,楊忠,楊成順,等.一種基于 STM32的四旋翼飛行器控制器[J].應用科技,2011,38(7):35-40.
[4] 劉峰,呂強,王國勝,等.四軸飛行器姿態控制系統設計[J].計算機測量與控制,2011,19(3):583-585.
[5] 楊明志,王敏.四旋翼微型飛行器控制系統設計[J]. 計算機測量與控制,2008(4):1671-4598.
[6] 劉建昌,關守平,周瑋,等.計算機控制系統化[M].北京:北京出版社,2009.
[7] 孟華.自動控制原理[M].北京:機械工業出版社,2013.
[8] 孫洪程,李大字,翁維勤.過程控制工程[M].北京:高等教育出版社,2006.
[9] 劉軍.例說STM32[M].北京:北京航空航天大學出版社, 2011.
[10] 譚浩強.C程序設計教程[M].北京:清華大學出版社,2010.
The design and implementation of four-rotor aircraft
The main purpose of this design is to study the basic principle of the four-rotor aircraft, a four-rotor flight controller which is based on PID control algorithm. Aircrafts with STM32F103RCT6 minimum system are to be the main control unit. Inertial unit testing is applied to real-time attitude MPU6050, and complementary filtering fusion algorithm to posture correction. Besides, a dedicated remote control is designed for debugging. Added AP 2.4 G wireless module is used in wireless communication. Time-sharing multiplexing method of remote-controlled and flight-controlled communication is adopted to realize the data returning. Under the control of aircraft, hardware and software will debug and tune the PID parameters after successful test flight to achieve vertical remote-controlled flight and small-angled remote-controlled flight from front to back and left to right.
four-rotor aircraft; STM32; PID control algorithm; MPU6050; complementary filter
TP3
A
1008-1151(2016)09-0050-04
2016-08-11
陳世武,男,廣西人,桂林理工大學機械與控制工程學院自動化專業學生;李海俠,女,黑龍江人,桂林理工大學機械與控制工程學院教師,副教授,研究方向為系統建模與仿真。