新型電動汽車鋰電池管理系統的研究與實現 — CAN 總線設計
5.1 CAN總線簡介
控制器局部網(Control Area Network,CAN)是德國Bosch公司為現代汽車應用開發的一種多主機局部網絡,CAN總線最初為解決汽車中眾多的控制與測試儀器之間的數據交換而開發的。CAN卓越的特性、極高的可靠性和獨特的設計,特別適合工業過程監控設備的互連,因此,越來越受到工業界的重視,并已在工業上得到廣泛的應用,被公認為最有前途的現場總線之一。
CAN總線是一種串行數據通信協議,通信介質可以是雙絞線、同軸電纜或光導纖維,通信速率可達1Mbps.CAN總線通信接口中集成了CAN協議的物理層和數據鏈路層功能,可完成對通信數據的成幀處理,包括位填充、數據塊編碼、循環冗余檢驗、優先級判別等項工作。CAN協議的一個最大特點是廢除了傳統的站地址編碼,而代之以對通信數據塊進行編碼。采用這種方法的優點可使網絡內的節點個數在理論上不受限制,數據塊的標識碼可由11位或29位二進制數組成,因此可以定義211或229個不同的數據塊,這種按數據塊編碼的方式,可以非常靈活地控制節點的通信對象和通信來源,比如使不同的節點同時接受到相同的數據,這一點在分布式控制系統中非常有用。數據段長度最多為8個字節,可滿足通常工業領域中控制命令、工作狀態及測試數據的一般要求。同時,8個字節不會占用總線時間過長,從而保證了通信的實時性。CAN協議采用CRC檢驗并可提供相應的錯誤處理功能,保證了數據通信的可靠性。CAN具有下列主要特性:
- CAN可以多主方式工作,網絡上任意一個節點均可以在任意時刻主動地向網絡上的其它節點發送信息,而不分主從,通信方式靈活;
- CAN可以點對點、點對多點(成組)及全局廣播方式傳送接收數據;
- CAN網絡上的節點信息可分成不同的優先級,可以滿足不同的實時要求;
- CAN采用非破壞性總線仲裁技術。當兩個節點同時向網絡上發送數據時,優先級低的節點主動停止數據發送,而優先級高的節點可不受影響地繼續傳輸數據,大大地節約了總線仲裁沖突時間,在網絡負載很重的情況下也不會出現網絡癱瘓;
- CAN的直接通信距離最大可達10km(速率小于5kbps),最高通信速率可達1Mbps(此時距離最長為40m)。
正因為CAN總線有著如此卓越的特性,它現已成為汽車車體通信的標準。
5.2 CAN總線通信的基本原理
5.2.1 CAN總線的位數值表示
CAN總線用“顯性”(Dominant)和“隱性”(Recessive)兩個互補的邏輯值表示“0”和“1”。當在總線上出現同時發送顯性和隱性位時,其結果是總線數值為顯性(即“0”和“1”的結果為“0”)。如圖5.1所示,VCAN-H和VCAN-L為CAN總線收發器與總線之間的兩接口引腳,信號是以兩線之間的“差分”電壓形式出現。
隱性:VCAN_H和VCAN_L均被固定為平均電壓電平2.5V,VDIFF近似為0.在總線空閑或“隱性”位期間,發送“隱性”狀態。
顯性:VCAN_H和VCAN_L為大于閾值的差分電壓。VCAN_H大約為3.5V,而VCAN_L大約為2.5V.在報文沖突的時候,顯性位的優先級高于隱性位,也就是邏輯“0”優先于邏輯“1”,這是CAN總線沖突處理機制的基礎。
5.2.2 CAN的分層結構
根據ISO/OSI參考模型,CAN被分為以下不同層次:
(1)物理層(Physical Layer)物理層是將ECU連接至總線的電路實現,它由三部分組成:
- 物理信令(PLS)實現與位表示、定時和同步相關的功能;
- 物理媒體附屬裝置(PMA)實現總線發送/接受的功能電路并提供總線故障檢測方法。
- 媒體相關接口(MDI)實現物理媒體和MAU之間的機械和電氣接口。
(2)數據鏈路層(Data Link Layer)包含以下兩個子層:
- 介質訪問控制子層MAC(Medium Access Control)是CAN協議的核心。它把接收到的報文提供給LLC子層,并接收來自LLC子層的報文。MAC子層負責報文分幀、仲裁、應答、錯誤檢測和標定。MAC子層也受一個名為故障界定(Fault Confinement)的管理實體監管。此故障界定為自檢機制,以便把永久故障和短時擾動區別開來。
- 邏輯鏈路控制子層LLC(Logic Link Control)涉及報文濾波、過載通知、以及恢復管理。
CAN的ISO/OSI參考模型的層結構如圖5.2所示。
5.3 CAN系統的硬件結構
CAN系統結構如圖5.3:
CAN系統中有兩類節點:一類由CAN接口卡和PC機組成,CAN接口卡可以是PCI卡、ISA卡,也可接在PC機的并行口上;另一類由單片機、CAN控制器、CAN收發器組成。這里主要介紹單片機節點,在每個節點上,單片機主要用于系統的計算及信息處理功能;CAN控制器主要用于系統的通信;CAN收發器主要用于增強系統的驅動能力。系統的發送過程是:單片機將外圍設備或其它節點傳送過來的信息處理后,按CAN規范規定的格式將其寫入CAN控制器的發送緩沖區,并啟動發送命令,把數據發送到CAN總線上;接受過程是:CAN控制器從CAN總線上自動接受數據,并經過濾后存入CAN接受緩沖區,且向單片機發出中斷請求,此時單片機可從CAN接受緩沖區讀取要接受的數據。
CAN總線在設計時應注意一點:總線兩端各有一個120Ω的電阻,這對于匹配總線阻抗起相當重要的作用。否則,數據通信的抗干擾性及可靠性大大降低,甚至無法通信。管理系統中共有9塊測量板,一個中央處理模塊,一個顯示模塊,一個SOC估計模塊,一個與整車通訊模塊,一個專家診斷模塊。所以CAN總線上共有14個節點。他們的連接如圖5.4所示:
在系統中,CAN節點的CAN控制器采用SJA1000, SJA1000是一種獨立的CAN控制器,主要用于移動目標和一般工業環境中的區域網絡控制。SJA1000具有兩種操作模式:
- BasicCAN模式:與它的前款PCA82C200兼容的模式
- PeliCAN模式:擴展模式。這種模式全面支持CAN2.0B協議。
SJA1000的模塊結構如圖5.5所示。
SJA1000是CAN總線接口電路的核心,主要完成CAN的通訊協議,CAN收發器采用PCA82C250,它的主要功能是提高CAN總線的保護和驅動功能,它們之間通過6N137光藕進行隔離,節點結構如圖5.6.
5.4 CAN系統的軟件設計
CAN總線的軟件設計主要是3個部分:初始化、發送與接收數據、檢錯機制,下面分別加以介紹。
5.4.1初始化
SJA1000在上電硬件復位之后,必須對其進行軟件初始化之后才可以進行數據通訊,初始化過程主要在其復位模式下配置時鐘分頻寄存器CDR、總線定時寄存器BTR0和BTR1、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR及輸出控制寄存器OCR等,實現對總線的速率、驗收屏蔽碼、輸出引腳驅動方式、總線模式及時鐘分頻進行定義。
為了可靠收發數據,SJA1000的工作頻率不能低于單片機的頻率。系統中,單片機80C552的晶體振蕩器頻率為12MHz,而SJA1000的晶振頻率為16MHz. SJA1000的通訊波特率由BTR0、BTR1、晶振等參數共同決定。表5.1列出了一組推薦的BTR0、BTR1值,標注*符號的值是由CiA協會推薦的標準值。
總線上的14個節點數據接收發送的主要關系是:9塊測量板向總線上發送所測量的各單電池電壓溫度信息,同時接受中央處理模塊發出的均衡信號;SOC估計單元向總線上發送SOC等相關信息,同時接收中央處理模塊的各參數信息;專家診斷模塊要向顯示模塊發送診斷的相關信息,同時接收總線上各模塊發出的信息;中央處理單元既要向總線上發送總電壓、總電流和環境溫度,同時接收測量板的均衡信息;顯示控制模塊和與整車通訊模塊接收各個模塊發送到總線上的數據,同時與整車通訊模塊還將數據傳給整車。數據流圖如圖5.7:
對應上面的數據流圖,我們定義了CAN控制器的驗收碼寄存器(ACR)和驗收屏蔽寄存器(AMR)。定義的原則是:各個節點模塊只接收與自己有關的數據而屏蔽其它數據。譬如9塊測量板之間發送到總線上的數據應該是互不相關的,而且它們的數據量很大,所以必須兩兩加以屏蔽。我們采取的是BasicCAN模式,由于顯示控制模塊和與整車通訊模塊所接收的數據完全一樣,所以這倆個節點的驗收碼寄存器(ACR)和驗收屏蔽寄存器(AMR)可以設計的相同。具體各節點的ACR和AMR的定義如表5.2:
5.4.2發送與接收數據
在本系統中,每一個模塊的CAN發送都采用查詢方式來控制,接收采用中斷方式來控制,這里最好把CAN中斷優先級設為高優先級。發送時,CPU檢查SJA1000狀態寄存器中“發送緩沖器狀態”標志(TBS),若發送緩沖器處于“釋放”狀態,則CPU將發送的信息傳送到SJA1000的發送緩沖器,然后將命令寄存器里的“發送請求”標志(TR)置位,啟動發送,發送期間,TBS處于“鎖定”狀態,此時CPU不能訪問發送緩沖器;發送成功結束時,TBS處于“釋放”狀態,這時CPU就可以訪問發送緩沖器,進行下一次發送操作。接收時,當SJA1000已接收一條信息,并且這條信息已通過驗收濾波器且已放在接收FIFO中,那么SJA1000會產生一個接收中斷,CPU立刻起作用,將接收到的信息存到信息暫存器,然后對SJA1000的命令寄存器的“釋放接收緩沖器”標志(RR)置位,這樣一次中斷接收就算完成。接收和發送數據的流程圖如圖5.8.
5.4.3檢錯機制
SJA1000的BasicCAN模式提供了完善的檢錯機制,它提供了8個中斷源,除了發送中斷、接收中斷和喚醒中斷外,其余5個都是通信過程中出現的各種意外狀態的反映。當接收FIFO滿了,但還在接收其它信息,這時SJA1000就會置位狀態寄存器中的數據溢出狀態位,并產生一個數據溢出中斷通知CPU數據溢出。當本節點與其它節點總線競爭失敗丟失仲裁權時,SJA1000將會立即產生一個仲裁丟失中斷,并且當前丟失仲裁的具體位號將被捕捉進仲裁丟失捕捉寄存器,這樣便于我們分析總線競爭的情況。
當發送或接收數據時,發生任何一種錯誤,比如位錯、格式錯、填充錯等情況,SJA1000將會立即產生總線錯誤中斷,同時當前錯誤的位置被捕捉入錯誤代碼捕捉寄存器,通過讀取寄存器值并查表可知道當前錯誤發生的情況。SJA1000還定義了發送錯誤計數器和接收錯誤計數器,當錯誤產生時,根據不同類型錯誤的嚴重性,計數器加相應的值。根據錯誤計數器的值,定義了錯誤的三種狀態:當錯誤計數器的值在0-127之間為錯誤激活狀態;當計數器的值在127-255之間為錯誤消極狀態;當計數器的值高于255則處于總線關閉狀態。同時SJA1000定義一個錯誤報警限額寄存器,默認為96,當上述任意兩個計數器的值超過限額寄存器的值時,SJA1000狀態寄存器的錯誤狀態位將置位;當計數器的值超過255時,狀態寄存器的總線狀態位將置位,總線關閉,本節點模塊自動脫離CAN總線。當錯誤狀態位或總線狀態位發生變化時,SJA1000將立即產生錯誤警告中斷,以便CPU采取相應的處理措施。當CAN控制器在錯誤消極狀態處變化則產生錯誤消極中斷。這種做法是合理的,因為一個節點模塊如果經常出錯,就應該自動脫離總線,免得干擾其它節點的正常通信,這也是CAN總線的一個突出優點。
在節點處于總線關閉狀態脫離總線時,SJA1000將置位復位請求位進入復位狀態,如果沒有CPU的干預來清除復位請求位,則節點將一直處于總線關閉狀態。
評論