《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > MC9S08AC16控制的光電尋跡智能車
MC9S08AC16控制的光電尋跡智能車
摘要: 針對尋跡智能車進(jìn)行了軟硬件設(shè)計(jì),,采用3位freescale單片機(jī)MC9S08AC16作為控制核心,,使用激光傳感器提取賽道信息,采用低成本的紅外測速方案,,算法使用以PID為基礎(chǔ)的枚舉查表法,,做到了處理快速高效。整個設(shè)計(jì)既滿足了競速小車的響應(yīng)迅速的要求,,又是一種較低成本的設(shè)計(jì)方案,。
Abstract:
Key words :

   智能車競速比賽以及多種智能車的應(yīng)用場合中,,需要智能車沿著某條軌跡快速前進(jìn),使用普通紅外傳感器,、激光傳感器,、攝像頭識別均可有效提取路面軌道信息而解決這一問題,現(xiàn)在常見使用16位單片機(jī)作為控制核心,。普通紅外傳感器因?yàn)橐资芨蓴_,、前瞻距離短等缺點(diǎn)已經(jīng)較少使用,攝像頭有豐富的數(shù)據(jù)信息,,但是低成本8位單片機(jī)不能很好的處理這些信息,。激光傳感器成本適中,處理的信號便于8位單片機(jī)處理,,能夠有效的節(jié)省硬件成本,。針對尋跡智能車進(jìn)行了軟硬件設(shè)計(jì),采用3位freescale單片機(jī)MC9S08AC16作為控制核心,,使用激光傳感器提取賽道信息,,采用低成本的紅外測速方案,算法使用以PID為基礎(chǔ)的枚舉查表法,,做到了處理快速高效,。整個設(shè)計(jì)既滿足了競速小車的響應(yīng)迅速的要求,又是一種較低成本的設(shè)計(jì)方案,。

1 車模安裝

   智能車的控制采用的是前輪轉(zhuǎn)向,,B型車模采用的是國內(nèi)廠商生產(chǎn)的1:16的電動越野遙控車的底盤部分,突出特點(diǎn)為四輪驅(qū)動,,四輪獨(dú)立懸掛,。反射式光電傳感器在小車前方一字形簡單排布,14個發(fā)射,,7個接收,,一個發(fā)射帶兩個接收,傳感器的前瞻可以達(dá)到40cm以上,,兩個激光發(fā)射頭間距1.8cm,。傳感器單元安裝圖如圖1所示。

傳感器單元安裝圖

    系統(tǒng)選用紅外傳感器作為測速傳感器把紅外傳感器安裝在后輪上,,在后輪的內(nèi)壁貼上黑白等距的膠帶,,這樣子安裝就充分利用了空間,且完成了測速的要求,。紅外傳感器測速安裝圖如圖2所示,。車輪轉(zhuǎn)動時,紅外傳感器將會輸出脈沖電平,檢測脈沖頻率將得到小車速度,。這種測速方法無法達(dá)到光電解碼器的精度,,但是對于小車的速度處理并沒有太大影響,,而光電解碼器價格昂貴,,安裝在齒輪上,同等電源和PWM的輸出時,,小車速度會變慢,。

紅外傳感器測速安裝圖

2 硬件設(shè)計(jì)

    電源管理模塊采用7.2 V 2 000 mAh Ni-Cd蓄電池作為系統(tǒng)能源,并且通過降壓穩(wěn)壓電路分出6 V,,5 V分別給舵機(jī)和單片機(jī)等供電,;使用H橋及其相關(guān)器件做了直流電機(jī)驅(qū)動模塊;轉(zhuǎn)向伺服舵機(jī)控制智能車轉(zhuǎn)向,;用紅外傳感器測量模塊實(shí)時測量智能車車速,;采用激光傳感器作為賽道的檢測;系統(tǒng)充分使用了M9S8AC16CG單片機(jī)的外圍模塊,,具體使用到的模塊包括:定時器模塊,、PWM脈沖寬度調(diào)制模塊、中斷模塊,、I/O端口和實(shí)時時鐘模塊等,。

2.1 最小系統(tǒng)及主板

    系統(tǒng)采用的常規(guī)使用的最小系統(tǒng)板,以MC9S08AC16為核心的單片機(jī)系統(tǒng)的最小系統(tǒng)主要包括以下幾個部分:時鐘電路(外接的8 MHz的石英晶振),、電源電路(提供5 V直流電源),、復(fù)位電路、BDM接口(通過BDM頭向單片機(jī)下載和調(diào)試程序),。

