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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 超小型遙控直升機飛行姿態(tài)穩(wěn)定器的設(shè)計

          超小型遙控直升機飛行姿態(tài)穩(wěn)定器的設(shè)計

          作者: 時間:2008-08-20 來源:網(wǎng)絡(luò) 收藏
          引言

            本項目的是無線接收控制電路。本采用飛思卡爾公司生產(chǎn)的MMA7260QT低量程三軸向加速度傳感器和低功耗的MC9S08QG8 微控制器,并配合極少量的外圍器件。該電路能接收無線發(fā)射機的控制指令,使以不同的速度前進、后退、轉(zhuǎn)彎,在沒有收到動作指令時能使自動保持穩(wěn)定。由于該電路的體積?。?212mm),重量輕,因此可以用于直升機。

            概述

            該系統(tǒng)能通過紅外遙控指揮直升機以不同的速度前進、后退、轉(zhuǎn)向。該系統(tǒng)主要有兩大部分:第一部分輸入轉(zhuǎn)換、指令編碼、紅外發(fā)射部分;第二部分紅外接收、解碼、狀態(tài)檢測、伺服電機控制部分。這兩部分的紅外接收部分不是本次設(shè)計的重點,不做詳述。

            直升機是由三個小型電機控制的:一個主旋翼電機,控制飛機的上升或下降;一個尾翼電機,控制飛機的方向;一個前進/后退電機,控制飛機前進或后退。本系統(tǒng)利用螺旋槳產(chǎn)生的推力使直升機的重心發(fā)生改變,使直升機向前或向后傾斜,來實現(xiàn)直升機的前進或后退。對直升機的準(zhǔn)確控制,就是通過對這三個電機速度的準(zhǔn)確控制來實現(xiàn)的。

            利用MMA7260QT三軸向加速度傳感器將直升機的狀態(tài)信息轉(zhuǎn)換為相應(yīng)的電壓信號,再利用MC9S08QG8微控制器的10位ADC轉(zhuǎn)換器將信號轉(zhuǎn)換為數(shù)字信號。MC9S08QG8的程序?qū)⑦@些信號綜合,自動控制直升機上的三個電機,使直升機狀態(tài)穩(wěn)定。

            系統(tǒng)設(shè)計

            設(shè)計思想和技術(shù)關(guān)鍵

            遙控直升機的受飛行環(huán)境和設(shè)備狀態(tài)的影響很大。隨著飛行環(huán)境和設(shè)備狀態(tài)的變化,想要保證穩(wěn)定的飛行是很難的。有了能自動調(diào)節(jié)飛行之后,操縱遙控直升機就變得非常簡單。該系統(tǒng)是采用飛思卡爾公司的MMA7260QT作為飛行狀態(tài)傳感器來實現(xiàn)的,具體實現(xiàn)方法如下:

            Z軸是直升機的升降軸,在直升機靜止時讀取MMA7260QT的Z軸數(shù)據(jù),作為參考點。飛機上升或下降時讀取的數(shù)值相對于參考點的變化量,就是Z軸的加速度az,那么飛機上升或下降的速度Vz就是az對時間的積分。上升為正、下降為負。程序按照適當(dāng)?shù)谋壤龘Q算后控制主旋翼電機的轉(zhuǎn)速,使直升機保持為懸停狀態(tài)。當(dāng)然,這只是對Z軸理想化后的理論計算。

            由于當(dāng)直升機發(fā)生傾斜時,Z軸的數(shù)據(jù)參考點會發(fā)生變化。這樣,還以原數(shù)據(jù)作為參考點得到的gz就不是正確的。為什么直升機傾斜會使靜止參考點發(fā)生變化呢?那是由MMA7260QT傳感器的特性決定的:當(dāng)Z軸垂直于地面,也就是與重力方向平行時,在Z軸上已經(jīng)加有一個重力加速度。當(dāng)直升機發(fā)生傾斜時,Z軸上的加速度就只是重力的一部分,這樣實際的零加速度參考點已經(jīng)發(fā)生了變化。所以,在求Z軸的加速度時,必須解決這個問題。

            在直升機飛行過程中,由于直升機的重心很低,所以認為在X-Z面上是不會有傾斜的。Y-Z面的傾斜是操縱直升機前進或后退造成的,當(dāng)Y-Z面發(fā)生傾斜時,Y軸的靜態(tài)參考點也一定發(fā)生了變化。當(dāng)然,在Z軸和Y軸有合成加速度時,也會出現(xiàn)這種結(jié)果。無論是哪一種原因造成的,我們都要先去調(diào)整Y軸,使Y軸的數(shù)據(jù)值在靜態(tài)參考點上。在傾斜度為零、加速度也為零的狀態(tài)時,Z軸靜止沒有變化,這時的條件和理想化的條件是一樣的。所以,這時得到的gz是正確的。我們就在這時讀取gz的值,作為控制Z軸狀態(tài)的依據(jù)。

            在實際飛行狀態(tài)中,傾斜產(chǎn)生的重力加速度與Y軸加速度的代數(shù)和為零是一個特殊狀態(tài)。這時直升機傾斜在Y軸產(chǎn)生的分力所產(chǎn)生的加速度正好與Y軸的實際加速度數(shù)值相等,而方向相反,安裝調(diào)整時要注意回避這一特殊狀態(tài)。

            Y軸是直升機的前進/后退軸。因為直升機是在室內(nèi)飛行,認為環(huán)境沒有風(fēng)的影響。所以只要直升機有加速度存在,直升機就有傾斜。直升機前進或后退的力Fy是直升機的升力F0的方向與重力的反方向的夾角β的正弦函數(shù)。有Fy=F0sinβ,而Y軸的加速度ay正比于Fy。由于直升機的速度很低,忽略空氣阻力的作用,則:ay=Fy/M,式中M是直升機的質(zhì)量。

            同時,傾斜角會產(chǎn)生一個重力加速度gY,夾角也是β。它與重力加速度g0有:

            gY=-g0sinβ。ay和gY的方向是相反的。測到的加速度a是ay和gY的代數(shù)和。這個代數(shù)和的方向及大小可以實測得到。

            為了減少實測數(shù)據(jù)的工作量,只測出a的方向和大概數(shù)值即可。控制時使a逐步向零靠近,最終基本等于零。

            由于在直升機轉(zhuǎn)向時,X軸有加速度,同時Y軸也會有加速度。為了簡化計算,Y軸的加速度也要在X軸的加速度為零時檢測。

            當(dāng)Y軸有操縱指令時,Y軸的自動控制暫時被停止。

            X軸是直升機的左右轉(zhuǎn)向軸,在Z-X面上,直升機不會有傾斜,所以Z軸的加速度不會影響X軸的加速度。在直升機靜止時,若直升機發(fā)生方向改變,程序就控制尾翼電機,使方向改變停止,使X軸方向速度為零。當(dāng)Y軸或X軸有操縱指令時,X軸的自動控制暫時被停止。

            另外,直升機在飛行過程中,電機和螺旋槳轉(zhuǎn)動引起的振動也使傳感器產(chǎn)生失真數(shù)據(jù)。所以,需要排除自動干擾后的數(shù)據(jù)才能使用。那么,怎樣排除這些振動的干擾呢?該方案采用了兩種措施:一是將信號限制范圍,超過范圍的信號被排除。二是用累加平均法:用遠高于振動頻率的采樣率讀取數(shù)據(jù),再以遠大于振動周期的時間段將數(shù)據(jù)平均。這樣得到的數(shù)據(jù),可以排除大部分的振動干擾。

            系統(tǒng)的功能和工作過程

            直升機接通電源后,處于接收遙控信號狀態(tài)。

            發(fā)射機必需先按下啟動按鈕,直升機方可啟動。在啟動之前,所有其它操作都是無效的。

            收到并確認遙控信號的啟動信號時,同時啟動三個電機。電機的啟動速度很慢,保證直升機不會動。當(dāng)電機的速度增加到使直升機有微小上升時,控制電路記憶保持直升機不動時電機的最大速度。這時啟動過程結(jié)束,直升機的移動可隨意遙控。

            遙控器左手的縱向控制直升機的升降,右手的縱向控制進退,右手的橫向控制方向。長時間無正確的遙控信號時,程序會自動使直升機停下來。

            電池電壓不足時,LED會亮1秒,暗1秒來指示。在電池低到一定程度時,會自動進入停止操作,并同時輸出電池電壓不足LED指示。

            系統(tǒng)框圖

            系統(tǒng)框圖如圖1所示。

            

            硬件描述

            編碼、紅外發(fā)射和紅外接收電路不是本次討論的重點,不做描述。重點描述飛行傳感器電路、ADC電路、解碼電路、XYZ軸輸出電路。圖2所示為其原理圖。

            

            飛行姿態(tài)傳感器電路

            該部分電路由MMA7260QT、R1、R2、R3、C1、C2、C3、C5組成。

            MMA7260QT是一個三軸小量程加速度傳感器模塊。它的靈敏度可通過g-Select1和g-Select2來選擇。最高靈敏度可達800mV/g。工作電壓低、可工作電壓范圍寬(2.2~3.6V),功耗?。?.5mA,在睡眠狀態(tài)只有3μA)。非常適合電池供電的應(yīng)用。另外,小尺寸封裝,使其重量也很輕。g-Select1和g-Select2分別接到PTA2和PTA3上??梢愿鶕?jù)需要選擇靈敏度。

            XYZ軸的輸出經(jīng)過電阻R1、R2、R3和電容C1、C2、C3濾波后分別接到了MCU的ADC輸入。 因為在這項應(yīng)用中MMA7260QT 保持在工作狀態(tài),所以Sleep Mode腳接到了VDD。C5是為了減小電源波動對傳感器的影響加的去耦電容。

            XYZ軸輸出電路

            XYZ軸輸出電路由電機Mz、Mx、My、MOSFET管T1、T2、T3、二極管D1、D2、D3和電阻R6、R7、8組成。XYZ軸電機控制信號分別通過普通的B口輸出腳PTB5、PTB4、PTB6輸出。這里PTB5、PTB4、TB6已經(jīng)通過軟件將其做成PWM輸出口。它們輸出的是電壓PWM信號,通過PWM信號控制電機的轉(zhuǎn)速。

            這個PWM信號通過電阻R6(R7、R8)送到MOSFET管的控制極,控制MOSFET管的通/斷,帶動電機工作。因為MOSFET是電壓控制器件,是不需要限流電阻的。這里的R6、R7、R8是為減小電機的脈沖干擾信號通過T1、T2、T3耦合對MCU的影響而設(shè)。

            D1、D2、D3是在T1、T2、T3關(guān)斷時為電機提供電流通路。

            Mz是主旋翼電機,帶動直升機的主旋翼,控制著直升機的升/降。

            Mx是尾翼電機,帶動直升機的尾翼螺旋槳,控制著直升機的方向。

            My是進/退電機,控制著直升機的前進/后退。

            系統(tǒng)軟件

            軟件流程

            軟件流程如圖3所示。

            

            軟件描述

            飛行姿態(tài)信號和電池電壓AD轉(zhuǎn)換程序

            實現(xiàn)飛行姿態(tài)信號測量的方法是:首先用準(zhǔn)確的時間間隔來測飛行姿態(tài)信號;將測得的數(shù)據(jù)進行比較,大于最大限制值時放棄;對于在規(guī)定范圍內(nèi)的數(shù)據(jù)求代數(shù)和,同時記錄求和的次數(shù);經(jīng)過一段規(guī)定的時間后,將求得的代數(shù)和除以求和的次數(shù),就得到了在這段規(guī)定時間的平均值。用計時器設(shè)一個定期的時間中斷就可實現(xiàn)測量時間的準(zhǔn)確間隔。

            實現(xiàn)飛行姿態(tài)信號測量的程序簡略如下:

            在初始化程序中:設(shè)置ADC在CH4上,ADC關(guān)中斷連續(xù)轉(zhuǎn)換。在CH4上是X軸數(shù)據(jù)設(shè)置,MTIM計時模塊T_n時間中斷一次。

            

            

            電池電壓監(jiān)控程序

            當(dāng)檢測到電壓低到某一值時,程序會通過LED顯示,向操縱人員報警。如沒有及時控制直升機停止飛行,電壓會繼續(xù)降低。當(dāng)電壓低到不能允許再低的時候,程序?qū)娭浦鄙龣C停止飛行。這個"強制停止"不是立刻將電機停止,那樣會使直升機墜落,而是平衡地減小PWM輸出,使直升機緩慢的降落

          紅外遙控器相關(guān)文章:紅外遙控器原理
          加速度計相關(guān)文章:加速度計原理


          評論


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