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