主板上有組成本系統(tǒng)的主要電路,,具體包括:

    電源穩(wěn)壓電路 7.2 V的電池電源將會通過3個集成穩(wěn)壓電路處理成兩個5 V、一個約5~7.2 V的可調(diào)直流輸出,,其中一個5 V直流電源供單片機(jī)和相關(guān)外設(shè)工作,,另外一個5V直流單獨(dú)供激光傳感器工作,可調(diào)直流輸出供舵機(jī)工作,,采用這種電源設(shè)計(jì)方式,,可以提供所需不同大小的電源,同時在舵機(jī),、激光傳感器工作時不會影響單片機(jī)的工作電源,。

    接口電路 包括舵機(jī)接口、電機(jī)驅(qū)動接口,、電源接口,、調(diào)試用人機(jī)界面電路接口、單片機(jī)最小系統(tǒng)插座。

    電機(jī)驅(qū)動板作為一個獨(dú)立的單元制作的直流電機(jī)“H”型雙極性驅(qū)動電路,。

2.2 傳感器模塊

    采用14個發(fā)射,,7個接收,兩個發(fā)射一個接收為一組一字排開,。每次選中不相鄰兩個發(fā)射管發(fā)射,,由兩個接收譬分別接受。AC16單片機(jī)的IO端口進(jìn)行控制,,由74LD164驅(qū)動選擇要發(fā)射的傳感器,,由一個555芯片發(fā)出100 kHz的頻率震蕩波,激光管發(fā)光,。接受部分有一個相匹配的100 kHz的接收管接收返回的光,,7路接收管的接收信號直接進(jìn)單片機(jī)。傳感器原理如圖3所示,。

傳感器原理

3 軟件設(shè)計(jì)

3.1 軟件設(shè)計(jì)概要

     系統(tǒng)的主函數(shù)將執(zhí)行圖4所示流程圖對應(yīng)的程序,。調(diào)試程序可以完成的功能有:檢驗(yàn)傳感器故障、調(diào)試速度控制參數(shù),、舵機(jī)中點(diǎn)設(shè)置,、舵機(jī)轉(zhuǎn)角參數(shù)控制等。傳感器數(shù)據(jù)的讀取特指激光傳感器的讀取,,在定時器程序中,,每5 ms開始新的一輪激光掃描,每125μs更換1組激光發(fā)射管,,每組發(fā)射兩個不相鄰的激光信號,,所有激光發(fā)射5遍之后,3次以上檢測到賽道軌跡信號才確認(rèn)有效,,此時才會設(shè)置傳感器數(shù)據(jù)讀取完成標(biāo)志,,所以系統(tǒng)每5 ms進(jìn)入后續(xù)程序執(zhí)行。小車舵機(jī)轉(zhuǎn)向控制,、速度控制稍后詳細(xì)論述,。對于小車馬達(dá)速度控制則為閉環(huán)控制,采用bang-bang控制與P算法控制相結(jié)合,,小車的速度讀取采用了輸入捕捉功能完成,,車子運(yùn)動時,車輪轉(zhuǎn)動,,每轉(zhuǎn)過1/5圈,,紅外傳感器就會輸出一個完整的脈沖周期,通過讀取紅外傳感器的輸出脈沖頻率確定小車的速度,。

流程圖

3.2 小車行駛狀態(tài)確定

    該系統(tǒng)采用的賽道為寬為50 cm,,中心線為25 mm的賽道,,傳感器在黑色上讀取為1,在白色上讀取為0,,賽道外地板使用傳感器有可能讀1,,也有可能讀0。激光傳感器終采用“一”字型排布方式,,相鄰的兩個傳感器的距離為20 mm,。賽道如圖5所示。

賽道

    傳感器在賽道上可能的狀態(tài)可分為:在普通的賽道處,、在十字交叉線處,,還有跑出賽道,。系統(tǒng)定義了變量Car_State來代表小車當(dāng)前的狀態(tài),,可能會出現(xiàn)的情況如下:

    1)當(dāng)小車在賽道上時,將會有1到2個傳感器輸出高電平,,如果有兩個傳感器同時打到黑點(diǎn),,而兩個傳感器并不是相鄰的則認(rèn)為是干擾信號,不作特別處理,,其他按照如圖6的傳感器排布方法計(jì)算坐標(biāo)從左向右依次為-13到13,,此時Car_State計(jì)為傳感器打到的坐標(biāo);

傳感器排布方法

2)打到10個以上黑點(diǎn)計(jì)為交叉線,,Car_State計(jì)為20,;

3)沒有打到黑點(diǎn)則認(rèn)為小車即將跑出賽道,Car_State計(jì)為30,;

4)另外還有一種情況傳感器已經(jīng)打到了賽道之外,,而打到賽道外的傳感器可能輸出高電平,也有可能輸出低電平,,此時有可能讀出的情況可能會判定為第一種,,如圖5示意,此時小車本應(yīng)繼續(xù)左拐,,但是判讀位第一種情況,,就可能右拐,這種情況的判定就不能僅僅依靠讀傳感器來判定,,還應(yīng)考慮小車前面行進(jìn)的趨勢加以判別,。因?yàn)榇朔N情況一般只出現(xiàn)在小車轉(zhuǎn)大彎時,由于轉(zhuǎn)角不夠當(dāng)小車的傳感器會打到相反方向的賽道外,,所以左轉(zhuǎn)或者右轉(zhuǎn)的角度超過某一特定值時(如60°),,應(yīng)當(dāng)屏蔽另一側(cè)的傳感器,只讀轉(zhuǎn)向該側(cè)的傳感器,,如圖5小車現(xiàn)轉(zhuǎn)左側(cè)大彎,,右側(cè)傳感器檢測到錯誤黑點(diǎn),此時只要將右側(cè)的7個傳感器屏蔽,只讀左側(cè)傳感器數(shù)值即可,,此種情況Car_State計(jì)為40,。

