葛汶鑫 張文燕
(江蘇省常州技師學(xué)院,江蘇 常州 213032)
圖1 Segway
Segway是一種可自動平衡的兩輪單人車。它是由美國發(fā)明家Dean Kamen和他的公司DEKA R&D Corp(DEKA Research and Development Corp)發(fā)明,并隨之創(chuàng)建了Segway有限責(zé)任公司。 Segway也被稱為站立式滑行車。與傳統(tǒng)的兩輪滑行車區(qū)別在于Segway的兩個(gè)小輪都在一條軸心線上?!癝egway”這個(gè)名稱源于單詞“Segue”意思是流暢地流動。
圖2 原理圖解
Segway的運(yùn)作主要是以動態(tài)平衡原理為基礎(chǔ),讓小車能調(diào)節(jié)自身平衡。小車內(nèi)嵌精密回轉(zhuǎn)儀用來判斷小車的即時(shí)狀態(tài),再由高速中央處理器計(jì)算出正確的指令來開動小車使之達(dá)到平衡狀態(tài)。假設(shè)我們把整個(gè)車和駕駛員與地面垂直時(shí)的重力中心線作為參考軸線。當(dāng)小車向前傾斜時(shí)(θ>0),小車內(nèi)部的電動馬達(dá)就會提供一個(gè)向前的動力。如此讓小車平衡,然而與此同時(shí),它也制造出了一個(gè)讓小車向前的加速度。反之亦然。因此,駕駛員只需通過向前或向后傾倒來改變身體與參考軸線的角度,便能控制Segway向前或是向后行駛,并且Segway的行駛速度與駕駛員的身體傾斜度成正比。理論上,在有充足的電能的前提下,駕駛員不會有摔倒的危險(xiǎn)。
探索臺式Segway的自動平衡控制,首先要制作一個(gè)臺式Segway。制作臺式Segway需要一個(gè)連有兩個(gè)小輪的電動馬達(dá)和一個(gè)控制電動馬達(dá)的嵌入式系統(tǒng)。在此次臺式Segway的制作中,用到了Arduino,嵌入式系統(tǒng)L293D-H Bridge和傳感器IMU 5DOF。Arduino是由一個(gè)意大利公開的硬件工程資源衍生出來的。其平臺包括一個(gè)有簡單I/O電路板的微處理器和一個(gè)與其對應(yīng)的完整高效的軟件環(huán)境。Arduino可以作為一個(gè)外部裝置與個(gè)人電腦相連,并在電腦上運(yùn)行Arduino軟件來相互影響。L293D-H Bridge是一個(gè)有16個(gè)引腳的單片電路裝置。它有兩個(gè)驅(qū)動通道和轉(zhuǎn)能晶體管,可用來改變馬達(dá)轉(zhuǎn)動的方向。除此之外,每個(gè)驅(qū)動通道都有一個(gè)使能輸入,如ENABLE 1。L293D能通過內(nèi)部邏輯產(chǎn)生使能信號來調(diào)整PWM (脈寬調(diào)制)從而控制馬達(dá)的速度。傳感器IMU 5DOF的作用是給控制算法提供反饋,它由雙軸回轉(zhuǎn)儀IDG-500和三軸加速度測量儀ADXL335組成。可讀取被測物體的即時(shí)角速度和位置并把這些數(shù)據(jù)傳輸給處理器。臺式Segway的系統(tǒng)圖解如圖5所示。
圖3 Arduino
圖4 IMU 5DOF
圖5 臺式Segway系統(tǒng)圖解
圖6是控制直流馬達(dá)的電路連接圖。引腳9是Arduino的6個(gè)I/O引腳中的一個(gè),把它與L293D的使能引腳1連接起來控制馬達(dá)的發(fā)動與停止。L293D的引腳8與外部電源的陽極相連為馬達(dá)提供電能。L293D的引腳2和引腳7分別與Arduino的引腳6和引腳7相連,來接受Arduino中央處理器的發(fā)出的命令來轉(zhuǎn)換馬達(dá)的旋轉(zhuǎn)方向。L293D的引腳4和引腳5與Arduino的GND(接地)相連最終接到電源的負(fù)極。圖7是此次設(shè)計(jì)中臺式Segway的最終模型。
圖6 直流馬達(dá)控制電路圖
圖7 臺式Segway最終模型
Segway是控制倒立擺的典型例子。所以首先要找到可以補(bǔ)償?shù)沽[動力學(xué)的控制原理。在這個(gè)項(xiàng)目中,我用了簡單的bang-bang控制來實(shí)現(xiàn)了小車的自動平衡。Bang-bang控制應(yīng)用在很多方面,如自動調(diào)溫器。當(dāng)室內(nèi)溫度太低時(shí),火爐就開始發(fā)動加熱;當(dāng)室內(nèi)溫度過高時(shí),空調(diào)便開啟。此類控制就叫做bang-bang控制。Bang-bang控制是一個(gè)注重控制運(yùn)算法則可靠性的控制器設(shè)計(jì)方法。其目標(biāo)是確??刂葡到y(tǒng)在實(shí)際環(huán)境中安全運(yùn)行的同時(shí)為控制系統(tǒng)找到最小的控制要求??刂破饕坏┍辉O(shè)計(jì)好,其參數(shù)就不再變化,控制性能也得到保障。一般來說,bang-bang控制系統(tǒng)的設(shè)計(jì)都是基于系統(tǒng)最壞的狀態(tài)。很多系統(tǒng)都可以用bnag-bang控制來設(shè)計(jì),尤其是有大量不確定范圍或有很小的穩(wěn)定邊緣的系統(tǒng)。
圖8 bang-bang控制自動調(diào)溫器
如圖7所示,固定在小車上的傳感器ADXL335不斷讀取即時(shí)數(shù)據(jù)并將這些數(shù)據(jù)傳送給Arduino處理。這里用ADXL335的引腳YAcc,其讀取的數(shù)據(jù)反應(yīng)了小車的即時(shí)傾斜角度。當(dāng)小車平衡時(shí),傳感器讀到的即時(shí)數(shù)據(jù)的范圍是342到345,考慮到系統(tǒng)在實(shí)際環(huán)境中的最壞狀態(tài),為了使之更穩(wěn)定,我適當(dāng)擴(kuò)大此數(shù)據(jù)的范圍,在編寫程序時(shí)將這個(gè)平衡范圍設(shè)置為339到348。這樣,當(dāng)小車向前傾斜時(shí),Y-Acc讀到的數(shù)據(jù)就大于348,此時(shí),Arduino下命令讓L293D控制馬達(dá)向前轉(zhuǎn)動。當(dāng)小車向后傾斜時(shí),Y-Acc讀到的數(shù)據(jù)就小于339,此時(shí),Arduino下命令讓L293D控制馬達(dá)向后轉(zhuǎn)動。如此,來控制小車實(shí)現(xiàn)平衡。脈寬調(diào)制PWM設(shè)定為185來發(fā)動馬達(dá)。以上所選用的數(shù)據(jù)都來自于大量的測試。用Arduino軟件所編的實(shí)現(xiàn)小車自動平衡的程序見附錄I。
截取由傳感器ADXL335的引腳Y-Acc讀取的部分即時(shí)數(shù)據(jù),調(diào)入Matlab經(jīng)處理后生成一個(gè)反饋小車傾斜角度的圖表。此圖表展示了用bang-bang控制設(shè)計(jì)的臺式Segway系統(tǒng)在實(shí)際環(huán)境中的工作狀態(tài)。如圖9所示,藍(lán)色的線(幾乎保持水平)表示了小車平衡時(shí)的狀態(tài),此時(shí)小車不受任何干擾,一直維持在平衡狀態(tài),傾斜角始終為0度。紅色的線(呈波形狀)表示了小車在受到外界干擾下的工作狀態(tài)。此時(shí),小車的傾斜角始終在以0度為中心,5度的幅度為范圍內(nèi)來回?fù)u擺。由此可見,bang-bang控制成功地實(shí)現(xiàn)了臺式Segway的自動平衡。
圖9 Segway實(shí)際環(huán)境中工作狀態(tài)
最終,一個(gè)用馬達(dá),傳感器和嵌入式系統(tǒng)制造的臺式Segway成功地實(shí)現(xiàn)了自動平衡。Bang-bang控制的使用使小車在實(shí)際環(huán)境中達(dá)到了穩(wěn)定。
附錄I
[1]https://www.sparkfun.com/products/9268,最后一次進(jìn)入時(shí)間 2013.03.30[OL]
[2]http://www.fourmilab.ch/hackdiet/www/subsection1_2_3_0_5.html,最后一次進(jìn)入時(shí)間 2013.03.30[OL].
[3]http://resources.metapress.com/pdf-preview.axd?code=xuq34u56204 74264&size=largest,最后一次進(jìn)入時(shí)間 2013.03.30[OL].
[4]https://www.sparkfun.com/datasheets/Components/SMD/Datasheet_IDG 500.pdf,最后一次進(jìn)入時(shí)間 2013.03.30[OL].
[5]http://hearth.com/econtent/index.php/wiki/8d1e6930d8db3a522ab33b88366567a 7/,最后一次進(jìn)入時(shí)間 2013.03.30[OL].
[6]http://www.ecs.shimane-u.ac.jp/~kyoshida/Swing-up_control.pdf,最后一次進(jìn)入時(shí)間 2013.03.30[OL].