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