基于ARM11+CPLD的小型無人機飛行控制器設計
(2) 數(shù)據(jù)內部傳送模塊,負責對SPI接收進的數(shù)據(jù)進行解析,主要是將數(shù)據(jù)與命令分開。這里所謂的命令,指的是PWM控制通道的選擇。本設計中只需有4路PWM輸出,所以只需在模塊中任選4路。通過這種方案,可以實現(xiàn)任意多路PWM輸出,可解決MCU PWM輸出端口不足,實現(xiàn)端口擴展。
(3) 數(shù)據(jù)保存模塊,數(shù)據(jù)保存模塊功能可以描述成一個數(shù)據(jù)寄存器,即實現(xiàn)傳送數(shù)據(jù)的保持與刷新,存放的數(shù)據(jù)即為PWM波形的高電平數(shù)值。也可稱其為數(shù)據(jù)的緩沖器,在SPI數(shù)據(jù)傳輸?shù)絇WM發(fā)生器過程中加入該模塊,可使得數(shù)據(jù)更加的穩(wěn)定可靠。
(4) PWM波形發(fā)生模塊,通過對端口數(shù)據(jù)的讀寫,實現(xiàn)PWM波形的發(fā)生。PWM的數(shù)據(jù)是多變的,即占空比的大小是多變的。在設計時程序中加入了狀態(tài)判斷,實現(xiàn)波形的穩(wěn)定輸出,避免了由于數(shù)據(jù)多變造成的PWM波失真。PWM發(fā)生模塊的基準時鐘頻率由CLK端口進入,周期為0.4us。
(5) PWM周期設定模塊,提供了PWM波的周期數(shù)據(jù)輸出,通過改變程序參數(shù)可以任意改變波形頻率。
(6) 分頻模塊,實現(xiàn)對系統(tǒng)時鐘25M進行分頻,提供一個周期為0.4us的PWM基準時鐘。
本文飛行控制器在特定模式下可接收地面遙控器的指令實現(xiàn)姿態(tài)控制,指令分為升降、副翼、方向、油門、是否定高、是否盤旋、是否開傘、平衡量、任務載荷9個通道發(fā)送到無人機上的遙控接收機,遙控接收機轉換為PWM信號后,由CPLD采集。CPLD采集接收機PWM信號的實現(xiàn)如圖4所示,實現(xiàn)過程如下:
本文設計了9路PWM脈寬數(shù)據(jù)采集,該模塊輸入0.4us的基頻,將外部PWM波形信息轉換為數(shù)值信息,再由SPI傳輸模塊,傳入MCU。SPI數(shù)據(jù)傳送模塊,實現(xiàn)上模擬從SPI設備。該設計有效解決端口不足,釋放了MCU資源,也提高系統(tǒng)實時性。
3 軟件系統(tǒng)設計
在上述飛行控制器硬件平臺上,移植Linux操作系統(tǒng)(Linux 2.6內核),并對Linux內核作裁剪,對內核加上Xenomai補丁[8],Xenomei技術使得操作系統(tǒng)運行在雙內核下,多了一個強實時的微內核,能滿足飛控的實時性要求。在此基礎上進行飛行控制器軟件設計。飛行控制器軟件主要由硬件接口驅動、導航控制程序、姿態(tài)控制程序組成。
3.1 接口驅動程序設計
(1) UART接口驅動:GPS與MCU的連接通過UART串口,所以GPS驅動需要串口驅動的支持。本文的GPS接口驅動,沒有采用linux內核里自帶的串口驅動程序,而是通過內存映射以及內核函數(shù)直接對MCU內部UART寄存器進行讀寫操作,從而實現(xiàn)了高效的GPS數(shù)據(jù)讀取操作。由于對GPS數(shù)據(jù)信息實時性要求不高,驅動采用了查詢模式[9]。接收的數(shù)據(jù)量大小為一組完整GPS NMEA協(xié)議定義的數(shù)據(jù)的大小,本設計使用了NMEA協(xié)議中的GGA,RMC語句,最后通過底層的內核數(shù)據(jù)傳遞函數(shù)將GPS數(shù)據(jù)從內核層傳輸?shù)綉脤印?BR>(2) 姿態(tài)傳感器驅動程序:ADIS16365通過SPI接口與MCU進行數(shù)據(jù)通信,所以在ADIS16365驅動模塊中要實現(xiàn)SPI的讀寫驅動。方法是通過內核函數(shù)對SPI寄存器讀寫賦值操作,從而實現(xiàn)數(shù)據(jù)的收發(fā)。除了SPI數(shù)據(jù)收發(fā)驅動外還得構造出ADIS16365規(guī)定的數(shù)據(jù)通信時序,只有正常的時序才能實現(xiàn)數(shù)據(jù)的正確利用。ADIS16365一次完整的數(shù)據(jù)讀取流程需要32個CLK脈沖,1秒內平均采集數(shù)據(jù)408次,滿足精度要求。
(3) CPLD驅動設計:本文飛控MCU與CPLD的通信采用的是SPI通信方式,驅動程序的實現(xiàn)也是通過內核函數(shù)對SPI寄存器讀寫賦值操作,從而實現(xiàn)數(shù)據(jù)的讀寫。CPLD為自定義的硬件模塊,其通信的數(shù)據(jù)格式也是自己定義的,CPLD內部通訊數(shù)據(jù)位為32位,定義前二位為路數(shù)控制地址信號。
3.3 導航控制程序設計
導航控制是指控制無人機按照存儲在飛行控制器中的航點數(shù)據(jù)自主飛行,航點依次兩兩連接成直線段即構成航線。每個航點包括航點序號、經(jīng)度、緯度、高度值信息。而航點、航線的輸入是通過地面控制站軟件中繪制并通過數(shù)傳電臺上傳到飛控中,如圖5所示,在為本文飛控配套開發(fā)的地面控制軟件中繪制航線。
導航控制中的高度控制主要通過計算無人機的高度誤差,進而計算輸出給升降舵機的PWM值來控制高度。高度可由MS5540氣壓傳感器測得的高度與GPS模塊的高度數(shù)據(jù)融合計算后獲得。
導航控制中的航向控制流程如圖6所示。該流程先讀入FLASH中的航點數(shù)據(jù),再由GPS獲取當前位置信息,進而計算航向角、偏航距、偏航角。航向角的計算是在GPS讀出的航向字段基礎上,加上前后兩時刻的位置差進行修正獲得。
偏航距和偏航角的計算如圖7所示。
設A點為無人機當前位置,B為第n個航點,C為第n+1個航點。圖7中,以B為坐標原點,X軸表示經(jīng)度,Y軸表示緯度構建直角坐標系。在地球表面,任意兩點
離即線段AB的值,無人機與終點距離即線段AC的值,航線起點與終點距離即線段BC的值,再根據(jù)點到直線距離公式,可求得線段AD即偏航距,根據(jù)三角形余弦定理可求出∠ABD, ∠ABD即為偏航角。
無人機飛行過程中,判斷是否過航點是讀取下一個航點的必要條件。當無人機飛過航線的垂直線EF既為過航點。判斷方法是,過C點繪出Y軸平行的線段CG,求線段BC與CG的夾角減線段AC與CG夾角的差值,計算該差值的絕對值,若|a1-a2|>90則判定為過點。
3.4 姿態(tài)控制程序設計
姿態(tài)控制主要由俯仰姿態(tài)、滾轉姿態(tài)控制構成,以俯仰姿態(tài)控制為例,其控制結構如圖8所示:
本文設計了PID控制器實現(xiàn)姿態(tài)控制,而俯仰角由姿態(tài)傳感器ADIS16365測量并經(jīng)姿態(tài)計算而得。ADIS16365測量的是機體坐標系下的數(shù)值,而要表達機體相對于參考坐標系的姿態(tài),需進行姿態(tài)計算。姿態(tài)計算以角速度測量值和運載體的初始條件為輸入,姿態(tài)計算后,輸出飛機的姿態(tài)信息和比力坐標變換所需的姿態(tài)矩陣。在姿態(tài)計算過程中,因四元數(shù)法在實際求解中需更新的參數(shù)少、精度較高的特點,本文采用四元數(shù)法求解。
pid控制器相關文章:pid控制器原理
評論