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