3.3 舵機(jī)控制

    小車在賽道上:Car_State為-13到13間的整數(shù),由于光電管數(shù)量少,,造成傳感器返回值離散度過大,,不適合進(jìn)行回控,故應(yīng)加快采樣速率,,進(jìn)行過采樣,,再進(jìn)行一階迭代濾波:

PVal=((Car_State×1 000)+(Pvalx10))/11;

小車行使5 ms后位置的偏差進(jìn)行迭代濾波:

Err=((PVal-PVal1)+(Errx10))/11,;//兩次位置偏差

P_Offset=Err/P_err,; //負(fù)值左偏 正值右偏

if(P_Offset<-5)P_Offset=-5;//左偏最大偏離為-5個單位

if(P_Offset>5)P_Offset=5,; //右偏最大偏離為5個單位

    將Err進(jìn)行采樣劃分得到P_Offset變量,,P_Offset取值為-5到5的整數(shù),負(fù)數(shù)表示向左偏,,正數(shù)表示向右偏,,絕對值越大代表偏轉(zhuǎn)角度越大;采樣分辨率為可調(diào)參數(shù)P_err,,P_err偏大時,,小車反應(yīng)會較為遲鈍,P_err偏小時,,小車反應(yīng)會較為靈敏,,容易出現(xiàn)很小偏差就會引起小車較大的轉(zhuǎn)向。

    按照小車當(dāng)前的位置以及P_Offset組織數(shù)據(jù)表Angle_Table[],,該表共有27行11列,,第n行m列元素j,表示小車位置Car_State為n-13偏差P_Offset為m-5時,,j的值在-10到10之間,,負(fù)值代表向左轉(zhuǎn),正值代表向右轉(zhuǎn),,小車舵機(jī)應(yīng)打的角度為jxAngle_C,,可調(diào)參數(shù)Angle_C可以根據(jù)賽道狀況舵機(jī)反應(yīng)靈敏度等調(diào)節(jié),其調(diào)節(jié)在調(diào)試程序中完成,,其值愈大,,同等情況下轉(zhuǎn)角越大。

    舵機(jī)的控制就是通過查數(shù)據(jù)表Angle_Table來實(shí)現(xiàn),,而不是通過公式求解,,這種方法比較適用于8位單片機(jī),,通過檢索表可以達(dá)到運(yùn)算所達(dá)不到的系統(tǒng)速度。

    小車在交叉線時Car_State=20不更改舵機(jī)的控制,;當(dāng)小車的傳感器打不到黑點(diǎn),,即將跑出賽道活著已經(jīng)打到賽道外時Car_State=30或40,此時按照小車轉(zhuǎn)的方向,,將舵機(jī)設(shè)置為最大轉(zhuǎn)角,,以達(dá)到盡快找到賽道黑線的目的。

     舵機(jī)的輸出PWM采用5 ms周期,,與小車傳感器采樣的頻率一致,。

4 試驗(yàn)結(jié)果及總結(jié)

   通過上述方法,小車取得了比較好的試驗(yàn)結(jié)果,,在最小曲率半徑不小于50 cm的賽道上,,小車可以取得每秒2 m以上的速度。其速度比采用16位單片機(jī)的系統(tǒng)沒有很大差異,。要特別注意的是,,運(yùn)算時采用不同數(shù)據(jù)類型的變量將會帶來不同的效果,,經(jīng)實(shí)驗(yàn)證明,,如果可以使用字節(jié)存儲類型的變量作雙字節(jié)變量存儲,將會嚴(yán)重影響小車的運(yùn)行情況,,這是由單片機(jī)編譯環(huán)境進(jìn)行數(shù)學(xué)運(yùn)算引起的,,應(yīng)當(dāng)盡量避免不恰當(dāng)?shù)淖兞慷x及算數(shù)運(yùn)算。

   相較于當(dāng)前流行的16位單片機(jī)控制的雙舵機(jī)智能車,,該系統(tǒng)在硬件上成本較低,,而軟件也根據(jù)8位單片機(jī)的特點(diǎn),避開了較為復(fù)雜的運(yùn)算,,采用了查表的方式,,只在小車位置及偏差運(yùn)算以及速度P算法中涉及了少量的數(shù)學(xué)運(yùn)算,以此達(dá)到系統(tǒng)的快速響應(yīng),。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。