機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
固定翼飛機(jī)豎直飛行控制系統(tǒng)的設(shè)計
固定翼飛機(jī)豎直飛行控制系統(tǒng)的設(shè)計
 更新時間:2008-8-3 15:42:14  點擊數(shù):4
【字體: 字體顏色


    引言

固定翼飛機(jī)水平飛行是最常見的飛行狀態(tài),讓其做大仰角飛行則動作不能一直保持,如讓其垂直于地面飛行能保持的時間則更短。本項目要實現(xiàn)的是一個可以讓飛機(jī)垂直于地面飛行并可以穩(wěn)定在固定高度的控制系統(tǒng)。利用在機(jī)身加入的三軸向加速度傳感器來檢測垂直于地面飛行的飛機(jī)的姿態(tài)。當(dāng)檢測到飛機(jī)前后搖擺時,控制水平尾翼使飛機(jī)保持前后方向的穩(wěn)定性;當(dāng)檢測到飛機(jī)左右搖擺時,控制垂直尾翼使飛機(jī)保持左右方向的穩(wěn)定性;當(dāng)檢測到飛機(jī)上下竄動時,控制油門的大小(即螺旋槳的轉(zhuǎn)速)來保持飛機(jī)飛行高度的穩(wěn)定性。當(dāng)這些控制都很精準(zhǔn)到位時,固定翼飛機(jī)也可以像直升機(jī)一樣穩(wěn)穩(wěn)地懸停在空中了。利用本文設(shè)計的控制系統(tǒng)可以讓飛機(jī)在做垂直飛行減速的同時順時針或逆時針轉(zhuǎn)90°(投影面積很小),這樣就可以減小暴露給后面飛機(jī)的投影面積,減小被擊中的幾率。

設(shè)計概述

為了讓飛機(jī)能豎直飛行,控制電路需要有以下功能:

判斷飛機(jī)是否要豎直飛行 對于真飛機(jī),它可能只是一個可防止誤觸發(fā)的撥動開關(guān);在本項目的實驗品遙控飛機(jī)里,它就是某一個通道的脈寬信號。當(dāng)脈寬大于某一設(shè)定值時,控制電路就知道它該上場了。

判斷自身姿態(tài) 這是本控制電路的核心部分之一,在控制飛機(jī)保持豎直飛行之前必須先判斷自身的姿態(tài)。本項目用MMA7260QT傳感器檢測飛機(jī)的姿態(tài)。

控制 這是本項目設(shè)計制作過程中最耗時的部分,但其原理很容易理解:姿態(tài)電路已經(jīng)了解了飛機(jī)的姿態(tài),控制電路只要做相應(yīng)動作就可以了。飛機(jī)前傾它就讓飛機(jī)向前移動一些,后傾就向后移動一些。還有一個需要控制的量——高度,飛機(jī)在做此動作時高度是要保持穩(wěn)定的,機(jī)身上沖時要減小油門,下降時要加大油門。要完成如此控制,要用兩片MC9S08QG8。為了達(dá)到上述功能,本項目應(yīng)有如圖1所示的電路框圖。

選用兩片MC9S08QG8是因為在本項目里有兩處對時間要求比較嚴(yán)格的地方:一是讀從遙控器送出的脈寬;二是把經(jīng)過運算的脈寬精確地發(fā)送出去,兩處都要10μS以內(nèi)的誤差,如用一片來做即使用中斷也會有沖突。本項目里兩片MC9S08QG8工作的大體分配是:一片作為主控,用于讀取遙控器送來的由接收機(jī)收到的脈寬(高實時性)、讀取飛機(jī)姿態(tài)(低實時性)、控制運算(PID運算)和數(shù)據(jù)發(fā)送(把需要對飛機(jī)如何控制的數(shù)據(jù),也就是PID運算的結(jié)果送給另一片MCU);另外一片作為輔助,只要把讀到的數(shù)據(jù)實時發(fā)給飛機(jī)的執(zhí)行機(jī)構(gòu)就可以了。

硬件描述

硬件電路如圖2所示。

