智能汽車是一種具有自動駕駛功能的汽車,它綜合應用了計算機、控制、信息處理、通訊以及傳感器等多種技術。使用CAN總線保證了系統內部數據交換的高速性和可靠性。引入了一種帶有CAN總線接口的單片機--PIC18F258,介紹了它CAN模塊的結構及其在完成通信任務時的工作原理。該方法在人工智能和工業測控領域具有一定的應用價值。 1 引言 CAN總線是控制局域網絡(Control Area Network)的簡稱,它最早由德國BOSCH公司提出。由于它具有傳輸速率高,抗干擾能力強,硬件連接方便等突出特點,非常適合用于汽車系統中,解決眾多測試與控制儀器之間的數據交換問題。 2 智能汽車系統簡介 智能汽車主要被用于野外環境中,它可以按照人預先設定的指令,根據地圖信息做出全局路徑規劃,并在行進過程中不斷感知周圍的環境信息,自主地制定出各種決策,引導自身安全地行使并完成相應的規劃和操作任務。 它除具備普通汽車的各類功能外,還增加了測算車身位置,測算車頭方向,控制汽車自帶有向天線的方向使其與基地之間進行無線通信等功能。如此眾多的信息,如果完全采用RS-232總線進行內部數據交換顯然有些力不從心。因而采用CAN總線作為其內部數據傳輸的通道,是理所當然的。 3 系統設計 3.1 概述 智能汽車的控制系統由擔負著檢測計算功能的下位機系統和擔負著控制顯示功能的上位機系統組成。圖1為該系統的功能框圖。 下位機系統各模塊及其功能: 〇 GPS數據采集模塊,用來測量汽車當前位置。 〇 磁羅盤數據采集模塊,用來測量車頭的方向。 〇 步進電機控制模塊,用來驅動有向天線的旋轉。 〇 步進電機轉動角度限制模塊,用來測量有向天線相對于車頭的角度,并防止由于步進電機單方向轉動角度過大而造成的線路纏繞。 〇 CAN模塊。 注:圖1中的電位器用來測量步進電機轉過的角度,將它的輸出電平轉換成頻率信號再發往下位機。CAN總線使用共地的雙絞線作為其傳輸介質。 上位機系統各模塊及其功能: 〇 LCD模塊,用來顯示下位機傳送來的各種數據。 〇 簡易鍵盤輸入模塊,通過8鍵鍵盤完成對下位機的一些簡單控制。 〇 CAN模塊。 上位機和下位機通信由CAN模塊和CAN總線來完成。其中,下位機要傳送給上位機的數據有,汽車當前的GPS坐標,車頭當前的方向,有向天線相對于車頭的角度;上位機要傳送給下位機的數據有,基地的GPS坐標,手動模式下電機旋轉的方向和角度。 3.2 硬件實現 系統上下位機均采用PIC18F258單片機,該單片機自帶CAN收發接口,它的引腳見圖2。CAN模塊相對獨立,其的主要特征如下: 〇 通過ISO CAN標準測試。 〇 執行CAN協議:CAN1.2 CAN2.0A CAN2.0B。 〇 標準和擴展數據模式。 〇 0-8位數據長度。 〇 可編程速率高達1M bps。 〇 2個數據接收緩沖器 〇 6個完全接收濾波器,2個對應高優先權緩沖器,4個對應低優先權緩沖器。 〇 2 個完全接收掩碼器。 〇 3個具有優先權的發送緩沖器 該系統中,上位機與其外圍設備鍵盤和LCD顯示器通過標準并行I/O總線相連,下位機與其外圍設備GPS接收器、磁羅盤以及電機驅動器通過RS-232串行總線相連,在此不做詳細介紹。圖3是CAN通信模塊硬件簡圖。 由于單片機的輸出電流比較弱,難以驅動光電隔離器,為保險起見,信號輸入光偶前要經過74HC573鎖存;同樣為了增加信號驅動能力,經過隔離的信號要再次經過74HC573鎖存。 使用該單片機,無須擴展CAN總線模塊,簡化了硬件設計,提高了運行效率。 3.3 軟件實現 PIC18F258的CAN模塊帶有眾多控制和數據寄存器,為方便起見,可以將它們做以下分類: 〇控制和狀態寄存器 〇發送緩沖寄存器 〇接收緩沖寄存器 〇波特率控制寄存器 〇I/O控制寄存器 〇中斷標志和控制寄存器 CAN模塊可工作于6種模式下,配置模式,禁止模式,正常工作模式,監聽模式,自循環模式,錯誤識別模式。本系統涉及到了2種模式,配置模式和正常工作模式。 首先在配置模式下將控制和狀態寄存器,波特率控制寄存器,I/O控制寄存器,中斷標志和控制寄存器,接收掩碼器和接受濾波器按照系統要求設定好,以保證CAN總線暢通。這些寄存器只能在配置模式下進行設定。設定完畢后,進入正常工作模式。上位機和下位機都將各自的CAN接收中斷打開,等待CAN總線傳送來的數據。所不同的是,上位機只在需要進行人工干預的情況下,向總線發送控制信號;而下位機是循環向總線發送采集到的信息的。 圖4是CAN模塊發送數據的程序流程圖: 圖4 發送程序流程圖 CAN模塊數據接收是通過中斷方式實現的,即每傳來一個報文,就發生一個中斷,然后將收到的數據從接收寄存器中轉移到指定的存儲區域內并保存起來 ,最后中斷返回。 圖5是下位機CAN模塊接收數據的中斷服務程序流程圖: 圖5 接收中斷服務程序流程圖 4 關于設計中的幾個問題 (1)下位機是循環發送數據的,在每一個報文發送出去后,要等待充足的時間再發送下一個報文。否則,可能出現上次報文未發送完畢,就裝載下一個報文的情況。從而,造成報文丟失,甚至每次報文都不能成功發送。等待的時間與微處理器的時鐘頻率和報文發送的波特率有關。 (2)報文發送過程中可能會產生種種錯誤,CAN協議提供了成熟的錯誤檢驗機制。這些錯誤可能包括:CRC錯誤、應答錯誤、形式錯誤、位錯誤、填充位錯誤,引起這些錯誤的原因各不相同。對PIC18F258而言,每發生一次錯誤,CAN模塊內部的錯誤計數器就會加1,一旦錯誤計數器的值大于255,就會進入總線關斷狀態,這時CAN總線將不能用來收發數據。它會等待128組連續的11位隱性位后,再恢復到正常狀態。系統運行過程中不允許有間斷,所以應當在進入總線關閉狀態前,將錯誤計數器清零或恢復到允許總線正常工作的范圍內。 (3)本系統中需要傳輸的數據,相對于CAN總線強大的功能而言是有限的。但是,考慮到今后系統的改進和擴充,必然需要更多的網絡節點,也必然會傳輸更多的數據,所以,系統在設計時預留了很多軟硬件資源,以備日后使用。 5 結束語 本文中的智能汽車系統,在普通汽車系統的基礎上,進行了功能擴展,涉及到了人工智能領域的一些技術。上位機與下位機之間由CAN總線來傳輸數據,RS-232接口只與外圍檢測和控制設備相連,分工明確,不會造成串行總線過于繁忙,從而引起數據傳輸錯誤。 用CAN總線組建的通信網絡,擴展性強、可靠性高、而且具有自診斷和監控能力,既提高了通信質量,又方便了軟硬件設計。本例中所使用的PIC18F258單片機自帶CAN總線接口,性能優越、價格低廉,必然會受到設計師的青睞。 |