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