·傳感器MMA7260QT輸出的三個軸的數(shù)據(jù)分別送入主控MCU的三個A/D輸入端ADP0、ADP1和ADP2,電源接一個電阻和電感可防止電源對傳感器的干擾。

·整個電路的電源由J1從接收機(jī)引入,通過78FC33變?yōu)?.3V后給MCU和傳感器供電,J2、J3、J4分別是左右、油門和前后控制。

·主控MCU的第二路TPM的捕捉輸入端TPMCH1接接收機(jī)的信號輸出端。本遙控系統(tǒng)是9通道的,也就是可同時控制9個機(jī)構(gòu),這種9通道的信號見圖3。它是由間隔為20ms的一個個脈沖串組成,每個脈沖串有9個脈沖,連續(xù)兩個脈沖的上升沿的間隔就是遙控器送出的有效控制信號,此間隔最小1ms、最大2ms。TPM捕捉到9個脈沖的寬度后,就可以根據(jù)需要直接送給舵機(jī)或經(jīng)PID運算后再送給舵機(jī)了。至于如何識別某一脈沖是上一個脈沖串的結(jié)尾還是下一個脈沖串的開頭,這里涉及到一個同步脈沖的概念,屬于軟件內(nèi)容,在此先不作解釋。

·主控MCU的串行輸出端接輔助MCU的串行輸入端。主控MCU想如何控制飛機(jī)動作,只要通過串口把數(shù)據(jù)發(fā)送給輔助MCU就可以了,發(fā)送格式如表1所示,共8個字符,其中0xAA、0x55為引導(dǎo)位……

·三個LED,D1是電源指示燈,D3用于指示“我是控制電路,我已經(jīng)開始控制飛機(jī)豎直飛行了”,D2是“出錯了,小心出問題,快切換回由你控制吧。”

·輔助MCU有兩個工作:一是讀主控MCU送來的串行數(shù)據(jù),找到引導(dǎo)字符后,把前后左右上下(油門)的數(shù)據(jù)送入相應(yīng)的數(shù)組貯存;二是每20ms把相應(yīng)的數(shù)組里的數(shù)據(jù)以脈沖形式發(fā)送出去。脈沖最小1ms、最大2ms。這個信號送入飛機(jī)的執(zhí)行機(jī)構(gòu)——舵機(jī)后對應(yīng)的輸出規(guī)律見圖4。1ms的脈沖使舵機(jī)搖臂在最左邊的位置,1.5ms的脈沖使舵機(jī)搖臂位于中位,2ms的脈沖使舵機(jī)搖臂在最右邊的位置。舵機(jī)的搖臂連接飛機(jī)的各執(zhí)行機(jī)構(gòu),搖臂搖動時飛機(jī)的執(zhí)行機(jī)構(gòu)(如尾翼等)也跟著擺動。

軟件描述

主控MCU部分,流程圖見圖5。

·讀取遙控信號:這個遙控信號見圖5右上角,是9個脈沖組成的脈沖串,每20ms一串,讀取的方法如下,由TPM捕捉到脈沖的上升沿進(jìn)入模定時器捕捉中斷程序后,先看是不是脈沖串里的第一個,若是就把定時器清零,然后把捕捉值存入數(shù)組,這樣9次后,數(shù)組里就由低到高地存下了每個脈沖發(fā)生的時間,用減法一算,各脈沖寬度就出來了。為防止出錯,附加了脈沖數(shù)錯誤預(yù)防,就是對脈沖個數(shù)進(jìn)行計數(shù),如果在一個脈沖串里讀到了多于9個脈沖就意味著有干擾了,需要盡快把所有脈寬按中間值1.5ms處理。這樣雖然和遙控器發(fā)出的指令不一樣,但減少了出大問題的機(jī)會。

