基于STM32的可遙控智能跟隨小車的設(shè)計(jì)與實(shí)現(xiàn)
1、引言
智能小車是一個(gè)集自動(dòng)控制、環(huán)境監(jiān)測(cè)、無線遙控等多功能于一體的綜合系統(tǒng),人們習(xí)慣稱其為移動(dòng)輪式機(jī)器人,目前以單片機(jī)為核心的移動(dòng)機(jī)器人還存在處理數(shù)據(jù)局限、控制不穩(wěn)定等不足之處,國(guó)內(nèi)市場(chǎng)暫時(shí)還沒有出現(xiàn)具有真正意義的跟隨性智能載物小車。本設(shè)計(jì)基于單片機(jī)的智能小車測(cè)距模塊、紅外遙控模塊和小車智能控制模塊,通過軟硬件設(shè)計(jì)調(diào)試,實(shí)現(xiàn)了小車的自動(dòng)跟隨狀態(tài)。主要利用超聲波測(cè)距模塊實(shí)現(xiàn)小車與目標(biāo)之間距離的實(shí)時(shí)檢測(cè),當(dāng)兩者距離較近小車就“緩慢跟隨”,一旦測(cè)得距離較遠(yuǎn),小車將“加快腳步”,直到追上目標(biāo),并且小車可以跟隨目標(biāo)一起轉(zhuǎn)彎,不會(huì)“跟丟”。
2、硬件設(shè)計(jì)
2.1、系統(tǒng)總體設(shè)計(jì)
為實(shí)現(xiàn)小車智能跟隨,采用了超聲波測(cè)距、電機(jī)驅(qū)動(dòng)、紅外遙控等功能模塊設(shè)計(jì)。通過超聲波所測(cè)距離,判斷小車快速前進(jìn),慢速前進(jìn)或停止。小車以STM32為主控芯片,將2個(gè)超聲波測(cè)距模塊測(cè)得的距離值經(jīng)過運(yùn)算后,輸出兩路PWM(PuLSEWIDTHMODuLAON)波分別控制左右2個(gè)電機(jī)的轉(zhuǎn)速。電源給控制部分和電機(jī)驅(qū)動(dòng)部分供電。另外STM32連接了LCD顯示模塊和紅外接收電路,分別用于顯示運(yùn)動(dòng)、狀態(tài)信息和接收遙控器的控制信號(hào)。系統(tǒng)總體設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)總體
2.2、超聲波測(cè)距模塊
超聲波是指頻率高于20KHz的聲波,超聲波在介質(zhì)中傳播時(shí)遇到不同的界面將產(chǎn)生反射、繞射、折射等原理在各行各業(yè)得到廣泛應(yīng)用。本設(shè)計(jì)所使用的測(cè)距模塊為HC-SR04超聲波模塊,該模塊測(cè)量范圍為3~400CM,精度最高可達(dá)3MM,由超聲波發(fā)射探頭、控制電路和驅(qū)動(dòng)電路組成。模塊對(duì)外引出4個(gè)引腳分別為VCC、GND、TRIG和ECHO。測(cè)距需要IO口觸發(fā),即先給控制端TRIG至少10μS的高電平信號(hào),模塊將自動(dòng)發(fā)送8個(gè)40KHz的方波并自動(dòng)檢測(cè)ECHO端是否有返回信號(hào),若有返回信號(hào)則高電平持續(xù)時(shí)間即為超聲波在空氣中傳播的時(shí)間。由此可得:測(cè)試距離=(高電平時(shí)間&mes;聲速)/2。因此將模塊的VCC、GND接入系統(tǒng)電源,TRIG、ECHO端接單片機(jī)普通IO口即可實(shí)現(xiàn)超聲波測(cè)距。
2.3、電機(jī)驅(qū)動(dòng)模塊
小車通過一個(gè)L298N電機(jī)驅(qū)動(dòng)模塊驅(qū)動(dòng)左右電機(jī)控制小車的運(yùn)動(dòng)。電機(jī)采用PWM調(diào)速,即改變直流電機(jī)電樞電壓的的占空比來改變平均電壓,從而實(shí)現(xiàn)直流電機(jī)調(diào)速。除了2個(gè)電機(jī)對(duì)應(yīng)的PWM信號(hào)調(diào)速之外,該模塊還需要4路邏輯輸入控制電機(jī)M1、M2轉(zhuǎn)向,模塊連接如圖2所示。因此將PWM信號(hào)輸入端接入單片機(jī)定時(shí)器輸出,邏輯輸入端接單片機(jī)配置為輸出模式的IO口即可實(shí)現(xiàn)對(duì)該模塊的控制。
圖2 電機(jī)驅(qū)動(dòng)模塊連接
2.4、紅外遙控
紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強(qiáng)、信息傳輸可靠、功耗低、成本低、易實(shí)現(xiàn)等顯著優(yōu)點(diǎn)。本設(shè)計(jì)使用的是NEC編碼方式的遙控器,紅外接收選擇HS0038紅外遙控器接收頭,接收頭有3個(gè)引腳分別為VCC、GND和DATA。VCC、GND分別接系統(tǒng)的正、負(fù)極,DATA接入單片機(jī)定時(shí)器的一路輸入捕獲通道即可對(duì)紅外遙控信號(hào)進(jìn)行解碼。
2.5、LCD顯示
選擇LCD12864作為顯示模塊。該顯示屏支持中、英文字符顯示,顯示信息量大并且支持串行通信,控制十分方便。由于STM32主頻高達(dá)72MHz,故在本設(shè)計(jì)中選擇串行控制LCD12864,在滿足速度要求的條件下節(jié)省了IO口。除了將電源引腳、背光引腳接入系統(tǒng)電源并將PSB引腳接地之外,用單片機(jī)的3個(gè)IO口操作CS、SID、SCLK3個(gè)引腳便可實(shí)現(xiàn)對(duì)該顯示模塊的控制。
3、軟件設(shè)計(jì)
3.1、主程序設(shè)計(jì)
上電后先進(jìn)行系統(tǒng)初始化,包括時(shí)鐘配置、延時(shí)函數(shù)初始化以及調(diào)試程序時(shí)所需串口的初始化。然后進(jìn)行定時(shí)器的初始化,本系統(tǒng)中定時(shí)器分別用于PWM信號(hào)的產(chǎn)生、超聲波測(cè)距判斷高電平時(shí)間和輸入捕獲實(shí)現(xiàn)紅外解碼,故需要啟用3個(gè)定時(shí)器并進(jìn)行相關(guān)配置。在進(jìn)行LCD12864初始化和紅外接收初始化之后就進(jìn)入WHILE(1)循環(huán),判斷當(dāng)前模式,若為自動(dòng)跟隨模式,就對(duì)2個(gè)超聲波測(cè)距模塊測(cè)得的距離數(shù)據(jù)進(jìn)行比例控制計(jì)算,并根據(jù)輸出量控制左右2個(gè)電機(jī)轉(zhuǎn)速;若為遙控模式,就根據(jù)紅外解碼得到的遙控器鍵值控制小車的運(yùn)動(dòng)。主程序流程如圖3所示。
圖3 主程序流程
3.2、測(cè)距程序設(shè)計(jì)
實(shí)現(xiàn)測(cè)距,要先給超聲波模塊TRIG端10μS以上的脈沖,模塊將自動(dòng)發(fā)送超聲波并接收返回信號(hào),測(cè)量高電平時(shí)間即可通過計(jì)算得到距離值。程序的關(guān)鍵是高電平時(shí)間測(cè)量,本設(shè)計(jì)將STM32接ECHO的IO口配置為外部中斷IO,上升沿觸發(fā)中斷后立即打開定時(shí)器,直到判斷ECHO為低電平時(shí)關(guān)閉定時(shí)器,此時(shí)定時(shí)器計(jì)數(shù)寄存器的值便可以轉(zhuǎn)換為高電平時(shí)間,進(jìn)而得到距離。
3.3、紅外遙控和小車運(yùn)動(dòng)控制
本設(shè)計(jì)使用的遙控器是NEC編碼方式。對(duì)于NEC碼,在接收頭收到的信號(hào)邏輯1應(yīng)該是560μS低加1680μS高,邏輯0應(yīng)該是560μS低加560μS高。NEC遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。根據(jù)NEC協(xié)議內(nèi)容可以用定時(shí)器的輸入捕獲模式完成紅外解碼,同時(shí)掃描解碼結(jié)果,得到鍵值。實(shí)際測(cè)得本設(shè)計(jì)所用到的按鍵鍵值如表1所示。
表1 鍵值
小車左右側(cè)分別有一個(gè)驅(qū)動(dòng)輪,利用電機(jī)驅(qū)動(dòng)模塊可以實(shí)現(xiàn)電機(jī)的正反轉(zhuǎn)以及速度調(diào)節(jié),2個(gè)電機(jī)配合即可實(shí)現(xiàn)小車各個(gè)方向的運(yùn)動(dòng)。小車右轉(zhuǎn)的程序如下:
VOIDMOVE_RIGHT(VOID)
{
IN1=1;
IN2=0;//IN1、IN2對(duì)應(yīng)左電機(jī),10正轉(zhuǎn)
IN3=0;
IN4=1;//IN3、IN4對(duì)應(yīng)右電機(jī),01反轉(zhuǎn)
PWM_LEfT(50);
PWM_RIGHT(50);
}
這段程序?qū)298N模塊的4路邏輯輸入進(jìn)行了配置并分別用占空比為50%的PWM信號(hào)控制左右電機(jī)。左電機(jī)正轉(zhuǎn)、右電機(jī)反轉(zhuǎn)體現(xiàn)在小車上就是小車原地向右旋轉(zhuǎn)。同理編寫MOVE_LEfT()、MOVE_fORWARD()、MOVE_BACKWARD()等幾個(gè)函數(shù)供外部調(diào)用。
3.4、比例控制程序設(shè)計(jì)
當(dāng)一個(gè)機(jī)器人被設(shè)計(jì)用來自動(dòng)維持某一數(shù)值,如距離、壓力等,它一般都包含一個(gè)控制系統(tǒng)。在本設(shè)計(jì)中該系統(tǒng)由傳感器和電機(jī)組成,可以通過處理器編程對(duì)傳感器的輸入做出決定,從而控制輸出。對(duì)小車采用閉環(huán)控制中最常用的比例控制算法來維持其與目標(biāo)物體之間的距離,比例控制框圖如圖4所示。
圖4 比例控制
以上控制環(huán)路將不斷調(diào)整電機(jī)轉(zhuǎn)速使實(shí)測(cè)距離趨近目標(biāo)距離,對(duì)左右電機(jī)用同樣的控制環(huán)路分別控制,將使小車能跟隨目標(biāo)物轉(zhuǎn)彎、旋轉(zhuǎn),提高系統(tǒng)可靠性。程序設(shè)計(jì)如下:
GET_DISTANCE();//測(cè)距
DuTyCyCLE_LEfT=(SETDISTANCE-LEfTDISTANCE)*
KP+CENTER;//左側(cè)運(yùn)算
DuTyCyCLE_RIGHT=(SETDISTANCE-RIGHTDISTANCE)*
KP+CENTER;//右側(cè)運(yùn)算
PWM_LEfT(DuTyCyCLE_LEfT);
PWM_RIGHT(DuTyCyCLE_RIGHT);//更新PWM信號(hào)占
空比
……
4、系統(tǒng)測(cè)試
在環(huán)境溫度一定的室內(nèi)對(duì)小車的跟隨性能進(jìn)行測(cè)試,分別在不同跟隨距離下觀察小車是否能準(zhǔn)確跟隨,并測(cè)量響應(yīng)時(shí)間。系統(tǒng)測(cè)試結(jié)果如表2所示。
表2系統(tǒng)測(cè)試
5、結(jié)論
以STM32為控制芯片,設(shè)計(jì)并制作了一種可遙控智能跟隨小車。經(jīng)測(cè)試,在空曠地該小車可自動(dòng)360°跟隨目標(biāo)物體,系統(tǒng)響應(yīng)快,保持距離準(zhǔn)確,同時(shí)小車可以由遙控器一鍵切換為遙控模式,使設(shè)計(jì)更為人性化。該小車成可實(shí)現(xiàn)多輛跟隨,可應(yīng)用于簡(jiǎn)單的工廠搬運(yùn)或者超市、家居等生活場(chǎng)合。