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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 固定翼飛機豎直飛行控制系統(tǒng)方案設(shè)計

          固定翼飛機豎直飛行控制系統(tǒng)方案設(shè)計

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

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

          本文引用地址:http://www.ex-cimer.com/article/161120.htm

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

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

          主程序介紹

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

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

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

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

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

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

            串口接收中斷:輔助MCU程序的關(guān)鍵在串口接收中斷,接收到的數(shù)要存入指定的數(shù)組,這個容易實現(xiàn),而把引導頭找出來就不那么容易了,因為作為引導頭的0xAA、0x55也有可能是數(shù)據(jù),只有連起來的才是引導頭,判斷方法詳見圖6。

            因為本MCU只有兩個定時器,但需要控制三路脈沖,所以有兩路脈沖用定時器的PWM功能實現(xiàn),另外一路需要用軟件模擬,本文選用的方法是用一個20ms的中斷,進入中斷后把I/O口置位,然后在主程序里循環(huán)判斷定時器的值,當定時器的值大于要送的脈沖值時把I/O復位。


          上一頁 1 2 3 下一頁

          評論


          相關(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); })();