賈樹林,馬雙寶
(武漢紡織大學(xué) 機械工程與自動化學(xué)院,湖北 武漢 430200)
在當(dāng)今市場上,傳統(tǒng)玩具慢慢地退出了市場,取而代之的是高科技智能型電子玩具。無線遙控小車、自動避障小車、智能循跡小車成為新一代高科技產(chǎn)物,無線遙控小車的實現(xiàn)可通過手機wifi、藍牙、射頻、紅外線等幾種,其中藍牙控制技術(shù)具有一定的優(yōu)越性,正應(yīng)用于短距離通信、傳輸文件、遠程遙控等多個方面[1]。
對于智能小車,雙輪自平衡小車是研究熱點之一。雙輪自平衡小車有很多優(yōu)點,例如:占地面積較小,運動靈活,可以在狹小的空間得到運用,也可以成為人們?nèi)粘5拇焦ぞ?,解決人們短距離行程,為人們的生活帶來便利[2]。雙輪自平衡小車可以實現(xiàn)不需人為控制的運行,且在不同的狀態(tài)之間切換。本設(shè)計就是在這樣的背景下提出的,通過計算機編程來實現(xiàn)對雙輪自平衡小車的前進、后退、轉(zhuǎn)彎以及停止等行為控制。雙輪自平衡小車是一個復(fù)雜和集成的系統(tǒng),它包括了通信方面、智能控制方面、自動控制方面、傳感器和檢測技術(shù)以及電子設(shè)計和其它技術(shù)方面的知識[3],通過對雙輪平衡小車的研究,可以讓初學(xué)者了解自動控制的基本方法以及多種技術(shù)結(jié)合而形成的控制問題。
圖1 系統(tǒng)總體框圖
系統(tǒng)總體框圖如圖1 所示。該系統(tǒng)由主控制器STM32F429、傳感器模塊、藍牙模塊、電源模塊、串口顯示模塊、電機驅(qū)動模塊和測速模塊等部分組成。
控制器采用單片機STM32F429,該單片機使用的內(nèi)核是Cortex M4,含有DSP 指令集,它內(nèi)部的SRAM大小為256KB。該芯片的模擬量轉(zhuǎn)為數(shù)字量的轉(zhuǎn)換速度非??欤⑶肄D(zhuǎn)換模塊的工作供電電壓很低,內(nèi)部含有8 個定時器,可同時處理32 位數(shù)據(jù),I/O 端口可以復(fù)用為很多其它的功能[4],常用的串行接口有USART 和SPI 通信,該單片機最高的工作頻率可以達到180MHz,STM32F429 單片機總線訪問的速度非常快,并且該單片機擁有強大的數(shù)據(jù)處理能力,可以完全滿足本次設(shè)計要求。
顯示模塊主要是將雙輪自平衡小車的運行狀態(tài)實時的顯示到人機交互界面,使我們進一步了解雙輪自平衡小車的運行狀況。顯示模塊采用串口觸摸屏顯示,串口觸摸屏HMI 就是將它的一般功能進行封裝,使用者可以通過串口USART 與屏幕進行消息的交換,從而滿足用戶的要求,人機交互界面非常友好且操作性良好[5],用戶可以通過屏幕發(fā)送相應(yīng)的指令來完成相關(guān)操作。
串口顯示電路如圖2 所示。其中,PA9、PA10 為與控制器連接管腳,PA9 為發(fā)送端,PA10 為接收端,且控制器與串口顯示屏通信方式為USART。
圖2 串口顯示電路
圖3 LM2596 電壓轉(zhuǎn)換電路
電源電路是整個系統(tǒng)工作的前提,它為各個模塊提供所需的電源。電源的正確使用是系統(tǒng)穩(wěn)定工作運行的前提。
電源采用12V 聚合物鋰電池供電,該電池為可充電電池,可以重復(fù)使用。電壓轉(zhuǎn)換電路如圖3 所示,將電源12V 經(jīng)過降壓芯片LM2596 轉(zhuǎn)換為10V,作為電機驅(qū)動模塊的電源。LM2596 是一款降壓芯片,能夠輸出3A 的電流去驅(qū)動其它器件,它的輸出電壓大小可根據(jù)反饋電阻的大小進行調(diào)節(jié),輸出電壓最高可達37V[6];再將轉(zhuǎn)化后的10V 經(jīng)過線性穩(wěn)壓芯片LM7805 轉(zhuǎn)化為5V,為單片機供電,可以實現(xiàn)同一電源為不同模塊供電,且保證了不同電壓的需求,這樣設(shè)計供電電路比較簡單,易于實現(xiàn),且能滿足本次設(shè)計需求。LM7805 降壓電路如圖4 所示。
圖4 LM7805 降壓電路
圖5 帶霍爾傳感器測速碼盤的GB37 直流減速電機
要實現(xiàn)對雙輪自平衡小車速度的控制,需要實時知道小車的行駛速度,對小車的速度進行反饋,形成速度閉環(huán)反饋,從而實現(xiàn)對小車速度的控制。
測速模塊采用霍爾傳感器,采用GB37 直流減速電機,電機上帶有一款霍爾傳感器測速碼盤,減速比為1:30 的520 電機,該電機額定電壓為12V,空轉(zhuǎn)電流為250mA,堵轉(zhuǎn)電流最大可達6.5A,功率可達4.8W[7],同時測速碼盤上配有13 線強磁碼盤,在A、B 雙相的共同輸出下,就可以計算出當(dāng)車輪轉(zhuǎn)動一圈時,輸出的脈沖數(shù)量可以達到780 個。如圖5 所示為帶霍爾傳感器測速碼盤的GB37 直流減速電機。
電機驅(qū)動模塊采用TB6612FNG 芯片作為本次設(shè)計的電機驅(qū)動模塊芯片,該芯片在效率方面比傳統(tǒng)驅(qū)動有很大提高,也極大地縮減了驅(qū)動的體積,并且在正常的工作情況下該芯片不會散發(fā)熱量,并且該芯片自帶軟啟動功能,啟動轉(zhuǎn)矩大,性能較好[8]。在連接控制器與TB6612FNG 芯片之間加入隔離電路,可以有效地防止控制器被損壞。如圖6 所示為電機驅(qū)動電路圖。當(dāng)STBY 端口被連接到MCU 時,電動機停止工作。當(dāng)STBY 被連接到高電平時,該芯片是有效的。通過將AIN1、AIN2、BIN1、BIN2 置1 或者清零來控制電機的運行狀態(tài)[9]。PWMA 和PWMB 接單片機的PWM 口,用來控制電動機的轉(zhuǎn)動。
圖6 電機驅(qū)動電路圖
該單片微型計算機PA0、PA1、PA2 和PA3 口分別接電機驅(qū)動電路的BIN2、BIN1、AIN2 和AIN1 口,來控制電機的運行狀態(tài),當(dāng)A、B 兩個電機同時正轉(zhuǎn)且兩個電機的轉(zhuǎn)動速度相同時,小車向前行駛;當(dāng)A、B 兩個電機同時反向轉(zhuǎn)動且兩個電機的轉(zhuǎn)動速度相同時,小車向后倒退;當(dāng)A、B 兩個電機一個正向轉(zhuǎn)動一個反向轉(zhuǎn)動且兩個電機的轉(zhuǎn)動速度相同時,小車將在當(dāng)前位置轉(zhuǎn)圈行駛。PWMA 和PWMB 接單片機的PWM 口,當(dāng)小車前進或者后退時,要求兩輪小車的兩個車輪速度是一樣的,則輸入電機的兩路PWM波是一樣的;當(dāng)小車向左轉(zhuǎn)彎,要求小車左輪的速度小于右輪的速度,則左輪所輸入的PWM 波的占空比要小于右車輪所輸入的PWM 波的占空比;當(dāng)小車向右時,要求小車右車輪的速度要小于左車輪的速度,則右輪所輸入的PWM 波的占空比要小于左輪所輸入的PWM 波的占空比。PWM 波的占空比越大,小車的速度越大,反之亦然。通過改變PWM 波的占空比,即可改變小車的速度。當(dāng)然,PWM 波的頻率應(yīng)該是合適的。如果PWM 頻率較高時,電機連續(xù)運行,并且噪音較小,但該設(shè)備的功耗會隨著頻率的增加而增加;當(dāng)PWM 波的頻率較低時,它的功率損耗也比較小,并且大大提高調(diào)速的線性相關(guān)性,但是太低的頻率可能會導(dǎo)致降低電機旋轉(zhuǎn)的連續(xù)性[10]。實踐證明,一般情況下,當(dāng)PWM 波頻率大于1KHz時,該裝置能夠穩(wěn)定的控制電動機。其次,如果占空比較大,會影響電機輸出電流的穩(wěn)定性和該裝置的輸出電流的能力,占空比的大小應(yīng)該根據(jù)不同速度的要求而進行正確設(shè)置。
通信模塊采用HC-06 藍牙模塊,采用手機app 進行藍牙控制,該藍牙模塊輸入電壓范圍在3.6V-6V之間,適用于正常的5V 供電并且模塊具有連接指示燈,可以確定藍牙的連接是否成功,操作較為方便。
傳感器模塊使用傳感器MPU6050,MPU6050 是世界上第一個集成的六軸運動處理組件,它可以測量六個物理量(小車在x、y 和z 三個軸的傾斜程度和三個軸上速度的變化率)[11]。MPU6050 的內(nèi)部數(shù)據(jù)檢測為16 位,它可以將其測量的模擬量轉(zhuǎn)化為可輸出的數(shù)字量。為了更加準(zhǔn)確的跟隨各種運動,用戶可以通過自己編寫程序來設(shè)定傳感器的可測范圍。陀螺儀可測量±250,±500,±1000,±2000°/秒(dps),加速度計可測量范圍為±2g, ±4g, ±8g, ±16g[12]。該芯片和其它器件之間通過串口I2C 進行交換信息,同時它極大的消除了單獨使用陀螺儀和加速度計在時間上的積分誤差。
由于小車上安裝有六軸傳感器MPU6050,可以檢測到小車x、y、z 三軸的傾斜角度和三軸方向的加速度,將所收集的數(shù)據(jù)進行分析和處理,可以得到小車所處的狀態(tài),并且程序是根據(jù)小車所處的不同狀態(tài)而編寫。
(1)靜止時:當(dāng)小車的重心位于電機軸線中心位置的正上方時,此時傳感器MPU6050 將采集到的數(shù)據(jù)進行處理分析得出小車位于0°位置,即平衡位置,此時小車靜止。當(dāng)檢測到小車的重心向前傾斜時,則需要小車向前運動來保持小車的平衡狀態(tài);當(dāng)檢測到小車的重心向后傾斜時,則需要小車向后運動來保持小車的平衡狀態(tài)。
(2)前進時:小車略微向后加速,這將傾斜小車的重心,使其稍微向前,然后再使小車在反方向加速,小車就會向前傾斜,同時保持小車處于平衡狀態(tài),使得小車前進。
(3)后退時:小車的車輪稍微向前加速,這將傾斜小車的重心,使其稍微向后,然后再使小車的兩輪在反方向加速,這將使小車向后傾斜,同時保持小車的平衡,使得小車倒退。
(4)左轉(zhuǎn)時:當(dāng)小車處于前進或者后退并且保持平衡狀態(tài)時,控制小車的左輪以較慢的速度運動、小車的右輪以較快速度運動時,即可使小車向左轉(zhuǎn)。
(5)右轉(zhuǎn)時:當(dāng)小車處于前進或者后退并且保持平衡狀態(tài)時,控制小車的右輪以較慢的速度運動、小車的左輪以較快速度運動時,即可使小車向右轉(zhuǎn)。
經(jīng)過理論分析即可得出小車處于不同狀態(tài)時的控制思路,進而對小車實現(xiàn)不同的控制。
兩輪自平衡小車要想實現(xiàn)小車的平衡狀態(tài),需要實時的知道小車所處的狀態(tài),根據(jù)不同的狀態(tài)做出不同的控制,以此來實現(xiàn)小車的平衡,這一過程則需要將六軸傳感器MPU6050 采集到的數(shù)據(jù)進行實時的分析處理,最終得出小車所處的狀態(tài)。因此傳感器的數(shù)據(jù)處理與分析顯得尤為重要。
MPU6050 的內(nèi)部含有加速度傳感器和角速度傳感器。
圖7 加速度計模型圖
2.2.1 加速度計
加速度計是用來測量加速度的,該加速度計可以測量x、y 和z 三軸方向上的加速度。加速度計反應(yīng)的加速矢量與當(dāng)前力的方向相反,例如:加速度方向為向左,但是力的方向為向右。該傳感器可以同時測量三個方向上所受到的力。如圖7 所示為加速度計模型圖,x、y、z 之間兩兩垂直。向量R 是加速度計需要測量的力,并且Rx、Ry和Rz分別是R 在x、y 和z 軸上的映射,并且滿足Rx2+Ry2+Rz2 =R2。Rx、Ry和Rz與實際加速度計的x 軸,y 軸和z軸有關(guān)[13]。MPU6050 中的加速度傳感器接口方式為I2C。對于加速度的量程,用戶可以通過自己編寫程序任意設(shè)置,并且可以直接獲取內(nèi)部模數(shù)轉(zhuǎn)換的最終結(jié)果。加速度計的數(shù)據(jù)是以LSB 為單位的,而不是g(9.8m/s2),需要進一步轉(zhuǎn)換,加速度計靈敏度通常以LSB/g 來表示。例如,當(dāng)我們選擇±4g 的量程時,對應(yīng)的靈敏度=8192 LSB/g。
為了獲得最終結(jié)果,運用公式Rx =ADC/靈敏度(ADC表示x 軸上的ADC計數(shù)值)。即當(dāng)軸上的計數(shù)值為ADC時,對應(yīng)的加速度值為(ADC ?8192)g。我們將向量R 和X、Y、Z 軸之間的角度分別定義為A、B、C。則可以得到:
并且在每個方向上的角度可以通過反余弦函數(shù)則可得到各個方向的角度。即
當(dāng)MPU6050 水平放置時,只有Z 軸方向有力的作用,它的大小為1g,其相應(yīng)的采樣值為8192(量程為±4g)。此時有Rx=0,Ry=0,Rz=1g,并且滿足Rx2+Ry2+Rz2 =R2。則R 與x、y、z 三個方向所形成的角度為:
2.2.2 陀螺儀
陀螺儀是測量角速度的傳感器,MPU6050 內(nèi)部含有可以測量三個方向的陀螺儀,該芯片可檢測角速度的范圍為±250、±500、±1000 與±2000 dps(dps 是degree per second)。當(dāng)選擇量程為±1000dps 時,將會得到精確度為32.8LSB/(°/s)。即當(dāng)載體在X+軸轉(zhuǎn)動1dps 時,ADC 將輸出32.8 的變化量。
圖8 示出了陀螺儀模型圖,每個陀螺儀負責(zé)檢測相應(yīng)的軸線,也就是轉(zhuǎn)速,檢測繞各軸的旋轉(zhuǎn)速度。通過上述模型圖定義:
Rxz為R 向量在XZ 平面的投影,Ryz為R 向量在XY 平面上的投影,Axz為Rxz和z 軸的夾角,Ayz為Ryz和z 軸的夾角。Rxz和Rz所形成的直角三角形,利用三角形定理,可以知道:Rx2+Rz2 =Rxz2,Ry2+Rz2 =Ryz2。
假設(shè)測量圍繞Y 軸的轉(zhuǎn)動角度在時刻t1為A,在t2時刻為B,則變化率為Rate=(B-A)/(t2-t1),Rate單位為deg/s,MPU6050 并不會以deg/s單位輸出,要進行轉(zhuǎn)換,轉(zhuǎn)換公式為:
圖8 陀螺儀模型圖
當(dāng)量程為±2000°/s 時,假設(shè)x 軸的ADC 值為300,從上表得出,當(dāng)量程為±2000°/s 時的靈敏度為16.4LSB/(°/s)。根據(jù)上面公式可得出
經(jīng)過上述分析可以對傳感器的數(shù)據(jù)進行處理,最終得到所需要的加速度值與角速度值。
本次設(shè)計采用霍爾傳感器來測量小車車速,采用GB37 直流減速電機,電機上帶有一款霍爾傳感器測速碼盤,減速比為1:30。速度測量碼盤模塊配有一個13 線強磁性編碼盤,當(dāng)A、B 兩相的輸出一起工作時,當(dāng)車輪轉(zhuǎn)動一圈時,脈沖數(shù)能夠輸出780 個,再測得小車車輪的直徑為d,則小車轉(zhuǎn)一圈所行駛的距離為:
再測出小車輸出脈沖所用時間的時間為t,即可算出小車的速度為
如圖9 所示為程序流程圖。
圖9 程序流程圖
當(dāng)程序開始后,首先進行串口初始化、MPU6050 初始化、PID 初始化、電機初始化,接下來進行判斷標(biāo)志位,藍牙模塊向單片機發(fā)送不同的命令,則會賦予標(biāo)志位不同的數(shù)值即為圖9 中變量。當(dāng)變量數(shù)值為1 時,此時執(zhí)行小車靜止直立的程序;當(dāng)變量數(shù)值為2 時,此時執(zhí)行小車前進的程序;當(dāng)變量數(shù)值為3 時,此時執(zhí)行小車后退的程序;當(dāng)變量數(shù)值為4 時,此時執(zhí)行小車轉(zhuǎn)彎的程序。
將各個模塊調(diào)試完成后,最后將各模塊組裝進行整體調(diào)試。上電之后,先觀察控制器是否可以控制電機轉(zhuǎn)動,且電機轉(zhuǎn)動與實際情況是否符合。
當(dāng)小車稍微向前傾斜時,觀察到車輪有向前運動的趨勢;當(dāng)小車稍微向后傾斜時,觀察到小車有向后運動的趨勢。并且串口屏實時顯示小車當(dāng)前所處的傾斜角度。則可以證實,控制器的控制邏輯與電機的實際運行狀況相同。則接下來通過調(diào)節(jié)PID 的各個參數(shù),使小車達到相應(yīng)的功能。如圖10 為小車正面測試圖,如圖11 為小車側(cè)面測試圖,表1 為測試數(shù)據(jù)。
圖10 小車正面測試圖
圖11 小車側(cè)面測試圖
表1 測試數(shù)據(jù)
由測試數(shù)據(jù)表可知,隨著小車傾斜角度不斷變大,小車達到平衡狀態(tài)所需要的時間也在不斷增加,當(dāng)小車的傾斜角度在0°到±30°之間時,小車最終都會達到平衡狀態(tài)。
本次系統(tǒng)設(shè)計采用單片機STM32F429IGT6 作為主控制器,共包含以下模塊:電源模塊為該系統(tǒng)提供供電電源,是所有功能實現(xiàn)的前提;控制器模塊是該系統(tǒng)的核心部分,是系統(tǒng)的“大腦”,對該系統(tǒng)發(fā)送指令,實現(xiàn)控制;電機驅(qū)動模塊是將控制信號進行放大,達到足以驅(qū)動電機運轉(zhuǎn)的目的;傳感器MPU6050模塊用來檢測當(dāng)前小車的傾斜程度,通過傾斜程度來對小車進行控制;顯示模塊用來顯示小車的運行信息;測速模塊用來檢測小車的速度,最終通過閉環(huán)反饋達到控制小車速度的目的;藍牙模塊是使手機和單片機進行通信的,以此來控制小車所處的不同運行狀態(tài),最終小車實現(xiàn)了在不同狀態(tài)下的自平衡。