基于CAN總線的車輛虛擬儀表數據采集系統設計(2)
3.1 CAN控制器編程
本系統軟件設計的一個難點在于關于CAN的編程。本系統處理的CAN程序模塊有:CAN初始化子程序、CAN中斷程序和CAN數據收發子程序。
CAN 是Controller Area Network 的縮寫,是國際標準化的串行通信協議。在當前的汽車產業中,出于對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。由于這些系統之間通信所用的數據類型及對可靠性的要求不盡相同,由多條總線構成的情況很多,線束的數量也隨之增加。為適應"減少線束的數量"、"通過多個LAN,進行大量數據的高速通信"的需要,1986 年德國電氣商博世公司開發出面向汽車的CAN 通信協議。此后,CAN 通過ISO11898 及ISO11519 進行了標準化,現在在歐洲已是汽車網絡的標準協議。
CAN總線的基本特點:
*CAN協議廢除了傳統的站地址編碼,采用數據通信數據塊進行編程,可以多主方式工作。
*CAN采用非破壞性仲裁技術,當兩個節點同時向網絡上傳送數據時,優先級低的節點主動停止數據發送,而優先級高的節點可不受影響地繼續傳輸數據,有效避免了總線沖突。
*CAN采用短幀結構,每一幀的 有效字節為8個(CAN技術規范2.0A),數據傳輸時間短,受干擾的概率低,重新發送的時間短。
*CAN的每幀數據都有CRC效驗及其他檢錯措施,保證了數據傳輸的高可靠性,適于在高干擾環境中使用。
*適用于現場設備與儀表之間或者與其上位設備間的通信網絡,可以統一組態,相互操作,控制功能分散到最底層。
*CAN節點在錯誤嚴重的情況下,具有自動關閉總線的功能,切斷它與總線的聯系,以使總線上其它操作不受影響。
*CAN可以點對點、一點對多點(成組)及全局廣播集中方式傳送和接受數據
*CAN總線直接通訊距離最遠可達10km/5Kbps,通訊速率最高可達1Mbps/40m.
*采用不歸零碼(NRZ-Non-Return-to-Zero)編碼/解碼方式,并采用位填充(插入)技術。
CAN控制器是以CPU存儲器映像外圍設備出現的。P80C592的CPU與CAN控制器之間的數據傳輸通過4個特殊功能寄存器來實現,即: CANADR、CANCON、CANSTA和CANDAT,通過這四個特殊功能寄存器,CPU可以訪問CAN控制器內部的任一寄存器(地址為0~29)和 DMA邏輯。表1給出了這四個SFR的功能簡述,其中CANCON和CANSTA的讀寫操作含義不同。
表1 SFR功能簡述
CAN控制器初始化(圖4)是CAN通信中一個非常重要的子程序,程序是否合理將直接影響整個通信過程。CAN控制器的初始化首先必須通過置位CAN控制寄存器的"復位請求"位,置位"復位請求"并不影響正在進行的一個收發作業,特別需要注意的是,只有當復位請求被置位時,CAN內部地址為4-8的寄存器方可被訪問,在復位操作結束后必須將該位置0以保持所進行的設置并使CAN返回工作狀態。
圖4 CAN通信中一個重要的子程序
P80C592和其在片CAN控制器都具有中斷寄存器,必須注意兩者的區別。CAN中斷子程序(圖5)首先讀CAN中斷寄存器(IR)以判斷中斷類型,據此轉入相應的操作。如果接收緩存器滿而另一個報文的首字節又需要被存儲時,數據超限位被置位,此時應清除超限并釋放接收緩存,然后重新發送數據請求。在數據接受子程序中當數據被轉入RAM區后,應及時釋放接受緩存器,以便為接收下一幀數據做好準備。
圖5 CAN中斷子程序
數據發送子程序見圖6.CAN控制器向總線發送數據時,首先將在片主RAM中數據存放的首地址寫入CANSTA,然后讀取CANSTA.6的值(讀 CANSTA的操作其實是對CAN控制器內部狀態寄存器的讀操作,CANSTA.6是錯誤顯示位,當至少有一個總線錯誤計數器計數達到CPU告警極限時,該位將被CAN控制器置位。),若檢測出錯,則執行CAN初始化子程序,若正常,則繼續檢測接收狀態和發送緩沖器狀態,若發送條件滿足則在CANADR中寫入發送緩存器地址并置位DMA控制位,DMA傳送隨即被啟動,數據場由RAM拷貝到發送緩存器,置發送請求位后數據開始發送。
4 結語
用高性能的P80C592和AD1674A數據采集模塊組成車輛環境數據采集系統具有較高的性價比,目前該系統已投入試用階段,運行狀況良好。CAN總線非常適合分布式控制或適時控制的串行通信網絡,本課題只涉及了數據采集,如果在此基礎上擴展車輛輔助控制和重要數據備份功能,系統將會有更廣闊的應用前景。
- 第 1 頁:基于CAN總線的車輛虛擬儀表數據采集系統設計(1)
- 第 2 頁:CAN控制器編程#
本文導航
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關閱讀:
- [通信設計應用] 基于CO2128的網絡信號轉換系統設計 2011-09-20
- [嵌入式設計應用] 基于CAN總線的汽車車身控制系統設計 2011-09-19
- [網絡協議] 基于CAN總線的語音節點設計方案 2011-09-18
- [DSP] 基于DSP和CAN總線的RTU的設計 2011-09-16
- [RF/無線] 基于CAN總線的客車信息集成系統的設計 2011-09-15
- [單片機] 基于DSPIC30F4011單片機的CAN總線通信設計 2011-09-14
- [通信設計應用] 基于ADE7755的帶CAN總線的工業用電度表設計 2011-09-09
- [接口/總線/驅動] 車載CAN總線記錄儀實現大容量存儲系統 2011-09-08
( 發表人:大本 )