低成本光電尋跡智能車(chē)設計與實(shí)現
智能車(chē)競速比賽以及多種智能車(chē)的應用場(chǎng)合中,需要智能車(chē)沿著(zhù)某條軌跡快速前進(jìn),使用普通紅外傳感器、激光傳感器、攝像頭識別均可有效提取路面軌道信息而解決這一問(wèn)題,現在常見(jiàn)使用16位單片機作為控制核心。普通紅外傳感器因為易受干擾、前瞻距離短等缺點(diǎn)已經(jīng)較少使用,攝像頭有豐富的數據信息,但是低成本8位單片機不能很好的處理這些信息。激光傳感器成本適中,處理的信號便于8位單片機處理,能夠有效的節省硬件成本。針對尋跡智能車(chē)進(jìn)行了軟硬件設計,采用3位freescale單片機MC9S08AC16作為控制核心,使用激光傳感器提取賽道信息,采用低成本的紅外測速方案,算法使用以PID為基礎的枚舉查表法,做到了處理快速高效。整個(gè)設計既滿(mǎn)足了競速小車(chē)的響應迅速的要求,又是一種較低成本的設計方案。
1 車(chē)模安裝
智能車(chē)的控制采用的是前輪轉向,B型車(chē)模采用的是國內廠(chǎng)商生產(chǎn)的1:16的電動(dòng)越野遙控車(chē)的底盤(pán)部分,突出特點(diǎn)為四輪驅動(dòng),四輪獨立懸掛。反射式光電傳感器在小車(chē)前方一字形簡(jiǎn)單排布,14個(gè)發(fā)射,7個(gè)接收,一個(gè)發(fā)射帶兩個(gè)接收,傳感器的前瞻可以達到40cm以上,兩個(gè)激光發(fā)射頭間距1.8cm.傳感器單元安裝圖如圖1所示。
圖1 改裝后智能車(chē)
系統選用紅外傳感器作為測速傳感器把紅外傳感器安裝在后輪上,在后輪的內壁貼上黑白等距的膠帶,這樣子安裝就充分利用了空間,且完成了測速的要求。紅外傳感器測速安裝圖如圖2所示。車(chē)輪轉動(dòng)時(shí),紅外傳感器將會(huì )輸出脈沖電平,檢測脈沖頻率將得到小車(chē)速度。這種測速方法無(wú)法達到光電解碼器的精度,但是對于小車(chē)的速度處理并沒(méi)有太大影響,而光電解碼器價(jià)格昂貴,安裝在齒輪上,同等電源和PWM的輸出時(shí),小車(chē)速度會(huì )變慢。
圖2 紅外傳感器測速的安裝
2 硬件設計
電源管理模塊采用7.2 V 2 000 mAh Ni-Cd蓄電池作為系統能源,并且通過(guò)降壓穩壓電路分出6 V,5 V分別給舵機和單片機等供電;使用H橋及其相關(guān)器件做了直流電機驅動(dòng)模塊;轉向伺服舵機控制智能車(chē)轉向;用紅外傳感器測量模塊實(shí)時(shí)測量智能車(chē)車(chē)速;采用激光傳感器作為賽道的檢測;系統充分使用了M9S8AC16CG單片機的外圍模塊,具體使用到的模塊包括:定時(shí)器模塊、PWM脈沖寬度調制模塊、中斷模塊、I/O端口和實(shí)時(shí)時(shí)鐘模塊等。
2.1 最小系統及主板
系統采用的常規使用的最小系統板,以MC9S08AC16為核心的單片機系統的最小系統主要包括以下幾個(gè)部分:時(shí)鐘電路(外接的8 MHz的石英晶振)、電源電路(提供5 V直流電源)、復位電路、BDM接口(通過(guò)BDM頭向單片機下載和調試程序)。
主板上有組成本系統的主要電路,具體包括:
電源穩壓電路 7.2 V的電池電源將會(huì )通過(guò)3個(gè)集成穩壓電路處理成兩個(gè)5 V、一個(gè)約5~7.2 V的可調直流輸出,其中一個(gè)5 V直流電源供單片機和相關(guān)外設工作,另外一個(gè)5V直流單獨供激光傳感器工作,可調直流輸出供舵機工作,采用這種電源設計方式,可以提供所需不同大小的電源,同時(shí)在舵機、激光傳感器工作時(shí)不會(huì )影響單片機的工作電源。
接口電路 包括舵機接口、電機驅動(dòng)接口、電源接口、調試用人機界面電路接口、單片機最小系統插座。
電機驅動(dòng)板作為一個(gè)獨立的單元制作的直流電機“H”型雙極性驅動(dòng)電路。
2.2 傳感器模塊
采用14個(gè)發(fā)射,7個(gè)接收,兩個(gè)發(fā)射一個(gè)接收為一組一字排開(kāi)。每次選中不相鄰兩個(gè)發(fā)射管發(fā)射,由兩個(gè)接收譬分別接受。AC16單片機的IO端口進(jìn)行控制,由74LD164驅動(dòng)選擇要發(fā)射的傳感器,由一個(gè)555芯片發(fā)出100 kHz的頻率震蕩波,激光管發(fā)光。接受部分有一個(gè)相匹配的100 kHz的接收管接收返回的光,7路接收管的接收信號直接進(jìn)單片機。傳感器原理如圖3所示。
圖3 激光傳感器原理圖
3 軟件設計
3.1 軟件設計概要
系統的主函數將執行圖4所示流程圖對應的程序。調試程序可以完成的功能有:檢驗傳感器故障、調試速度控制參數、舵機中點(diǎn)設置、舵機轉角參數控制等。傳感器數據的讀取特指激光傳感器的讀取,在定時(shí)器程序中,每5 ms開(kāi)始新的一輪激光掃描,每125μs更換1組激光發(fā)射管,每組發(fā)射兩個(gè)不相鄰的激光信號,所有激光發(fā)射5遍之后,3次以上檢測到賽道軌跡信號才確認有效,此時(shí)才會(huì )設置傳感器數據讀取完成標志,所以系統每5 ms進(jìn)入后續程序執行。小車(chē)舵機轉向控制、速度控制稍后詳細論述。對于小車(chē)馬達速度控制則為閉環(huán)控制,采用bang-bang控制與P算法控制相結合,小車(chē)的速度讀取采用了輸入捕捉功能完成,車(chē)子運動(dòng)時(shí),車(chē)輪轉動(dòng),每轉過(guò)1/5圈,紅外傳感器就會(huì )輸出一個(gè)完整的脈沖周期,通過(guò)讀取紅外傳感器的輸出脈沖頻率確定小車(chē)的速度。
圖4 軟件設計流程圖
3.2 小車(chē)行駛狀態(tài)確定
該系統采用的賽道為寬為50 cm,中心線(xiàn)為25 mm的賽道,傳感器在黑色上讀取為1,在白色上讀取為0,賽道外地板使用傳感器有可能讀1,也有可能讀0.激光傳感器終采用“一”字型排布方式,相鄰的兩個(gè)傳感器的距離為20 mm.賽道如圖5所示。
圖5 賽道示意
傳感器在賽道上可能的狀態(tài)可分為:在普通的賽道處、在十字交叉線(xiàn)處,還有跑出賽道。系統定義了變量Car_State來(lái)代表小車(chē)當前的狀態(tài),可能會(huì )出現的情況如下:
1)當小車(chē)在賽道上時(shí),將會(huì )有1到2個(gè)傳感器輸出高電平,如果有兩個(gè)傳感器同時(shí)打到黑點(diǎn),而兩個(gè)傳感器并不是相鄰的則認為是干擾信號,不作特別處理,其他按照如圖6的傳感器排布方法計算坐標從左向右依次為-13到13,此時(shí)Car_State計為傳感器打到的坐標;
2)打到10個(gè)以上黑點(diǎn)計為交叉線(xiàn),Car_State計為20;
3)沒(méi)有打到黑點(diǎn)則認為小車(chē)即將跑出賽道,Car_State計為30;
4)另外還有一種情況傳感器已經(jīng)打到了賽道之外,而打到賽道外的傳感器可能輸出高電平,也有可能輸出低電平,此時(shí)有可能讀出的情況可能會(huì )判定為第一種,如圖5示意,此時(shí)小車(chē)本應繼續左拐,但是判讀位第一種情況,就可能右拐,這種情況的判定就不能僅僅依靠讀傳感器來(lái)判定,還應考慮小車(chē)前面行進(jìn)的趨勢加以判別。因為此種情況一般只出現在小車(chē)轉大彎時(shí),由于轉角不夠當小車(chē)的傳感器會(huì )打到相反方向的賽道外,所以左轉或者右轉的角度超過(guò)某一特定值時(shí)(如60°),應當屏蔽另一側的傳感器,只讀轉向該側的傳感器,如圖5小車(chē)現轉左側大彎,右側傳感器檢測到錯誤黑點(diǎn),此時(shí)只要將右側的7個(gè)傳感器屏蔽,只讀左側傳感器數值即可,此種情況Car_State計為40。
圖6 傳感器排布
3.3 舵機控制
小車(chē)在賽道上:Car_State為-13到13間的整數,由于光電管數量少,造成傳感器返回值離散度過(guò)大,不適合進(jìn)行回控,故應加快采樣速率,進(jìn)行過(guò)采樣,再進(jìn)行一階迭代濾波:
PVal=((Car_State×1 000)+(Pvalx10))/11;
小車(chē)行使5 ms后位置的偏差進(jìn)行迭代濾波:
Err=((PVal-PVal1)+(Errx10))/11;//兩次位置偏差
P_Offset=Err/P_err; //負值左偏 正值右偏
if(P_Offset-5)P_Offset=-5; //左偏最大偏離為-5個(gè)單位
評論