新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM11+CPLD的小型無人機飛行控制器設計

        基于ARM11+CPLD的小型無人機飛行控制器設計

        作者: 時間:2012-12-12 來源:網絡 收藏

        (2) 數據內部傳送模塊,負責對SPI接收進的數據進行解析,主要是將數據與命令分開。這里所謂的命令,指的是PWM控制通道的選擇。本設計中只需有4路PWM輸出,所以只需在模塊中任選4路。通過這種方案,可以實現任意多路PWM輸出,可解決MCU PWM輸出端口不足,實現端口擴展。
        (3) 數據保存模塊,數據保存模塊功能可以描述成一個數據寄存器,即實現傳送數據的保持與刷新,存放的數據即為PWM波形的高電平數值。也可稱其為數據的緩沖器,在SPI數據傳輸到PWM發生器過程中加入該模塊,可使得數據更加的穩定可靠。
        (4) PWM波形發生模塊,通過對端口數據的讀寫,實現PWM波形的發生。PWM的數據是多變的,即占空比的大小是多變的。在設計時程序中加入了狀態判斷,實現波形的穩定輸出,避免了由于數據多變造成的PWM波失真。PWM發生模塊的基準時鐘頻率由CLK端口進入,周期為0.4us。
        (5) PWM周期設定模塊,提供了PWM波的周期數據輸出,通過改變程序參數可以任意改變波形頻率。
        (6) 分頻模塊,實現對系統時鐘25M進行分頻,提供一個周期為0.4us的PWM基準時鐘。
        本文在特定模式下可接收地面遙控器的指令實現姿態控制,指令分為升降、副翼、方向、油門、是否定高、是否盤旋、是否開傘、平衡量、任務載荷9個通道發送到無人機上的遙控接收機,遙控接收機轉換為PWM信號后,由采集。采集接收機PWM信號的實現如圖4所示,實現過程如下:

        基于ARM11+CPLD的小型無人機飛行控制器設計

        本文設計了9路PWM脈寬數據采集,該模塊輸入0.4us的基頻,將外部PWM波形信息轉換為數值信息,再由SPI傳輸模塊,傳入MCU。SPI數據傳送模塊,實現上模擬從SPI設備。該設計有效解決端口不足,釋放了MCU資源,也提高系統實時性。

        3 軟件系統設計
        在上述硬件平臺上,移植Linux操作系統(Linux 2.6內核),并對Linux內核作裁剪,對內核加上Xenomai補丁[8],Xenomei技術使得操作系統運行在雙內核下,多了一個強實時的微內核,能滿足飛控的實時性要求。在此基礎上進行軟件設計。飛行控制器軟件主要由硬件接口驅動、導航控制程序、姿態控制程序組成。
        3.1 接口驅動程序設計
        (1) UART接口驅動:GPS與MCU的連接通過UART串口,所以GPS驅動需要串口驅動的支持。本文的GPS接口驅動,沒有采用linux內核里自帶的串口驅動程序,而是通過內存映射以及內核函數直接對MCU內部UART寄存器進行讀寫操作,從而實現了高效的GPS數據讀取操作。由于對GPS數據信息實時性要求不高,驅動采用了查詢模式[9]。接收的數據量大小為一組完整GPS NMEA協議定義的數據的大小,本設計使用了NMEA協議中的GGA,RMC語句,最后通過底層的內核數據傳遞函數將GPS數據從內核層傳輸到應用層。
        (2) 姿態傳感器驅動程序:ADIS16365通過SPI接口與MCU進行數據通信,所以在ADIS16365驅動模塊中要實現SPI的讀寫驅動。方法是通過內核函數對SPI寄存器讀寫賦值操作,從而實現數據的收發。除了SPI數據收發驅動外還得構造出ADIS16365規定的數據通信時序,只有正常的時序才能實現數據的正確利用。ADIS16365一次完整的數據讀取流程需要32個CLK脈沖,1秒內平均采集數據408次,滿足精度要求。
        (3) 驅動設計:本文飛控MCU與CPLD的通信采用的是SPI通信方式,驅動程序的實現也是通過內核函數對SPI寄存器讀寫賦值操作,從而實現數據的讀寫。CPLD為自定義的硬件模塊,其通信的數據格式也是自己定義的,CPLD內部通訊數據位為32位,定義前二位為路數控制地址信號。
        3.3 導航控制程序設計
        導航控制是指控制無人機按照存儲在飛行控制器中的航點數據自主飛行,航點依次兩兩連接成直線段即構成航線。每個航點包括航點序號、經度、緯度、高度值信息。而航點、航線的輸入是通過地面控制站軟件中繪制并通過數傳電臺上傳到飛控中,如圖5所示,在為本文飛控配套開發的地面控制軟件中繪制航線。

        基于ARM11+CPLD的小型無人機飛行控制器設計

        導航控制中的高度控制主要通過計算無人機的高度誤差,進而計算輸出給升降舵機的PWM值來控制高度。高度可由MS5540氣壓傳感器測得的高度與GPS模塊的高度數據融合計算后獲得。
        導航控制中的航向控制流程如圖6所示。該流程先讀入FLASH中的航點數據,再由GPS獲取當前位置信息,進而計算航向角、偏航距、偏航角。航向角的計算是在GPS讀出的航向字段基礎上,加上前后兩時刻的位置差進行修正獲得。

        基于ARM11+CPLD的小型無人機飛行控制器設計

        偏航距和偏航角的計算如圖7所示。

        基于ARM11+CPLD的小型無人機飛行控制器設計

        設A點為無人機當前位置,B為第n個航點,C為第n+1個航點。圖7中,以B為坐標原點,X軸表示經度,Y軸表示緯度構建直角坐標系。在地球表面,任意兩點
        基于ARM11+CPLD的小型無人機飛行控制器設計
        離即線段AB的值,無人機與終點距離即線段AC的值,航線起點與終點距離即線段BC的值,再根據點到直線距離公式,可求得線段AD即偏航距,根據三角形余弦定理可求出∠ABD, ∠ABD即為偏航角。
        無人機飛行過程中,判斷是否過航點是讀取下一個航點的必要條件。當無人機飛過航線的垂直線EF既為過航點。判斷方法是,過C點繪出Y軸平行的線段CG,求線段BC與CG的夾角基于ARM11+CPLD的小型無人機飛行控制器設計減線段AC與CG夾角基于ARM11+CPLD的小型無人機飛行控制器設計的差值,計算該差值的絕對值,若|a1-a2|>90則判定為過點。
        3.4 姿態控制程序設計
        姿態控制主要由俯仰姿態、滾轉姿態控制構成,以俯仰姿態控制為例,其控制結構如圖8所示:

        基于ARM11+CPLD的小型無人機飛行控制器設計

        本文設計了PID控制器實現姿態控制,而俯仰角基于ARM11+CPLD的小型無人機飛行控制器設計由姿態傳感器ADIS16365測量并經姿態計算而得。ADIS16365測量的是機體坐標系下的數值,而要表達機體相對于參考坐標系的姿態,需進行姿態計算。姿態計算以角速度測量值和運載體的初始條件為輸入,姿態計算后,輸出飛機的姿態信息和比力坐標變換所需的姿態矩陣。在姿態計算過程中,因四元數法在實際求解中需更新的參數少、精度較高的特點,本文采用四元數法求解。

        pid控制器相關文章:pid控制器原理




        關鍵詞: ARM11 CPLD 飛行控制器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿克苏市| 辽中县| 禹城市| 任丘市| 芦溪县| 徐州市| 阿合奇县| 安义县| 丽江市| 望江县| 宁海县| 玉环县| 阆中市| 巴东县| 禹城市| 新建县| 扎兰屯市| 赤城县| 安塞县| 长沙县| 临西县| 朝阳区| 张家界市| 醴陵市| 香港| 丘北县| 金湖县| 龙陵县| 凉城县| 黄陵县| 盘锦市| 拜城县| 洞头县| 赤壁市| 昌宁县| 贵德县| 和静县| 井陉县| 赤峰市| 探索| 赞皇县|