張 霖,張 桐
1.中南大學,湖南長沙 410086
2.廈門大學嘉庚學院,福建廈門 363105
汽車是改變人類生活的一項重要發明,其產生和發展已有百年,從福特的福特汽車到現在的奔馳,汽車的每一次進步都標志著整個人類社會的巨大飛躍。時至如今,智能化已成為時代的潮流,所以開發車輛自動駕駛系統也成為大勢所趨。
在本文中,設計了一種能夠在鋪有引導線的跑道上自動循跡的小車,小車的控制核心采用荷蘭NXP 公司生產的LPC2131 芯片,并采用電磁引導的方式進行循跡,即通過在跑道中心線鋪設一條通有200mA、20KHz 電流的導線產生磁場來進行導航,并在賽車后輪軸傳動齒輪上加裝脈沖編碼器來測量后輪轉速。鑒于傳統的“裸機編程”形式實時性較差且不穩定,故而本設計中將實施操作系統μC/OS-II 應用到車輛的自動控制之中,并且應用了PID 控制算法以期獲得更好的結果。
智能車的設計由采用ARM7 核的LPC2131 芯片作為核心控制器.如圖1 所示,系統硬件分為五個模塊:核心控制單元、路徑識別、微控制器、電機驅動、電源管理和人機交互等模塊。其中,系統模塊圖如圖1 所示。

圖1 系統整體模塊圖
核心控制模塊采用LPC2131,其特點是片內資源豐富,有PWM、AD、SPI、I2C、CAN 等多種通信接口,且封裝小、功耗低,適合智能車系統的使用。系統引腳的分配如下:P0[27:30]為AD 輸入模塊,接收從傳感器得到的信號,P0.21、P0.9 為PWM 信號輸出口,用于控制智能車的轉向和行駛,P0.10 口作為智能車測速輸入口,用于接收脈沖編碼器采集到的信號。
智能車供電采用7.2V 鋰電池供電,其中,小車電機直接由鋰電池通過電機驅動電路供電,而其他部分則經過降壓和穩壓后供電。賽車的電機驅動電路必須和核心控制電路分離,因為在電機運行的時候會產生很大的電流,不過不合控制電路分開的話,過大的電流通過地線回流會損壞控制芯片。
核心控制電路中,由LM7806 穩壓芯片將電源電壓轉化至6V 供舵機使用,由LM2940 將電源電壓穩至5V 供除LPC2131外的集成電路芯片使用,由LM1117 將電源電壓穩至3.3V 供LPC2131 芯片使用。
在路徑檢測上,使用通有100mA,20kHz 的導線作為引導線,根據麥克斯韋理論,變換的電場會產生變化的磁場,所以智能車可以通過處理由安裝在賽車前部的4 個電感在切割磁感線時產生的感應電動勢來判斷當前位置。

圖2 賽道周圍磁場分布

圖3 長直導線磁場分析
由于賽道寬度遠小于電磁波波長,故而賽道可視為緩變磁場。所以,我們可以使用分析靜態電磁場的方法來分析導線附近的電磁場分布,進而檢測位置。根據畢奧-薩伐爾定律可知:在通有恒定電流I,長度為 L 的通電直導線周圍存在電磁場,距離導線r 處P 點 (如圖3 所示)電磁感應強度為:

可得:

由于賽道的導線很長,可近似視為無限長,故而,上式中θ1=0,θ2=π。可得:

如圖4 所示:

圖 4 無限長直導線電磁分析
根據電感線圈在磁場中感應電動勢計算公式:

可知,在傳感器靠近電磁線的地方,傳感器獲得的電壓信號越大,反之則越小,如圖5 所示。

圖5 感應電動勢E 與距離x 之間的關系
由此,我們可以較容易地獲取賽道中心線的位置。首先,對所有的傳感獲得的數據進行處理,找出得到最大數據傳感器的位置,實現對賽道信息的粗定位,然后再以最大值傳感器位置為中心,借助其左右傳感器獲取的信號的大小來確定是偏左還是偏右,以實現更加精確的定位。
經過多次的研究和實驗發現, 運用分段處理和歸一化運算可以有效的解決上述問題。分段處理就是把相鄰傳感器之間的中心位置作為運算的分界點,分別處理各段的數據信息;歸一化運算就是將得到的數據與曲線最大值之間的比值來計位置偏移量,這樣將比值控制在0-1 之間,用一個常量乘以這個比值就可以相應的位置。這樣獲得的比例位置關系非常的接近直線關系,可以近似為一次函數來處理。其仿真關系如圖 6 所示。

