?

利用MC9S12(X)單片機構建CAN總線網絡的研究

2016-08-19 21:00宋富強熊武馮宇飛彭思苑
電腦知識與技術 2016年20期
關鍵詞:CAN總線通信

宋富強++熊武++馮宇飛++彭思苑++黃海波

摘要:飛思卡爾MC9S12(X)單片機的控制器局域網(MSCAN)是一種通信控制器,介紹基于使用該單片機的MSCAN模塊構建小型網絡的研究,實現三塊單片機的實時交互通信。三塊單片機包括一塊主控制器和兩塊輔控制器,系統將兩塊輔控制器掛在主控制器的CAN總線上,與主控制器進行數據交換。其中,數據包括采集的環境溫度和用電壓模擬的車速。

關鍵詞:MC9S12(X);CAN總線;通信

中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2016)20-0210-03

CAN全稱為Controller Area Network,即控制器局域網,是國際上應用最廣泛的現場總線之一。最初,CAN是由德國的Bosch公司提出,被設計為汽車環境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網絡。本文按照CAN總線協議設計了一個小型的CAN總線網絡,正文從硬件設計和軟件流程來進行闡述。

1 硬件電路設計

1.1 CAN接口電路

本文采用TJA1050作為CAN總線的接口芯片,它是一種標準的高速CAN收發器,可以為總線提供差動發送性能和為CAN控制器提供差動接收性能。

TJA1050的3引腳和2引腳分別為電源的正極和負極,連接5V電源和地。1引腳和4引腳為CAN模塊的發送和接收引腳,分別用于從CAN總線控制器中輸入發送到總線上的數據和將從總線接收的數據發送給CAN總線控制器,連接單片機的PM1和PM0引腳。7引腳和6引腳連接到CAN總線的CANH和CANL線上,信號使用差分電壓傳送,因此兩條信號線被稱為CAN_L和CAN_H。8引腳是工作模式選定引腳,該CAN接口芯片一共有高速、斜率控制和待機3種工作模式,把該引腳直接接地可選擇高速工作模式。在總線接口部分還要接一個120歐姆的匹配電阻。J_CAN是與CAN總線連接的接口。CAN總線接口電路見圖1:

1.2 電源模塊

電源模塊采用LM2940穩壓芯片,將電壓從12V穩到5V。原理圖中C11、C12、C13、C14、C15、C16分別為濾波電容,F11為濾波電感,D12是電源指示燈,防止指示燈被燒,串聯一個1K的電阻。其中PAD02接MC9S12(X)單片機的71引腳PAD02,采用固定電壓的AD轉換輸入。電源模塊電路圖見圖2:

1.3 AD采集電路

本文所設計的CAN小型網絡只用到兩路AD采集。因此電路圖中PAD00和PAD01分別接MC9S12(X)單片機的67腳和69腳,R44和R47采用1K的電阻,而R43和R46采用10K的電位器來進行分壓調節。AD采集電路見圖3:

1.4 溫度傳感器模塊

設計中,我們用的溫度傳感器是DS18B20。用DS18B20有以下幾個優點:①獨特的單線接口方式,只需一個接口引腳即可通信;②可用數據線供電,電壓范圍:+3.0V—+5.5V;③測溫范圍:-55℃—+125℃,在-10℃—+85℃圍內精度為范圍內精度為+0.5℃,分辨率為0.0625℃;④通過編程可實現9-12位的數字讀數方式。⑤多個DS18B20可以并聯在惟一的三線上,實現多點測溫。溫度傳感器模塊原理圖見圖4:

1.5 LED顯示模塊

本設計的顯示模塊采用LCD12864液晶顯示屏,顯示的內容有兩個輔控制器采集到的溫度和經過兩個輔控制器AD轉換以及計算模擬出來的車速。經過液晶屏的顯示,可以方便的知道CAN總線上的數據傳輸是否正確。LED顯示模塊原理圖見5:

2 軟件設計

2.1 MSCAN初始化程序的編寫

初始化按照下列過程實現:

1)首先檢測MSCAN是否處于工作模式;

2)進入初始化模式中,正在進行的任何發送或接收都會立即中止,與CAN總線失去同步。在進入初始化模式時,必須要保證MSCAN不在工作狀態,否則中止正在發送的報文可能導致錯誤發生。在初始化模式中,雖然MSCAN被停止,但是其接口寄存器仍然可以訪問;

1)設置相應寄存器,依次設置CAN總線波特率、接收濾波方式、標識符接收寄存器和標識符掩碼寄存器;

2)使能CAN模塊,設置運行模式(初始化、睡眠和工作三種模式)。MACAN初始化流程圖見圖6。

2.2 MSCAN發送程序的編寫

MACAN用報文來發送數據,首先選擇空閑的發送緩沖區,然后向該空閑緩沖區寫入數據,最后設置改緩沖區的發送標志位來將報文發送至CAN總線上。因此,用戶在發送報文緩存區寫入數據前,只需要通過相應的寄存器(CANTBSEL)設置一個指針來訪問任何一個緩沖區。此算法不僅簡化了發送緩沖器選擇功能,而且這種機制還使程序軟件處理更為簡單。

MSCAN的發送流程:

首先,在發送前要檢測判是否存在可用緩沖區的寄存器(CANTDLG&7)是否為0。若該寄存器(CANTDLG&7=0),則說明三個緩沖區已滿,并且報文未被發出。此時若繼續選擇向緩沖區裝填數據,將導致先前發送的報文丟失。在沒出現問題的情況下,寄存器CANTDLG&7的值都為1,即存在可用的緩存區。檢測到CANTDLG&7=0,原因可能為:

