秦迎春,柳貴東,朱嘉駿,郭喜龍,劉漢斌
(廣東白云學院電氣與信息工程學院,廣州 510450)
二輪平衡車又稱為體感車、動態車。它是一款靠傳感器和電機操控來維持平衡車自身平衡的新型交通工具。二輪平衡車的設計原型來源于自動平衡輪椅IBOT。隨著我國的改革開放,科技水平日新月異,汽車這種交通工具早已成為人們日常生活中的必備品。二輪小車由于結構比較簡單、出行瀟灑自如,可以急轉彎、在凹凸不平的路面上行走,在狹窄空間靈活行走,受到很多青年消費者的追捧。該設計利用傾角傳感器和陀螺儀構成姿態傳感器來監測車身所處的俯仰狀態和狀態變化率,通過中央處理器計算出適當數據并發送指令后,驅動電動機產生前進或后退的加速度來達到車體前后平衡的效果,本設計采用陀螺儀、加速度傳感器和STM32F103RCT6芯片、HC-06藍牙芯片等模塊組合來實現。
如果從系統結構來進行區分的話,擺動可以分為順擺和倒立擺。圖1就是典型順擺模型。

圖1 順擺
順擺是重力作用下重復擺動的一種運動。一般來說,將不能拉長的小繩或者是小竹竿的一端懸掛在定點上,而另外一端連接一個小球,這樣就可以構成一個經典的順擺。
STM32平衡車所用到倒立擺,顧名思義就是把順擺翻轉,也就是轉軸的上端才是它的中心所在。如果沒有外力的施加,要保持住非常穩定的平衡是極其困難的。倒立擺系統在生活中可以說是隨處可見,如馬戲團的頂桿雜技表演就是用到倒擺立,如圖2所示。

圖2 倒立擺雜技表演
通過生活中的一些倒立擺例子,我們可以得知平衡車的平衡需要通過負反饋系統來實現。平衡車有兩個輪子,靜止的時候是無法平衡的,所以要讓平衡車發生傾斜,車輪才能及時地轉動且位移方向與傾斜方向一致,這樣抵消傾斜,車身就能夠保持平衡了(如圖3)。

圖3 平衡車平衡過程
對平衡車進行運動分解,如果要想達到平衡的目的,平衡車所受的重力和平衡車懸線上所輸出的馬力足夠才能使平衡車保持平衡,由公式=-sin≈-可知,在平衡狀態下,平衡車不但會受到重力還會受到空氣阻力,但是平衡車的恢復力和所受力的位移方向完全相同,正因如此,平衡車最終可以回到垂直位置。
為了更加直觀地分析平衡車的受力情況,我們可以將平衡車的平衡點看作是重心并依據這個重心來畫出力的分解,這樣就建造出一個比較直觀的平衡車受力模型。該受力分析如圖4所示。

圖4 平衡車受力分析
接下來就是根據平衡車的受力分析來進一步計算,假設小車的重心長度為,平衡車偏移的角度為,自身質量為,平衡車自身受到的外部干擾為(),STM32平衡車的加速度()。我們可以得出以下公式:

一般來說,小車保持平衡一段時間后,它受到的影響不會太大,即當低于10°的時候,會有以下等值sin≈,cos≈1,式(1)可變為:

此時平衡車已經達到了平衡,即()=0,由此可得:



圖5 平衡車系統PD反饋微分控制環節
當我們把PD(比例微分)反饋調節加入到平衡車系統后,可得:

這時平衡車的兩個極點都為:

由上一節,我們可以得知STM32平衡車要實現平衡和行走功能就必須要驅動好兩個輪子。
本設計思路是通過角加速度儀和陀螺儀獲取車身的傾斜程度和角加速度,并且把信息立即傳送到STM32主控芯片,通過濾波和PID演算得出數據并傳送給電機驅動,從而操控輪子進行自平衡操作,達到平衡后再加入其它功能模塊。
STM32平衡車的操控由3個方面組成,如圖6所示。

圖6 STM32平衡車操控組成圖
(1)操控STM32平衡車達到平衡:操控兩個42步進電機的電壓可以使STM32平衡車達到平衡狀態,因為當我們操控42步進電機的電壓時,可以通過這兩個電機來改變STM32平衡車的運動方向和加速度,此時STM32平衡車就會產生一個慣性力并且使車體達到平衡狀態。
由此可見,STM32平衡車要達到平衡就必須操控電機產生足夠的驅動力,但這只是在理想狀態下,實際情況下還要考慮外界環境的干擾,再加上還有機器誤差存在,如果在這種狀態下達到平衡,就必須要加上PD反饋微分控制,同時必須要實時監控平衡車自身的傾斜角度和角加速度,得到這些數據立刻進行算法演算,并輸出指令給電機進行調節。
(2)操控STM32平衡車運行速度:通過MPU6050三軸加速度陀螺儀來實時監控車身的傾斜程度,并把數據傳輸給SMT32F103RCT6芯片進行分析,再通過PID算法輸出數據給電機驅動芯片來驅動42步進電機加速或者減速。
(3)操控STM32平衡車運行方向:通過SMT32F103RCT6芯片進行數據分析,輸出指令給A4988N電機驅動芯片來操控兩個42步進電機的差速轉動。如果想左轉,右邊的步進電機前進,或者左邊的步進電機后退;如果想右轉,左邊的步進電機前進,或者右邊的步進電機后退。
根據上面STM32平衡車的操控分析,可以確定基于STM32平衡車的總結構,如圖7所示。

