本文是根據第三屆全國大學生“飛思卡爾”杯智能汽車大賽要求設計自主識別道路的智能車。整個系統(tǒng)采用了組委會提供的16位單片機mc9s12dg128為核心,模型車本身帶有差速器和后輪驅動,需要設計完成基于單片機的自動控制系統(tǒng)使得模型車在封閉的跑道上自主循線運行。
車模與控制器構成一個自動控制系統(tǒng),如圖1,系統(tǒng)硬件以單片機為核心,配有傳感器、執(zhí)行機構以及它們的驅動電路,而信息處理與控制算法由單片機軟件完成[1]。系統(tǒng)設計要求單片機把路徑的迅速判斷、相應的轉向伺服電機控制以及直流驅動電機的控制精密的結合在一起。
智能車的設計是在保證模型車可靠運行的前提下,以電路設計簡潔、車體靈活性高為原則。設計的兩大重點,一是光電傳感器的布局和電路設計,一是循線控制算法的設計。
本文第二節(jié)主要介紹了光電傳感器的電路設計和布局,這是信號采集的關鍵,相當于智能車的“眼睛”;第三節(jié)主要介紹了循線控制算法,這是控制的核心,相當于智能車的“頭腦”;最后在第四節(jié)對智能車的硬件、軟件設計及實驗情況進行了大體說明。
光電傳感器
光電傳感器的選擇及電路設計
光電傳感器位于智能車的最前方,起到預先判斷路徑的作用。其發(fā)射的光對白色和黑色有不同的反射率,因此能得到不同的電壓值,采進單片機后通過一定的算法比較電壓來判斷黑線的位置,從而控制舵機的轉動。這種方法易于實現,響應速度快,實時性好,成本低。
本文選用性價比基本適合的反射式紅外傳感器tcrt5000。紅外光電傳感器電路的設計形式多種多樣,由于本文算法中采用的是傳感器陣列經驗判斷方法,為了控制簡便采用數字量輸出傳感器電路,如圖2所示。
光電管采用脈沖調制式發(fā)光,即vo是震蕩電路產生的脈沖電壓,這樣易濾除外界干擾。雖然電路相對復雜,但足以保證模型車的穩(wěn)定行駛[3]。
光電傳感器布局的研究
光電管陣列的布局直接影響智能車的循線效果。一般來說,典型的布局有“一”字形布局和“w”形布局兩種。
所謂“一”字形布局,就是把多個傳感器按照“一”字排開。這種傳感器布局方式最常見,算法在理論上易于實現。其不足之處在于:對賽道的曲率幾乎沒有任何預測功能。因此一般不采用這種布局。
而“w”形布局,是把多個傳感器按照“w”形排列。“w”形布局由于傳感器分布在兩排,使得智能車對彎道有一定的預測功能,這種預測功能特別體現在直道進入彎道時刻。后一排傳感器仍在直道時,前一排傳感器已經進入彎道。而不足之處是增加了控制算法的復雜程度,判斷舵機的旋轉方向時,往往需要上一次的檢測數據。經驗判斷的可能性也隨著傳感器數量的增加而增加。
光電傳感器布局仿真
經多次仿真實驗,最終確定了傳感器的布局和數量。采用如圖3所示的“w”形布局,一共有13個傳感器,前排8個,后排5個,前后兩排間距為3.5cm。設置這個間距,使其對賽道有一定預測功能。具體的布局及仿真效果如圖4所示。
循線控制算法
本文采用經驗反饋控制,即在普通經驗控制的基礎上,加入pid控制的思想,引入比例、積分、微分三個控制常數,實施反饋,并采用積分分離的控制方法。
循線控制算法是利用前后兩排傳感器綜合檢測信號來推理得到模型車的精確轉向及具體的車速。方向判斷的方法是:如圖3,首先判斷下排5個傳感器的情況,假設s3處在黑線位置,再觀察上排8個傳感器,此時s3將上排傳感器分為左右兩邊,由于相鄰兩個傳感器間距離稍大于黑線寬度,因此任何時刻只能有2個傳感器同時檢測到黑線,這樣一來根據分析上下兩排傳感器信號就可以基本判斷出模型車的轉向情況。例如,某一時刻s3和s8檢測到黑線,就可大致判斷模型車應向右拐,并根據兩個傳感器的連線和豎直方向的夾角可判斷舵機的轉向和大致角度。
但同時還應注意,當車模進入左側彎道時,也可能出現s3和s8共同檢測到黑線的情況,這種情況下就要檢查上一時刻的傳感器信號,就是檢測s4||s13的情況,若s4||s13結果為1,則認為車模應左拐,若s4||s13結果為0則應右拐。一次方向判斷的流程如圖5所示。
在程序中建立兩個數組,一個存儲每次檢測到的信號,另一個存儲實施控制后的當前信號作為歷史數據。加入這種帶歷史紀錄判斷的思想后,使得控制更為精確[4]。
除了以上判斷法則之外,還有兩種情況需要考慮。即只有一個傳感器檢測到黑線的情況以及交叉賽道的情況。對于只有一個傳感器檢測到黑線的情況,同樣需要檢查上一時刻的傳感器信號,例如,某一時刻只有s6檢測到黑線,若上一時刻s5檢測到黑線,則車模左轉,若上一時刻s7檢測到黑線,則車模右轉。
對于交叉賽道的情況,則利用一種“濾波”的思想將其“濾”除掉。遇到交叉賽道時,必然會出現同一排幾個傳感器同時檢測到黑線的情況,此時就給模型車一個命令使其直線前進,將交叉賽道排除掉。
這就是本系統(tǒng)基于經驗邏輯判斷的循線控制算法,在此基礎上通過不斷實驗調整各個參數可達到較好的控制效果。
實驗結果
硬件設計
電機驅動電路
電機驅動采用mc33886作為驅動芯片,其原理如圖6所示。通過向in1、in2口送出pwm波來控制電機的正轉和反轉,正轉為智能車加速,反轉減速。改變pwm波的占空比,可控制電機的轉動速率[5]。
速度檢測電路
本文采用增量式光電編碼器來測量車速,其輸出脈沖的頻率正比于轉速,可以通過測量單位周期內脈沖個數或者脈沖周期得到脈沖的頻率,具有較高的精度。
電源變換電路
智能車系統(tǒng)配有7.2v的蓄電池,可直接為直流電機供電。單片機、光電傳感器和光電編碼器所需電壓為5v,伺服舵機為6v。這些電壓則由7.2v蓄電池調節(jié)得來。
單片機和光電編碼器通過穩(wěn)壓芯片7805穩(wěn)壓輸出5v電壓供電。光電傳感器數目多、功耗大,對電源穩(wěn)定性要求更高,故單獨采用效率較高的芯片lm2575對它供電。給舵機供電的芯片選用的是低壓差可調輸出三端線性穩(wěn)壓器lm1117,片上提供安全操作保護等功能。
軟件設計
軟件設計分模塊實現,其中主程序包括時鐘初始化、i/o口初始化、舵機電機初始化、采集信號和控制算法,程序流程見圖7。
實驗結果及其分析
程序開發(fā)過程中完全采用了組委會提供的s12核心開發(fā)板,它是由mc9s12dg128單片機構成的最小系統(tǒng)。mc9s12dg128屬于hcs12系列單片機,是motorola推出的高性能16位微控制器。它能夠提供32-512kb的第三代快閃嵌入式存儲器,總線速度可達50mhz,外圍時鐘可達25mhz。還具備編碼效益、片上糾錯能力,并與mc68hc11和mc68hc12結構編碼向上兼容。mc9s12dg128單片機具有112個引腳,其中與cpu相關的引腳都是兼容的。
s12開發(fā)板上有構成最小系統(tǒng)的復位電路、晶體振蕩器及時鐘電路,串行接口的rs-232驅動電路,+5v電源插座。單片機中已經寫入了開發(fā)的監(jiān)控程序。8個小燈用于調試應用系統(tǒng)。單片機的所有i/o端口都通過兩個64芯的歐式插頭引出。
硬件調試時,分別對各模塊功能進行測試,重點調節(jié)光電傳感器,它感知黑白線時輸出信號應不同,感知白線時經過比較器輸出為低電平,感知黑線時輸出為高電平。軟件調試時,可利用bdm開發(fā)工具,顯示單片機運行時其內部存儲器中的數據。
通過硬件軟件的聯合調試和實驗,出現了一些問題,但通過對程序的完善和車模的重新裝配后效果大大改善。最終車??稍谂艿郎涎€運行,但仍存在功耗較大,轉向延時等問題。
結語
本文基于自動控制原理,利用探路模塊的道路偏差信號使智能車實現尋跡跟蹤,利用pwm技術控制電機的轉速和舵機的轉向。
本文重點介紹了光電傳感器的排布“w”形布局以及循線控制算法,它們是保證智能車循線運行的關鍵。“w”形布局使智能車具備了道路預測能力,而循線控制算法使得車體轉向快速正確。
通過對智能車仿真和實驗表明,整個系統(tǒng)的方案可行,系統(tǒng)的控制策略和軟硬件基本合理??刂品矫?,雖然經典的pid控制在電機調速方面有良好的控制效果,但由于車模的動力學模型因車況不同而變化等原因,使得pid控制效果受到影響,以后可考慮采用模糊控制,使算法更加智能化,系統(tǒng)的適應性更強。