圖6 分段處理和歸一化運算
電機驅動模塊包括兩個部分:電機驅動部分和測速部分。
電機驅動部分采用了全橋驅動的原理,如圖7 所示,通過4 個組成H 狀的MOS 管的通斷來控制電機的轉速和正反轉。

圖7 H 橋驅動原理圖
在具體實現上,電源模塊采用了兩塊BTS7960 構成一個全橋驅動電路。BTS7960 是一塊集成的電機驅動芯片,每塊BTS7960 芯片內部集成了一個半橋電路,將兩個BTS7960 連接,便能夠組成一個全橋驅動電路。
測速部分使用了光電編碼器來實現。光電編碼器內部有一與電動機同軸轉動的光柵,有一發光二級管照射在光柵之上,當光柵隨電機轉動的時候,發光二級管的光線透過光柵周期性的照射到另一側的光電二極管上,便產生脈沖信號,經輸出裝置傳送至微處理器中,系統通過對脈沖進行計數來確定當前電機轉速。
賽道電源旨在驅動賽道中心線下鋪設的0.1mm~0.3mm直徑的漆包線,如圖8 所示,其頻率范圍為頻率范圍:20K±2KHz,其電流范圍為電流范圍:50mA~150mA。

圖8 線圈驅動電壓與電流示意圖
賽道電源模塊由振蕩電路、功率輸出、恒流控制電路和電源4 個部分組成,如圖9 所示。其中,振蕩電路由555 時基電路組成,用于產生脈沖信號;功率輸出電路由L298 電機驅動芯片組成,用于提高輸出信號的功率使之能夠使用;恒流電路運用三極管恒流特性,將輸出電流穩定在50mA ~150mA 范圍內。
智能車的控制采用PID 控制理論。PID 控制分為3 個部分:即比例(P)控制 、積分(I)控制和微分(D)控制。比例控制是一種最簡單的控制方式。其控制器的輸出與輸入誤差信號成比例關系。在積分控制中,控制器的輸出與輸入誤差信號的積分成正比關系,這樣可以通過積分項的增加而消除穩態誤差。在微分控制中,控制器的輸出與輸入誤差信號的微分(即誤差的變化率)成正比關系,這樣就可以通過當前和以前的誤差預測誤差變化的趨勢。
由于智能車電機的供電直接由7.2V 電池完成,而電池的電量卻是時時刻刻在下降,所以選用絕對的PWM 占空比來控制電機轉速時不現實的。只能通過每次輸出占空比的增量來控制電機,才能保證控制的有效性。
由以上分析可知,智能車的速度控制需要采用增量式的PID 控制,即:

其中e(k)即為每次速度檢測所得速度值與偏差值之間的誤差。
但是,當此控制系統遇到較大的偏差時,由于PID 算法固有的特性,就會造成魯棒性不足的問題。
所謂魯棒性,魯棒是Robust 的音譯,也就是健壯和強壯的意思,指標稱系統所具有的某一種性能品質對于具有不確定性的系統集的所有成員均成立,如果所關心的是系統的穩定性,那么就稱該系統具有魯棒穩定性;如果所關心的是用干擾抑制性能或用其他性能準則來描述的品質,那么就稱該系統具有魯棒性能。
為了彌補這一缺點,本設計在算法設計中為PID 的調節設定了邊界,當系統誤差過大的時候,便直接輸出最大或最小值以期快速改變減小誤差,防止超調。
圖9 為智能車速度控制流程圖。

圖9 賽道電源模塊圖
智能車的轉向主要由控制舵機完成,而舵機會嚴格地按照單片機輸出的PWM 信號占空比來轉向相應的角度,因此,不同于電機,舵機可以使用PWM 占空比的絕對值來控制。
而舵機是一個延遲很大的機械機構,如果使用PID 算法中的I 項會造成很大的機械延遲,并且I 項對于過去數據的依存度很高,累加運算量大,如果中間出現故障,會極大地影響智能車轉向的控制,所以,在舵機控制中只使用了PD 控制,去掉了I 項,即:

