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

          新聞中心

          EEPW首頁 > 消費電子 > 設計應用 > 基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          作者: 時間:2016-10-15 來源:網(wǎng)絡 收藏

          摘要:筆者以飛思卡爾16位單片機為核心控制器,以二輪玩具車為控制對象,使用ENC-03RC陀螺儀傳感器與加速度傳感器,通過使用算法實現(xiàn)二輪玩具車模傾斜角度的測量。在此基礎上,將二輪玩具車直立運動線性分解,設計出直立速度控制器。實現(xiàn)了二輪車直立運行。

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

          進入21世紀以來,隨著我國城鄉(xiāng)經(jīng)濟的高速發(fā)展,人們生活水平的提高,越來越多的人開始擁有私家車,這在一定程度上造成了日益嚴重的交通壓力。為了解決這一問題,人們開始研究新的交通工具。與三輪車,四輪車等交通工具相比,兩輪車具有的便于在狹窄空間運行,輕便靈活的車身以及易于存放管理的特點,成為近年來的一個研究熱點,具有廣泛的運用前景。鑒于此,本文以玩具車模(以下簡稱車模)為研究對象,以現(xiàn)代電路電子先進的SMT技術為依托,使用先進的控制理論,對兩輪車進行了深入研究。

          是飛思卡爾半導體公司推出的性價比較高的16位單片機。日本村田公司生產(chǎn)的測量角速度的傳感器ENC-03RC價格低廉,配合三軸角度測量傳感器可以實現(xiàn)角度的測量。本文以為核心控制器,以ENC-03RC和為主要傳感器,采用先進PID算法,設計了直立速度控制器,實現(xiàn)了車模的直立運行。

          1 系統(tǒng)總體方案設計

          1.1 車模傾斜角度的測量

          通過對倒立擺的研究可以發(fā)現(xiàn),要實現(xiàn)車模的直立控制,需要克服車模的重力影響。要做到這一點,必須獲得車模傾斜的角度以及角速度。這樣,當車模往后傾斜時,通過得到的角度與角速度控制車模電機往后加速,當車模往前傾斜時,利用角度與角加速度的值使電機往前加速,從而保持車模在平衡點直立。

          單獨使用角度傳感器MMA7361可以測量傾斜角度,再通過微分可以獲得角速度,但是由于其存在一定的噪聲,因此不適合用于直立控制。基于此,本文結合兩種傳感器,使用算法,實現(xiàn)角度與角速度的測量。算法的原理框圖如圖1所示。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          1.2 車模的直立控制

          由圖1.1可知,通過匹配濾波算法實現(xiàn)了車模角度的平滑,由陀螺儀傳感器得到了角加速度的值。車模的直立控制是通過角度負反饋控制,使其實現(xiàn)直立控制。使用比例控制,可以控制車模在平衡點直立。但是要保證車模具有較強的抗干擾性,具有快速的響應速度,即當車模遇到干擾時能夠快速穩(wěn)定到平衡點,還需要用到微分控制,即加入車模的角加速度。這樣,使用角度的比例與微分控制可以實現(xiàn)車模快速地穩(wěn)定在平衡點(車模實際模型待畫)。直立控制的原理圖如圖2所示。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          1.3 車模的速度控制

          為了解決陀螺儀傳感器溫漂以及傳感器安裝問題,可以通過加入速度控制來實現(xiàn)車模的平衡點穩(wěn)定。通過車模的角度控制車模的直立是一個正反饋的過程而不是負反饋,這與其它常見的控制方式不同。其根本原因在于車模的重力方向與恢復到平衡點的力的方向是相反的。當車??焖傧蛞粋€方向傾斜時,為了改變運動方向,即改變車模的傾斜角度,這時應該施加正反饋使電機加大力度,改變車模傾角,而不是減小電機控制量。所以速度反饋是一個正反饋。由于車模的執(zhí)行機構是直流電機,通過控制電機實現(xiàn)對車模直立與速度控制,由電機拖動可知直流電機產(chǎn)生的力矩與電流的關系近似為

          T=CeφIa (1)

          其中Ce為電機常數(shù),φ為電勢常數(shù),Ia為電樞電流。

          從式(1)可以將電機看作一個線性機構。這樣直立控制與速度控制可以看作兩個控制器線性疊加在一起,并且相互之間是可以近似看作無耦合的。這時可以獨立于直立控制,單獨設計速度控制器。速度控制采用改進型PI控制器,圖3表示了速度控制的原理框圖:

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          車模直立運行的關鍵是直立控制與速度控制,基于陀螺儀與加速度計以及測速傳感器可以實現(xiàn)。整個系統(tǒng)的原理框圖如圖4所示。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          2 系統(tǒng)的硬件設計

          系統(tǒng)硬件由主要由MC9S12XS128最小系統(tǒng),電機驅動電路,速度傳感器電路,陀螺儀與加速度計電路與調(diào)試電路等組成。測電機速度時采用單片機測速模塊和計數(shù)器芯片CD4051B。電機驅動芯片采用集成驅動芯片BTS7960。調(diào)試電路使用PL2303芯片,將單片機中的信息傳回到上位機。硬件系統(tǒng)框圖如圖5所示。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          3 系統(tǒng)的軟件設計

          3.1 數(shù)字PID算法

          模擬PID的表達式如式(2)所示

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          到這一步已經(jīng)求得數(shù)字位置式PID的表達式。本文設計的直立與速度控制器的核心思想是從數(shù)字位置式PID表達式來的,下面說明軟件的各個部分。

          3.2 軟件各部分實現(xiàn)

          系統(tǒng)的軟件部分主要由傳感器信號濾波處理,匹配濾波算法,直立控制算法以及速度控制算法組成。信號的采樣在中斷函數(shù)中處理。為了減輕噪聲干擾,在程序采取了中位值,平均值等幾種算法結合的方式。匹配濾波算法用于獲得車模的傾角與角加速度。直立控制算法用于獲得車模直立控制量。速度控制算法使用PI算法實現(xiàn)車模的靜止運行。

          4 實驗應用

          本文的車模直立行走算法實現(xiàn)了基本功能。但是存在很多參數(shù)需要調(diào)整,首先在使用AD采樣得到陀螺儀與加速度計信號值后,要減去靜態(tài)值,然后需要加速度參數(shù)與陀螺儀參數(shù)進行歸一化處理,得到實際的角度。同時,在匹配濾波算法中存在比例因子GTA需要調(diào)試。而且,在直立控制與速度控制中分別存在P參數(shù),D參數(shù),以及速度P參數(shù),速度I參數(shù)。這些參數(shù)需要不斷調(diào)試才能得到一個較好的效果。本文經(jīng)過長期測試,得到了一定的效果,圖6表示匹配濾波算法算得的車模角度。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          在該圖中可以看到,藍色的線毛刺較多,而另外那條線明顯平滑,沒有噪聲,而且也很好地跟蹤到了加速度計傳回的角度,說明達到了預期的效果。運用本文提出的直立速度控制算法,得到車模直立運行的效果,圖7中設定車模速度為0,立在原地的效果圖。

          基于MC9S12XS128的二輪直立車設計與實現(xiàn)

          5 結束語

          文中基于加速度傳感器MMA7361與陀螺儀傳感器設計與實現(xiàn)了的速度與直立控制方案。實驗證明,整個系統(tǒng)具有較強的抗干擾能力與較快的動態(tài)響應特性,可以很好地實現(xiàn)直立運行。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();