·8ms定時中斷:系統(tǒng)有一個模定時器18ms中斷程序,因為正常的脈沖串9個脈沖不會超過18ms,所以可以讓定時器在第一個脈沖開始時計數(shù),計到18ms就認(rèn)為一個脈沖串結(jié)束,把脈沖數(shù)計數(shù)器清零。模定時器捕捉中斷程序里看到這個計數(shù)器被清零了就知道下一個脈沖串開始了。這個中斷還為PID的定時運算提供時間標(biāo)志,每進(jìn)入一次中斷就把標(biāo)志置位,主程序讀到標(biāo)志被置位就進(jìn)行PID運算,這樣就保證了PID運算的周期是固定的。

·1.67ms中斷程序和A/D中斷程序:為了讀取MMA7260QT輸出的數(shù)據(jù)需要用A/D讀值,這里每1.6667ms進(jìn)入中斷一次設(shè)定A/D通道,讀完三個通道用時5ms,在兩個脈沖串的標(biāo)準(zhǔn)間隔20ms內(nèi)可以各讀4次,用滑動平均值算法后可以濾除干擾。

主程序介紹

雖然傳感器都是水平放置的,但因為溫度電壓等的不同,三個軸的輸出和計算的輸出是不一樣的,會有少許偏差,為了解決這個問題,在上電后先對三個軸的值連續(xù)讀64次后平均,把這個平均值作為飛機(jī)要穩(wěn)定的目標(biāo)值,這樣飛機(jī)就基本穩(wěn)定了。

提到穩(wěn)定,PID功不可沒,主程序里的PID有兩處要提一下。一是因為傳感器的穩(wěn)定性問題和飛機(jī)的抖動,A/D輸出值差2、3個數(shù)是很正常的,所以在主程序里要判斷一下,如果誤差值在3以內(nèi),則不進(jìn)行PID運算,這樣就減少了舵機(jī)無謂的抖動;二是因為飛機(jī)的前后左右重量不一致,所以在飛機(jī)前傾后仰左右擺動時要用不同的P值計算。

主程序每20ms更新一次數(shù)據(jù),數(shù)據(jù)就是前后左右上下的控制脈沖的寬度。這個數(shù)據(jù)是把模定時器捕捉中斷程序里捕捉到的數(shù)直接拿來用還是要拿PID運算的數(shù)據(jù)來用?這由一個脈寬(決定此時飛機(jī)是否要豎直飛行的脈寬)決定,這里用到的是第7個脈沖的脈寬,也就是遙控器的第7通道,這個參數(shù)被命名為Helen,當(dāng)Helen > 1500(1.5ms)時就是操縱者要豎直飛行,要把PID運算的數(shù)據(jù)輸出;當(dāng)Helen < 1500時就是正常飛行,直接把模定時器捕捉中斷程序里捕捉到的數(shù)輸出就可以了。

要得到各個脈沖寬度,只要把從低到高的每個脈沖發(fā)生的時間做減法就可以了,這個減法運算也是在主程序里完成的。減法完成后還要對脈沖寬度進(jìn)行出錯處理,要檢查一下,小于1ms的按1ms算,大于2ms的按2ms算,處理完了就可以調(diào)用發(fā)送中斷發(fā)送給輔助MCU了。調(diào)用方式是把數(shù)組排列好,把發(fā)送數(shù)據(jù)計數(shù)器清零,打開發(fā)送中斷允許位,這時發(fā)送緩沖區(qū)是空的,發(fā)送中斷一允許,它就立刻進(jìn)中斷開始發(fā)送。

串口發(fā)送中斷程序:程序進(jìn)入本中斷后首先把發(fā)送數(shù)據(jù)計數(shù)器指示的數(shù)送到發(fā)送緩沖區(qū)去發(fā)送,如發(fā)送完了就把發(fā)送中斷允許位清零,以防止正在發(fā)送的數(shù)據(jù)發(fā)送完后再次進(jìn)入中斷;如沒發(fā)送完就直接退出,等待下次中斷。

輔助MCU程序流程圖見圖6。

[1] [2]  下一頁
  • 上一篇: 滑動相關(guān)法偽碼捕獲的FPGA實現(xiàn)
  • 下一篇: 基于FPGA的QPSK信號源的設(shè)計與實現(xiàn)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1