圖7 STM32平衡車總結構
本研究設計的最核心部分是PID控制,它是一種經典的負反饋控制,同時PID也是運動控制的核心。從倒立擺模型得出,如果要讓STM32平衡車達到平衡,就一定要把反饋控制加入到里面。PID控制算法可通過對偏差信號進行比例、積分、微分,來逐步減少偏差信號,最終達到我們需要的數值。本次設計的角度目標值需要達到垂直位置,按理來說,速度也就是設定的值,可以通過PID調整42位步進電機的正反轉和轉速動態,從而把平衡車的姿態調整到目標位置。
本次設計中分別有模擬PID控制和數字PID圖,其中模擬PID控制如圖8所示。

圖8 模擬PID控制
圖8中()是已經給出的常量,()是實際的輸出數值,()是兩者偏差,所以()=()-(),由此得PID控制方程如下:

式(5)中,k為比例系數,k為積分系數,k為微分系數。從式(5)我們能夠推理得出PID控制就是按偏差控制,也就是說()越大控制的強度就越強。
PID的控制特點:一般來說,在調節系統各比例動態性能中,數值會直接影響響應的速度,換句話說,數值和響應速度成正比。但是如果數值過于龐大,就會引起系統的不穩定,所以一般對穩定條件下的k應該盡量加大參數。當偏差比例環節出現在系統中,系統就會自動依據k的大小來調節系統減少偏差,即系統的粗調部分是比例。
在公式(5)中,偏差的累積求和輸出就相當于該公式的積分部分,比例與()成正比關系,當()較小時,該輸出也會相應地減少,這個時候就必須要靠積分的控制來調節了。
一般來說,小偏差的不斷變化會隨著積分輸出而變化,直到()=0才停止。總的來說,降低系統靜態的誤差和系統的穩態性調節主要是依靠積分,但是還有一個問題,就是積分的過程是不斷累積,而且這個累積速度是非常慢從而使系統的快速性減緩和超調量增大。
該微分的應用,主要對系統動態特性有改善,依據偏差變化和微分之間的關系,前者越大后者越會變大,所以只要通過微分就可以讓系統動態特性得到大幅度的提高。另一個好處,就是把超調和震蕩減弱,但是對噪聲十分敏感,所以一定要事先做好濾波。
根據本次設計的基本思路,把基于STM32平衡車拆分為三個方面的控制,它們分別為速度控制、方向控制、平衡控制,并且結合PID比例、積分、微分的特點來設計,PID控制器框圖見圖9。

圖9 PID控制器
在基于STM32平衡車的控制平衡方面,根據平衡車受力分析,要使STM32平衡車達到平衡,必須要將積分、比例、反饋這三個環節加入到傳遞函數中,這樣平衡車才能保持平衡。
如果要采用平衡PID,由上面分析的k必須大于,k大于0是必要條件。這樣系統就會快速變換STM32平衡車的傾角,從而令小車本身不會倒下并且保持平衡。但是這個變換速度比較快,很可能會出現過小或者過大,而且電機在轉動時有慣性,會導致基于STM32的平衡車發生振動,這個時候采用微分可以依據變換的速度自行調節輸出PID,從而調節幅度,達到細調的功效,細調和粗調相結合,這樣就能夠使平衡車保持平衡穩定。
在STM32平衡車的速度方面,要求平衡車能夠依據設定的速度勻速前進。保持這樣勻速地前進有一個好處,那就是平衡車自身的偏差會小很多,控制系統中的靜態誤差也會小很多。總的來說,偏差相對大的時候可以選用比例調節,而偏差相對小的時候可以選用積分來調節。
在STM32平衡車的方向方面,小車方向的變更主要是依靠兩個輪子的差速,本次設計選用了藍牙控制,用戶可以依據自己的需求來用藍牙遙控器控制STM32平衡車的前進方向。當平衡車接收到藍牙信號的時候,再調用PWM來輸出差壓從而達到方向控制的目的。
平衡車的軟件調控是先利用MPU6050三軸加速度陀螺儀來收集STM32平衡車當時的傾斜角度和角加速度,然后把數據傳輸給STM32主控芯片,通過卡爾曼濾波和PID算法演算后,得到兩個PWM脈寬然后傳輸給兩個電機,調控平衡車的速度,使平衡車的車身保持平衡。整個過程就是不斷地收集角加速度和傾斜角度并通過算法演算輸出命令給電機,然后使平衡小車達到平衡。在這個基礎上,再輸送PWM的值給電機,從而實現前行、后退、轉左、轉右等功能。
綜上所述,根據二輪平衡車在日常生活中的運動特點設置了平衡車的平衡力學模型。把平衡點的線性化處理應用在二輪平衡車的非線性系統中,理論上分析傳遞函數的零極點分布和建立在小車上的控制傳遞函數,從而推算得出達到平衡的算法,并對此提出控制方案,從而設計出一款高性能的多功能平衡車。