①MSCAN還沒來得及將報文發出;

②總線上的節點出現問題,沒有及時應答,導致報文發送不成功。

⑴若沒有可用的緩存區,檢查硬件系統和程序是否出現問題,直到報文能順利發出;

⑵若有可用的緩沖區,則使用對應的選擇緩沖區語句“CANTBSEL=CANTFLG”,選擇相應的發送緩沖區。若有多個緩沖區空閑時,選擇的緩沖區的序號是最小的,即用“CANTBSEL=CANTFLG”和“CANTBSEL=1”語句,MSCAN會自動選擇了第一個發送緩沖區。

接著,要向緩存區寫入數據,具體有:CPU標識符、數據段長度和需要發送的數據。數據是以報文形式裝入的,而且用何種方式寫的報文,接收也會用同樣的方式,并且還要檢測發送或者接收數據是否有誤。

最后,將已選擇的緩沖區標記為發送,即置位發送標志“CANTFLG=CANTBSEL”,與此同時,TXE標志也會被清零。

此后MSCAN會自動把數據裝入傳送隊列,傳送成功后將TXE置1,若用戶在先前使能發送中斷,則在此這個過程中會產生一個發送中斷。當然,在這個中斷過程中,發送用戶還可以繼續加載數據到發送緩沖區并重新發送。

當然,在發送數據時也會出現同時有多個緩存區準備發送,這時候如果同時發送必然導致錯誤。為了解決這個問題,MSCAN模塊就給每個緩存區分配了一個8位的優先級域,這就決定了在數據建立之前,用戶首先要對此域寫入優先級。通過判斷域內的優先級即可判斷數據的優先級,優先級的值越小,則表示此緩沖區的優先級越高。當MSCAN每次參與總線仲裁和發生發送錯誤時,都會進行內部的數據排列。若準備發送的緩沖區不止一個,則MSCAN模塊會使用內部的優先級來決定先發送哪個緩沖區。

當用戶有重要的數據需要發送時,就必須給該數據較高的優先級。如果MSCAN的三個緩存區都在發送數據。此時,就需要三個緩存區中優先級比較低的數據停止發送來讓優先級比較高的數據先發送。如果優先級低的數據發送過程不能終止,用戶就需要對相應的寄存器中的相應位進行設置(本單片機為CANTARQ寄存器中的ABTRQ位)來強行終止發送。

發送流程圖見圖7:

2.3 MSCAN 接收程序的編寫

同MSCAN有3個發送緩沖區的發送機制類似,MSCAN有5個接收緩沖區,而且這5個接收緩沖區被交替映射到單個存儲器區域CANRXFG中。同發送緩存區一樣,這種機制也簡化了應用軟件的編寫,提高了接收數據的效率。

接收已滿標志CANRFLG寄存器的RXF位指示了前臺接收緩沖區的狀態,當緩沖區中有正確的報文被接收時就設置接收已滿標志,即將RXF置1。報文的接收有兩種方式:中斷接收和查詢接收。接收時,首先要檢查每條報文的標識符是否通過濾波器。如果標識符通過了濾波器,就將有效的報文寫入后臺接收緩存器中,MSCAN將后臺接收緩沖器中的報文內容轉移到前臺接收緩沖器中,并設置接收已滿標志(CANRFLG寄存器的RXF位)。而接收報文時必須從前臺接收緩沖器讀取報文,接收完后,將接收器已滿標志(CANRFLG寄存器的RXF位)清零來釋放前臺接收緩沖器。而背景臺接收緩沖器接收到無效的報文時,該報文會被下一條覆蓋。用戶的中斷服務程序可以把數據從前臺緩沖區讀出,并置位RXF標志以響應中斷并釋放前臺緩沖區。

MSCAN接收流程:

①首先,要檢測接收器已滿標志(CANRFLG寄存器的RXF位),當接收器已滿標志(CANRFLG寄存器的RXF位)置1時,表示接收緩沖器接收到了正確的報文;

②然后,檢測 CAN協議報文的模式,讀標識符,讀取數據長度,讀取數據;

③最后,清接收器已滿標志(CANRFLG寄存器的RXF位),以便接收下一個報文。

注意:對報文的檢測和讀取一定要在清接收器已滿標志(CANRFLG寄存器的RXF位)之前進行,否則該報文會被下一個報文覆蓋,從而丟失信息。讀取報文流程圖見圖8:

3 系統測試與總結

經過一段時間的研究與設計,終于將“利用飛思卡爾MC9S12(X)單片機構建CAN總線小型網絡”這個課題做完并經過了測試。測試過程中,利用了CAN總線構建了3個節點的小型網絡,實現了對溫度和用電壓模擬的速度這些數據進行了測量、傳輸和顯示。測量工具有:示波器、萬用表、溫度計、秒表等。經過測試,利用飛思卡爾MC9S12(X)單片機CAN總線構建的小型網絡工作狀態良好,通信無誤且具有實時性,達到了預期的目標。

參考文獻:

[1]馮沖,段曉敏.飛思卡爾MC9S12(X)開發必修課[M].北京航空航天大學出版社,2014.

[2]羅峰,孫澤昌.汽車CAN總線系統原理、設計與應用[M].電子工業出版社,2010.

猜你喜歡
CAN總線通信
基于嵌入式的汽車輔助制動系統研究
基于“一級調度、兩級運維”的通信管理體系研究①
對數字微波通信技術的研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合