<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 三自由度直升機(jī)的嵌入式控制系統(tǒng)

          三自由度直升機(jī)的嵌入式控制系統(tǒng)

          作者: 時間:2010-02-09 來源:網(wǎng)絡(luò) 收藏

            編碼器碼盤上的圓周等分條紋數(shù)為600,被測軸旋轉(zhuǎn)一周,編碼器的A、B兩相分別發(fā)出600個脈沖,A、B兩相的脈沖當(dāng)量即對應(yīng)的角度P=360°/600。由于對B脈沖一個周期進(jìn)行了2次計數(shù),則FA1計數(shù)的每一個脈沖對應(yīng)的角度為P/2。編碼器的旋轉(zhuǎn)角度即三的俯仰角angle00=(FA1-30 000)×P/2。
            同理,對三橫側(cè)時編碼器輸出的3個信號進(jìn)行測量,算出橫側(cè)的角度。
            (3)PWM輸出
            通過PID控制算出的電壓,經(jīng)由EasyARM1138開發(fā)板Timer2產(chǎn)生PWM方波信號,以此來輸出控制2個直流無刷電機(jī)的電壓輸入。
            設(shè)置Timer2模塊中TimerA和TimerB的初值為6 000,其輸出的電壓范圍為0 V~3.3 V。PID控制算出的電壓V00與TimerA和TimerB裝載的匹配值對應(yīng)成線性變化,比例系數(shù)為K=0.3。匹配值 MP1=V00×K×6 000(0≤V00×K≤1)。匹配值隨著PID控制算出的電壓變化而變化,然后根據(jù)PWM占空比輸出對應(yīng)的電壓控制三的2個電機(jī)。
          2.2.2 控制律生成方法
            控制律生成方法分為系統(tǒng)建模和PID控制兩部分。系統(tǒng)建模的過程具體可以參見固高公司的產(chǎn)品手冊[4]。
            2個電機(jī)的輸出電壓采用增量式數(shù)字PID控制算法,用C語言編程實現(xiàn):
           


            V01是電機(jī)1當(dāng)前的電壓,V00是電機(jī)1上一次采樣時的電壓,Ee[i]是三次采樣俯仰角的角度誤差值;
            V11是電機(jī)2當(dāng)前的電壓,V10是電機(jī)2上一次采樣時的電壓,Ep[i]是三次采樣橫側(cè)角的角度誤差值。
          3 系統(tǒng)測試及結(jié)果
            為了對系統(tǒng)的運(yùn)行結(jié)果進(jìn)行測試,特采用數(shù)字示波器(Tektronix TDS220)和萬用表對飛行搖桿給出的俯仰角和橫側(cè)角的指令信號,以及三自由度直升機(jī)的旋轉(zhuǎn)編碼器的輸出的實際俯仰角和橫側(cè)角信號進(jìn)行測試和分析。測試工具還需要EasyARM1138調(diào)試開發(fā)軟件IAR Embedded Workbench for ARM 5.11及相應(yīng)的內(nèi)嵌USB接口的下載仿真器。
            搖桿信號與三自由度直升機(jī)信號分別接到控制盒的兩端,這時將程序加載到EasyARM1138開發(fā)板中,對進(jìn)行整體調(diào)試。
          3.1 三自由度直升機(jī)的啟動與穩(wěn)定運(yùn)行
            打開三自由度直升機(jī)電機(jī)的電源,保持搖桿的平衡狀態(tài)及運(yùn)行程序,三自由度直升機(jī)的俯仰軸會平穩(wěn)地向上轉(zhuǎn)動,俯仰角穩(wěn)定地由-30°變化到0°。當(dāng)俯仰角穩(wěn)定下來后,俯仰軸基本上不發(fā)生旋轉(zhuǎn),這時的俯仰角軸旋轉(zhuǎn)編碼器的測量信號理想值應(yīng)該是一條平穩(wěn)的直線,沒有任何脈沖產(chǎn)生。但實際上可能會存在小幅振動,對應(yīng)信號圖形為少數(shù)的脈沖信號。
            圖4中每格的時間長度為1 s。由圖4可知,在10 s的時間長度內(nèi),俯仰角旋轉(zhuǎn)編碼器輸出了少量脈沖信號,每個脈沖對應(yīng)角度變化為0.3°(上下波動)。
            在理解此圖的基礎(chǔ)上,對圖5所示的圖形也就不難理解了。圖5中給出的是俯仰角由-30°變化到0°時旋轉(zhuǎn)編碼器的輸出波形。

            可以看出,俯仰角為-30°和0°時,旋轉(zhuǎn)編碼器的輸出都近似為直線,或只有很少的脈沖。而在從-30°變化到0°的變化過程中,旋轉(zhuǎn)編碼器的輸出表現(xiàn)為密集的脈沖信號,而且剛開始的時候脈沖比較密,后面稍微稀疏。對應(yīng)為俯仰角的變化過程,開始時角度變化速度比較快,后面稍慢。
            對于該過程,采用EasyARM1138串口通信把旋轉(zhuǎn)編碼器的角度數(shù)據(jù)讀入電腦,然后通過Matlab繪制得到如圖6所示的數(shù)據(jù)變化曲線。

          3.2 三自由度直升機(jī)的增穩(wěn)
            當(dāng)三自由度直升機(jī)穩(wěn)定運(yùn)行后,若有外部擾動,例如陣風(fēng)等沖擊信號作用在三自由度直升機(jī)的旋轉(zhuǎn)軸上,則在控制器的作用下,系統(tǒng)應(yīng)該能自動抵御該擾動,擾動消除后,系統(tǒng)恢復(fù)到原來位置。
            圖7給出了三自由度直升機(jī)的俯仰軸受到?jīng)_擊擾動時的俯仰角旋轉(zhuǎn)編碼器輸出信號波形。由圖7可以看出,擾動作用剛發(fā)生瞬時,旋轉(zhuǎn)編碼器開始輸出密集的脈沖,表明此時俯仰軸在做持續(xù)運(yùn)動。而擾動發(fā)生以前和擾動過去一定時間后,旋轉(zhuǎn)編碼器的輸出為少量的脈沖信號,表明俯仰軸基本上處于平衡狀態(tài)。

            在該過程中,采用EasyARM1138串口通信把旋轉(zhuǎn)編碼器的角度數(shù)據(jù)讀入電腦,然后通過Matlab繪制得數(shù)據(jù)變化曲線如圖8。
          3.3 討論
            (1)系統(tǒng)的連調(diào)過程只給出了系統(tǒng)的輔助操縱過程的輸出通道效果。因為所用的Tektronix TDS220數(shù)字示波器在測試雙通道信號時,2個通道信號的波形存在時間偏差,所以無法同時給出理想的輸入信號與輸出信號的對比波形。
            (2)對于系統(tǒng)的另外兩個工作模式,“全自動駕駛”的效果與圖8類似,而“改平”功能的效果與圖6相似,在此不多敘述。

            (3)由于三自由度直升機(jī)的旋轉(zhuǎn)編碼器為增量式的旋轉(zhuǎn)編碼器,只能反映角度的變化量,因此,看到的穩(wěn)態(tài)情況下編碼器輸出脈沖數(shù)都近似為零。而當(dāng)前角度的計算方法是:初始角度+角度變化量。系統(tǒng)對俯仰角和橫側(cè)角的穩(wěn)定,實際上是對相對初始角度變化量的穩(wěn)定。
            本文討論了三自由度直升機(jī)設(shè)計的全部開發(fā)過程。經(jīng)過測試,各項功能滿足設(shè)計要求。因此整體控制系統(tǒng)的設(shè)計思路可行,設(shè)計結(jié)果合理、可靠。其方法可以推廣應(yīng)用于實現(xiàn)小型無人直升機(jī)的飛行控制系統(tǒng),可以為研制真實的數(shù)字式飛行控制系統(tǒng)提供技術(shù)儲備,可以應(yīng)用于其他運(yùn)動測控系統(tǒng)的設(shè)計。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();