兩輪自平衡車實驗平臺的設(shè)計
0 引 言
兩輪自平衡小車(two-wheeled self-balanced vehicle)或兩 輪自平衡機(jī)器人(two-wheeled self-balanced robot)是一種類似 人類直立姿態(tài)的平衡控制系統(tǒng),其核心問題是如何保證在各工 況下運(yùn)動姿態(tài)的平衡控制及導(dǎo)航 [1]。兩輪自平衡小車或機(jī)器人 系統(tǒng)是一個高階次、不穩(wěn)定、多變量、非線性、強(qiáng)耦合的系統(tǒng) [2]。 其系統(tǒng)設(shè)計不僅要考慮機(jī)械結(jié)構(gòu)的運(yùn)動學(xué)設(shè)計 [3] ,也要考慮動 力學(xué)設(shè)計 [2]、能量設(shè)計 [4]、控制系統(tǒng)的參數(shù)辨識、控制系統(tǒng)的 濾波處理 [5] 等,然后建立相應(yīng)的控制策略,設(shè)計確實可行的控 制器 [6],實現(xiàn)自平衡小車在各工況下的運(yùn)動平衡控制。
兩輪自平衡小車在實踐應(yīng)用上,可用于軍事領(lǐng)域中的偵 查、排雷、單兵載人等,或作為日常生活中的短途交通工具 [7]。 然而,目前兩輪自平衡小車更多的是其理論研究的意義,它是 檢驗各種控制理論控制性能的一個較好的實驗平臺 [8]。目前國 內(nèi)不少院校都對兩輪自平衡小車進(jìn)行了研究,主要為哈爾濱工 業(yè)大學(xué)趙杰團(tuán)隊 [8],西安電子科技大學(xué)屈勝利團(tuán)隊 [9],北京工 業(yè)大學(xué)阮曉剛團(tuán)隊 [1, 2] 等。國外也對兩輪自平衡小車有研究, 如 Sayidmarie[10] 等對兩輪自平衡機(jī)器人上坡的平衡控制進(jìn)行 了研究,Slavov[11] 等人基于線性二次型控制(linear-quadratic regulator,LQR)對兩輪機(jī)器人進(jìn)行了研究,Larimi[12] 等構(gòu)建 了反作用輪系輔助的兩輪小車的新型的穩(wěn)定算法,Kim[13] 等建 立了兩輪自平衡移動機(jī)器人的動態(tài)模型等。這說明兩輪自平衡 小車不僅僅在應(yīng)用需求上,尤其在學(xué)科理論需求上,對其研 究都具有重要的意義。因此,作為進(jìn)行各種平衡控制理論研 究的第一步,對兩輪自平衡小車的實驗平臺的研制具有非常重 要的意義。 本文主要設(shè)計了兩輪自平衡小車的實驗平臺。設(shè)計采 用 STM32F103C8T6 為核心處理器進(jìn)行控制,姿態(tài)檢測選用 MPU6050 運(yùn)動處理傳感器,數(shù)據(jù)融合采用卡爾曼濾波算法, 結(jié)合陀螺儀的快速響應(yīng)特性和加速度傳感器的長時間穩(wěn)定特 性,得到小車的傾角。然后通過 PID 算法使小車能夠處在一 個相對平衡的位置,從而保持直立的姿態(tài)。系統(tǒng)控制參數(shù)的 選擇采用系統(tǒng)辨識的方法,在 Matlab 仿真平臺得到系統(tǒng)的優(yōu) 化參數(shù),并寫入編寫好的 C 語言軟件,通過 HC-06 藍(lán)牙模塊 可以使用 Android 手機(jī)控制小車實現(xiàn)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn) 等動作模式。
1 系統(tǒng)設(shè)計
本設(shè)計采用模塊化設(shè)計思想,系統(tǒng)總體功能框圖如圖 1 所示,分為五個模塊,分別為:電源管理模塊,微處理器模塊, 電機(jī)驅(qū)動模塊,姿態(tài)傳感器數(shù)據(jù)采集模塊,以及藍(lán)牙無線通 訊模塊。電源管理模塊負(fù)責(zé)整個系統(tǒng)的供電,微處理器模塊 為系統(tǒng)的控制與數(shù)據(jù)處理核心,姿態(tài)數(shù)據(jù)采集模塊為采集小 車的姿態(tài)(包括加速度和角速度),然后通過微處理器控制算 法后,再驅(qū)動電機(jī)控制模塊運(yùn)動以保持平衡,而藍(lán)牙通訊模 塊則通過手機(jī)設(shè)備控制系統(tǒng)的運(yùn)行,同時,系統(tǒng)運(yùn)行的數(shù)據(jù) 也可以上傳到手機(jī)或電腦上。
2 硬件電路設(shè)計
2.1 電源管理模塊
系統(tǒng)主要使用的電平為 12 V,5 V,3.3 V 共三種電平, 其中 STM32F103C8T6、MPU6050、HC-06 主要采用 3.3 V 供 電,電機(jī)驅(qū)動模塊用12 V 和 5 V 供電。所以,本設(shè)計總電源 使用12 V 的鋰電池供電,采用 LM2576 將鋰電池進(jìn)行降壓為 5 V,再利用 LM1117 把得到的 5V 電平降為 3.3 V。
2.2 STM32F103 微處理器模塊
系統(tǒng)采用 STM32F103C8T6 意法半導(dǎo)體(ST)的 32 位 ARM Cortex-M3 內(nèi)核的微處理器。該處理器正常工作主頻為 72 MHz,具有 12 bit 分辨率的 ADC,以及16 bit 電機(jī)控制 PWM 定時器,2 個 I2C 接口(SMBus/PMBus)。該處理器可 應(yīng)用于電機(jī)驅(qū)動,應(yīng)用控制,醫(yī)療手持設(shè)備,游戲,GPS 平 臺等多種場合,所以,本設(shè)計采用 STM32F103C8T6 具有一定 的合理性。其最小系統(tǒng)電路圖如圖 2 所示。
2.3 電機(jī)驅(qū)動模塊
自平衡小車的驅(qū)動電機(jī)為兩個無刷直流電機(jī)(電機(jī) A為 左側(cè)電機(jī),電機(jī) B 為右側(cè)電機(jī))。采用 L298N 芯片作為電機(jī) 驅(qū)動電路的主芯片,小車的不同狀態(tài)運(yùn)動通過電機(jī)的三種轉(zhuǎn) 動方式(正轉(zhuǎn),反轉(zhuǎn),停止)實現(xiàn),具體如表 1 所列。電機(jī)驅(qū) 動電路原理圖如圖 3 所示。L298N 的 VSS 接 5 V 電源,VS 接 12 V 電源。IN1、IN2、IN3、IN4 分別接 STM32 的 PB1、 PB0、PB6 和 PB5,ENA 接 PA0,ENB 接 PA1,此接法不是 唯一的,可以根據(jù)程序中的端口設(shè)置進(jìn)行相應(yīng)的更改。具體的 控制過程 :角速度和加速度經(jīng)過閉環(huán)控制之后產(chǎn)生一個結(jié)果, 其運(yùn)算結(jié)果用來改變 PWM 脈沖的占空比,進(jìn)而分別控制了左 電機(jī)和右電機(jī)的轉(zhuǎn)速。在兩個電機(jī)之間加入二極管主要是為了 保護(hù)電路的安全運(yùn)行。
2.4 姿態(tài)傳感器模塊
為了得到高精度的角度檢測,系統(tǒng)采用 Invensense 公司 的 MPU6050,該姿態(tài)傳感器同時集成了 3 軸加速度和 3 軸陀 螺儀,自帶 16 位 AD 轉(zhuǎn)換,加速度測量范圍為 ±16 g(實際 應(yīng)用僅為 ±2 g 范圍),傾角角度測量范圍不到1度。所以不需 要分別使用加速度計和陀螺儀,以及相應(yīng)的 ADC 電路,但此 處數(shù)據(jù)不能簡單采集使用,還需要經(jīng)過微處理器卡爾曼濾波 融合算法才可得到傾角。姿態(tài)傳感器模塊電路如圖 4 所示。
2.5 藍(lán)牙無線通訊模塊
自平衡小車系統(tǒng)可以通過無線方式和上位機(jī)或者手機(jī)進(jìn) 行通訊,實現(xiàn)手機(jī)控制小車運(yùn)行,并同時把數(shù)據(jù)上傳到手機(jī)上。 本設(shè)計采用的是藍(lán)牙模塊 HC-06,此模塊波特率可變,串口 電壓為 3.3 V 或者 5 V,可以進(jìn)行主從機(jī)切換,并且可以通過 AT 指令改變一些出廠的基本設(shè)置,如名字和密碼等。HC-06 主要用來接收安卓手機(jī)發(fā)送的指令,接收到之后,把指令通過 串口發(fā)送給主控芯片,再由單片機(jī)控制電機(jī),根據(jù)不同的指令來實現(xiàn)小車的左轉(zhuǎn)、右轉(zhuǎn)、前進(jìn)和后退。HC-06 原理圖如圖 5 所示。
3 系統(tǒng)軟件設(shè)計
系統(tǒng)的控制流程圖如圖 6 所示,主要包括 :STM32 的初 始化,MPU6050 初始化,姿態(tài)(傾角)信息的采集,卡爾曼濾波, 傾角 PID 控制,PWM 控制電機(jī)輸出。系統(tǒng)軟件開發(fā)為基于 CMSIS 架構(gòu)的固件庫開發(fā)平臺,軟件版本為 MDK V4.12,它 支持常見的 ARM7,ARM9 和 ARM 最新內(nèi)核的 CM3 系列微 處理器。
STM32 的初始化主要包括時鐘初始化、延時初始化以及 中斷初始化。時鐘初始化采用 SystemInit()。STM32 是 CM3 內(nèi)核的,所以其內(nèi)部有一個 SysTick 定時器,而使用的延時函 數(shù)就是以這個定時器為基準(zhǔn),delay_init()函數(shù)主要是配置 SysTick 的中斷時間,以及延時初始化 fac_us 和 fac_ms 兩個 參數(shù)。NVIC_Configuration()函數(shù)主要用來設(shè)置搶占優(yōu)先級 和響應(yīng)優(yōu)先級。
MPU6050 要根據(jù)裝配位置,通過 I2C 讀取各個軸角速 度和各個軸的加速度,再進(jìn)行卡爾曼濾波處理進(jìn)行數(shù)據(jù)融合, 然后得到融合后的傾角。數(shù)據(jù)讀取函數(shù)、卡爾曼濾波函數(shù)分別 為 IIC_6050()、Kalman()。濾波器參數(shù)通過模型仿真與實 驗結(jié)合的方式得到。并寫入到軟件代碼中。
電機(jī)控制可采用方波或正弦波控制。 雖然正弦波相比有效率的多,但考慮到系 統(tǒng)實現(xiàn)的復(fù)雜度和效率,本文采用方波來 實現(xiàn)電機(jī)控制。設(shè)計采用 TIM2 的通道一 和通道二產(chǎn)生 PWM 波輸出,使用 TIM2 并設(shè)置其為定時器模式,脈沖寬度調(diào)制 模式 2,通過代碼產(chǎn)生頻率為 18 kHz 占 空比可變的 PWM,其中占空比由獲取到 的角速度和角度來控制,使用函數(shù) TIM_ SetCompare()來驅(qū)動電機(jī)。
本設(shè)計的手機(jī)顯示界面如圖 7 所示。 設(shè)計沒有使用查詢而是使用中斷接收指 令,因此中斷服務(wù)函數(shù)是整個串口模塊的 核心。當(dāng)收到不同的指令時,通過控制電 機(jī)轉(zhuǎn)向進(jìn)行不同的操作。需要注意的是每 次控制電機(jī)之后都要調(diào)用一個清除緩沖區(qū)的函數(shù),否則緩沖區(qū)的指令會保持不變,只能保持一個狀 態(tài)。串口不斷接收從藍(lán)牙傳過來的指令,串口接收到的指令都 是由 Android 程序控制的。程序分為兩個部分,一個是 XML 文件,XML 是布局文件,對此文件進(jìn)行修改可以改變手機(jī)顯 示的界面,設(shè)計使用 Button 控件。另外一個是 Java 文件,真 正的行為控制是 Java 文件來做的,首先要實例化 Button,然 后定義藍(lán)牙地址變量,使之固定不變。本設(shè)計藍(lán)牙設(shè)備的地 址為 00 :21 :13 :07:BC,找到地址之后就要發(fā)送指令,這 些指令都是由一些藍(lán)牙架包實現(xiàn)的,最后把 message 發(fā)送出去。 本設(shè)計中若 message 指令為 G,則向前,若為 B 則后退,S 為 停止,L為左轉(zhuǎn),R 為右轉(zhuǎn)。
4 自平衡小車原型實物
本設(shè)計采用兩個無刷直流電機(jī)控制,選擇飛思卡爾競賽 使用的 C 型車模進(jìn)行改裝得到小車機(jī)械結(jié)構(gòu),底盤使用一塊 面包板來代替,板子和支架部分固定在一起。小車的傾角傳 感器 MPU6050,電機(jī)控制模塊 L298,鋰電池模塊,降壓模塊, STM32 核心板,藍(lán)牙模塊等都安裝在面包板上面。完整車體 如圖 8 所示。通過手機(jī)控制界面,可以遙控兩輪自平衡小車的 運(yùn)動,同時可以把采集數(shù)據(jù)上傳到手機(jī)上。
5 結(jié) 語
本文對兩輪自平衡小車實驗平臺進(jìn)行了設(shè)計,作為較 為理想的驗證各種控制理論的實驗平臺,進(jìn)行了系統(tǒng)的硬 件平臺設(shè)計、軟件平臺設(shè)計以及機(jī)械平臺設(shè)計。系統(tǒng)主要以 STM32F103 32 位 ARM 控制器為核心,采用卡爾曼融合濾波 算法對 MPU6050 姿態(tài)傳感器進(jìn)行數(shù)據(jù)處理,通過 PWM 控 制左、右電機(jī)的運(yùn)動,該系統(tǒng)能夠初步實現(xiàn)小車的運(yùn)動平衡 控制。后期的研究將著重理論控制算法的仿真,與參數(shù)融合 優(yōu)化方面。