崔海貝
(山東沂星電動汽車有限公司,山東臨沂 276000)
CAN總線所采用的載波監(jiān)控、多主掌控、沖突避免的通訊模式[1],使其在多節(jié)點通訊上具有很高的通訊效率。此外其差分特性所帶來的高容錯率,使其能在電磁干擾等惡劣環(huán)境下良好地工作?;谏鲜鰞?yōu)點,CAN總線在電動汽車上得到了廣泛應用[2]。由于車輛各控制單元信息的獲取以及指令的發(fā)送都需要基于CAN通訊,因此一旦發(fā)生通訊故障,輕則車輛部分功能受限,重則車輛失控。本文以某電動汽車為例,選取整車控制器作為CAN網(wǎng)絡內(nèi)的監(jiān)控單元,對CAN通訊的幀接收監(jiān)控以及節(jié)點心跳監(jiān)控方法進行闡述;通過對比分析,提出一種適用于電動汽車的綜合性監(jiān)控方案,以提高電動汽車CAN通訊故障監(jiān)控的可靠性。
隨著科技的進步,各種功能的車載電器設備越來越多,大部分設備之間都需要進行數(shù)據(jù)交互,這就導致車輛上通訊節(jié)點增多。若這些節(jié)點共用同一路CAN總線,將造成總線擁堵,因此在CAN總線設計時往往需要根據(jù)通訊結(jié)構(gòu)、節(jié)點功能以及實時性要求,將其劃分為多路CAN總線[3]。在眾多節(jié)點中,整車控制器(VCU)作為汽車的核心控制單元,除了需要通過CAN總線從其他節(jié)點獲取各種信息以作控制策略判斷外,還需要通過CAN總線向各執(zhí)行單元發(fā)送指令以控制車輛的行駛以及上下電等。因此整車控制器(VCU)往往同時位于多路CAN總線中,并作為CAN總線網(wǎng)絡的網(wǎng)關(guān),負責各路總線上的數(shù)據(jù)交互[4]。圖1為某款電動汽車的CAN總線拓撲結(jié)構(gòu),其中整車控制器作為網(wǎng)關(guān)同時位于動力CAN與車身CAN兩路總線中。
圖1 CAN拓撲結(jié)構(gòu)
基于整車控制器的上述特性,選擇它作為監(jiān)控單元可以對各路CAN總線節(jié)點進行全面監(jiān)控[5],同時還能在監(jiān)控到通訊故障時進行及時響應。
該方法對幀的接收進行計時[6]。由于各數(shù)據(jù)幀均為周期性發(fā)送,因此若在規(guī)定時間內(nèi)未接收到某一幀,則說明該幀出現(xiàn)丟幀故障或者發(fā)出該幀的節(jié)點出現(xiàn)故障。由于幀的數(shù)量較多,而處理器的定時器資源有限,故這里采用為各幀單獨設置計數(shù)變量且共用同一定時周期的計時方法。即在周期性執(zhí)行的故障診斷任務中,對各幀的計數(shù)變量值進行累加,若接收到了某一幀,則將該幀的計數(shù)變量值清零,這樣該幀的計數(shù)變量值與任務周期之積即為該幀的計時時間;若某一幀的計數(shù)變量值超過了預設的故障閥值,則說明在規(guī)定時間內(nèi)未接收到該幀。
1)接收處理。當整車控制器接收到某一幀報文后,會離開當前任務進入接收中斷,在接收中斷中對該幀的計數(shù)變量值進行清零處理。現(xiàn)以表1中的4幀為例對該監(jiān)控方法進行闡述。
表1 CAN節(jié)點及其數(shù)據(jù)幀
首先對幀ID進行判斷,若幀ID為A,則說明該幀數(shù)據(jù)為驅(qū)動控制器(MCU)發(fā)送至整車控制器的電機轉(zhuǎn)速,對該幀進行數(shù)據(jù)解析及更新,并將幀A的計數(shù)變量值清零;若不為A,則繼續(xù)判斷幀ID是否為B。注意幀C與幀D非整車控制器所需數(shù)據(jù),故收到這兩幀時,只需要對這兩幀的計數(shù)變量值清零,而不需要對其進行解析。若還有其他幀,處理方法同上。
2)故障診斷。在周期性執(zhí)行的故障診斷任務中依次對各幀的接收時間進行診斷,診斷流程如圖2所示,主要有:
①對各節(jié)點對應的計數(shù)變量值進行累加。
②對A幀的計數(shù)變量值進行判斷,若其大于等于預設的二級故障閥值,則將A幀故障等級置為二級;若其大于等于預設的一級閥值,則將A幀故障等級置為一級;若其小于預設的一級閥值,則說明此時A幀未超時,將A幀故障等級置為零級。
③對幀B的診斷流程同幀A,但需要將故障閥值更換為幀B的故障閥值。若還有其他幀,診斷以及處理方法同上。
圖2 幀接收故障診斷流程
該方法需要各節(jié)點自身創(chuàng)建一個周期性的心跳任務[7],在該任務里對自身心跳值進行自增,然后將心跳值發(fā)送至CAN總線上。整車控制器會對各節(jié)點的心跳值進監(jiān)控,若某節(jié)點心跳值在規(guī)定的時間范圍內(nèi)未發(fā)生變化,則說明該節(jié)點出現(xiàn)故障導致心跳值停止更新。
1)接收處理。整車控制器接收到某一幀報文后,會離開當前任務進入接收中斷對接收到的幀進行判斷,若為心跳幀,則對其相應的節(jié)點心跳值進行更新?,F(xiàn)以表2中的4幀為例對該監(jiān)控方法進行闡述。
表2 CAN節(jié)點及其數(shù)據(jù)幀
首先對幀ID進行判斷,若幀ID為A,說明該幀數(shù)據(jù)為驅(qū)動控制器(MCU)發(fā)送至整車控制器的電機轉(zhuǎn)速,非心跳幀,故只對該幀進行數(shù)據(jù)解析及更新;若幀ID為B,說明該幀為MCU發(fā)送至整車控制器的心跳值,故對該心跳幀進行數(shù)據(jù)解析并更新MCU心跳值;若幀ID為C,說明該幀數(shù)據(jù)為BMS發(fā)送至儀表的單體電壓,由于該幀非心跳幀且整車控制器不需要采集該數(shù)據(jù),故將該幀進行過濾,不對其進行處理。若還有其他幀,處理方法同上。
2)故障診斷。在周期性執(zhí)行的故障診斷任務中依次對各節(jié)點的心跳值進行診斷,診斷流程如圖3所示,主要有:
①首先判斷A節(jié)點當前的心跳值與其在上一次故障診斷任務中的心跳值是否相等,若相等,說明從上次故障診斷任務到本次故障診斷任務之間的這段時間內(nèi)A節(jié)點的心跳值未發(fā)生變化,則將A節(jié)點計數(shù)變量值加1。
②若不相等,說明這段時間內(nèi)接收到了A節(jié)點發(fā)出的新心跳值,則可判斷出A節(jié)點仍然在線且正常工作,將A節(jié)點的計數(shù)變量值減1。
③若節(jié)點心跳一直正常,計數(shù)變量值將不斷自減,為保證計數(shù)變量值始終大于等于零,需要對計數(shù)變量進行處理,即當判斷出計數(shù)變量值為負值時,對其清零。
④處理完節(jié)點計數(shù)變量后,還需要對其進行診斷。若其值大于等于二級閥值,則將節(jié)點A的通訊故障等級置為二級;若其值大于等于一級閥值,則將通訊故障等級置為一級;若其值小于一級閥值,則說明當前未監(jiān)控到A節(jié)點通訊異常,將故障等級置為零級。
⑤若還有其他節(jié)點,可按上述方法繼續(xù)進行診斷。但各節(jié)點心跳周期可能有所不同,因此故障閥值要進行相應的變更。
圖3 節(jié)點心跳故障診斷流程
兩種監(jiān)控方法的出發(fā)點不一樣,故監(jiān)控效果也有所不同:
1)節(jié)點心跳監(jiān)控方法以節(jié)點作為監(jiān)控對象,通過節(jié)點發(fā)出的心跳幀來監(jiān)控節(jié)點是否掉線,但無法監(jiān)控到除心跳幀以外的丟幀故障。而幀接收監(jiān)控方法則是以節(jié)點發(fā)出的幀作為監(jiān)控對象,除了節(jié)點故障外,還能監(jiān)控丟幀故障。因此幀接收監(jiān)控更加細致,有利于整車控制器根據(jù)故障幀對車輛行駛的重要程度,作出不同的故障處理策略。
2)節(jié)點心跳監(jiān)控需要為每個節(jié)點增加一幀心跳幀,增加了總線的負載率[8-9];而幀接收監(jiān)控在原有的通訊基礎上即可實施,不需要增加額外的幀。
3)在故障診斷中,幀接收監(jiān)控只需要對幀的計數(shù)變量值進行判斷,而節(jié)點心跳監(jiān)控除了對計數(shù)變量值進行判斷,還需要對心跳是否發(fā)生變化進行判斷,所以在流程上幀接收監(jiān)控更為簡單。
4)車輛CAN總線上節(jié)點數(shù)量遠少于幀的數(shù)量,因此節(jié)點心跳監(jiān)控比幀接收監(jiān)控更節(jié)省處理器資源。
5)幀接收只對接收進行監(jiān)控,而不對幀內(nèi)部的數(shù)據(jù)做診斷,因而無法診斷出某些節(jié)點故障,如節(jié)點程序運行出現(xiàn)問題時,雖然節(jié)點能發(fā)送數(shù)據(jù),但發(fā)送的數(shù)據(jù)為空值或無變化的值。節(jié)點心跳監(jiān)控則可診斷出該種類型的故障。
作為監(jiān)控單元的整車控制器若是出現(xiàn)故障,則會導致車輛失控,因此還需要對整車控制器進行監(jiān)控。由于整車控制器出現(xiàn)故障時,只能人為進行干預,因此這里采用儀表作為整車控制器的監(jiān)控單元,儀表一旦監(jiān)控到整車控制器出現(xiàn)故障,則通過蜂鳴報警的方式通知駕駛員采取緊急措施。由于儀表不在動力CAN總線上,因此其無法對整車控制器在動力CAN總線上發(fā)出的控制指令進行幀監(jiān)控,且儀表本身無法控制車輛行駛,即使監(jiān)控到了幀故障,也無法做進一步的處理,因此其只需監(jiān)控整車控制器是否正常工作即可,故這里采用節(jié)點心跳監(jiān)控方法來對整車控制器進行監(jiān)控。綜合考慮節(jié)點心跳監(jiān)控以及幀接收監(jiān)控這兩種方法的優(yōu)缺點,現(xiàn)制定出新的監(jiān)控方案,其結(jié)構(gòu)如圖4所示。
圖4 監(jiān)控結(jié)構(gòu)
1)整車控制器只對影響車輛安全行駛的關(guān)鍵幀進行幀接收監(jiān)控,以節(jié)約處理器資源。一旦發(fā)現(xiàn)幀故障,整車控制器將根據(jù)故障等級進行如降功率、延時斷電等相應的處理。同時將該幀的故障碼通過CAN總線發(fā)送至儀表。儀表進行蜂鳴報警,提醒駕駛員采取安全措施,并顯示故障碼,便于維修人員排查故障。
2)整車控制器對無關(guān)鍵幀的節(jié)點進行節(jié)點心跳監(jiān)控。當監(jiān)控到節(jié)點故障時,整車控制器向儀表發(fā)送該節(jié)點對應的故障碼,儀表點亮故障燈并對接收到的故障碼進行顯示[10-12]。
3)整車控制器向儀表發(fā)送自身心跳,儀表對其進行心跳監(jiān)控。當監(jiān)控到整車控制器心跳停止時,儀表進行蜂鳴報警,提醒駕駛員進行緊急制動。
上述方案既能減小幀監(jiān)控所帶來的的資源占用,又能將監(jiān)控覆蓋到包括作為監(jiān)控單元的整車控制器在內(nèi)的所有節(jié)點。且當通訊故障發(fā)生時,還可通過儀表對其進行顯示與報警,提醒駕駛員采取應急措施,幫助維修人員快速對故障進行定位。
本文以電動汽車為例,分別對CAN通訊節(jié)點監(jiān)控方法以及幀監(jiān)控方法進行了闡述,并對這兩種方法進行了對比分析,提出了一個適用于電動汽車的綜合性監(jiān)控方案,使電動汽車CAN通訊故障監(jiān)控更加全面可靠,能否為車輛的行駛提供安全保障還有待實際應用檢驗。