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