與電機相同,舵機控制中也存在著魯棒性的問題,所以,也要為PID 的調節設定了邊界,當系統誤差過大的時候,便直接輸出最大或最小值以期快速改變減小誤差,防止超調。

圖10 速度控制流程圖
舵機控制流程圖如圖11 所示。

圖11 轉向控制流程圖
在本設計中,選用了嵌入式實時操作系統μC/OS-II。μC/OS-II 是由Labrosse 先生編寫的一個開放式內核,最主要的特點就是內核占用空間小,源碼公開。μC/OS-II 是一個占先式的內核,即已經準備就緒的高優先級任務可以剝奪正在運行的低優先級任務的CPU 使用權。這個特點使得它的實時性比非占先式的內核要好。μC/OS-II 和大家所熟知的Linux 等分時操作系統不同,它不支持時間片輪轉法。μC/OS-II 是一個基于優先級的實時操作系統,每個任務的優先級必須不同,分析它的源碼會發現,μC/OS-II 把任務的優先級當做任務的標識來使用,如果優先級相同,任務將無法區分。進入就緒態的優先級最高的任務首先得到CPU 的使用權,只有等它交出CPU 的使用權后,其他任務才可以被執行。μC/OS-II 對共享資源提供了保護機制。正如上文所提到的,μC/OS-II 是一個支持多任務的操作系統。一個完整的程序可以劃分成幾個任務,不同的任務執行不同的功能。

表1 任務劃分及說明表

圖12 任務控制關系圖
在本系統的設計中,共定義了4 個任務:系統啟動任務Task_Init()、路徑檢測任務Task_Location()、轉向控制任務Task_Turn()和速度控制任務Task_Speed()。調度工作可分為兩個部分:最高優先級任務的尋找和任務切換。
在本系統中,任務劃分及說明如表1 所示。如圖12 所示,操作系統任務調度和通信流程如下:系統啟動后,執行Task_Init()來進行系統的初始化,在初始化任務執行完畢后,利用系統內置的OSTaskDel()函數,使得該任務進入休眠狀態。此時,路徑檢測任務Task_Location()將成為優先級最高的任務并一直執行。當Task_Location()檢測到路徑發生變化的時候,會通過郵箱傳遞數據到Task_Turn(),并由Task_Turn()控制舵機PWM信號的輸出;同時,Task_Location()檢測到路徑發生變化的時候,也會通過郵箱將預期需要達到的速度發送到Task_Speed(),Task_Speed()根據在定時器中斷服務函數中得到的編碼器轉數來計算速度值,并決定PWM 輸出。任務優先級較低,但是同樣會一直執行,并且每次中斷都會向該任務發送信號量使其進入就緒態。
智能車是一個自動行駛的智能控制系統,它從傳感器中采集信息,而后信息流入智能車的大腦,即是微處理器。處理器分析數據并運算后得出指令并傳輸給執行機構。這就是一個完整的智能系統,而本文的任務就是如何去完成這個系統并轉化到智能小車上。
本文設計的系統能夠較好地滿足智能車行駛的需要,并且有一定的擴展性。在本文中完成了智能車設計的軟件、硬件和機械3 個方面。
在軟件方面,本設計在嵌入式實時操作系統μC/OS-II 開發了驅動程序并且設計了系統的整體程序,并運用了PID 控制算法,較好的完成了智能車行駛控制的任務,具有良好的實時性,對于小車行駛中可能遭遇到的各種問題都能很好的應對。
在硬件方面,本設計選擇了一款適合小車的ARM7 系列芯片,并以此為重心完成了小車各個模塊的硬件設計,并在此基礎上,又完成了各個部分的接口電路設計,使得整個小車能夠耦合成為一個有機的整體。
[1]基于交變磁場檢測的路徑識別智能車控制系統設計.
[2]張自友.樂山師范學院學報,2010,25(12).
[3]劉益民,等.轉臺伺服系統中高精度測速方法的研究與實現[J].科學技術與工程,2007(8).
[4]楊巍.基于內模整定的PID算法應用與研究.華北電力大學(北京),2010.
[4]司利云,等.嵌入式實時操作系統μC/OS-Ⅱ及其應用[J].電子產品世界,2002.
[5]晏五一.基于ARM的新型遠程配變監控終端研究與設計[D].湖南大學,2007.
[6]郭煒璜.PID控制在清梳聯系統中的應用[J].國際紡織導報,2009(2).