《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于STM32F105微控制器的雙CAN冗余設計方案
基于STM32F105微控制器的雙CAN冗余設計方案
Icbuy
Icbuy
摘要: 控制器局域網(wǎng)(ControllerAreaNetwork,CAN)是一種多主方式的串行通訊總線。CAN總線具有較高的位速率,很強的抗電磁干擾性,完善的錯誤檢測機制,在汽車、制造業(yè)以及航空工業(yè)領域中得到廣泛應用。由于船舶機艙環(huán)境極為惡劣,且船舶航行過程中維修條件不如陸上,對CAN通信的可靠性要求很高,采取雙CAN冗余總線提高通信可靠性。本文提出一種基于STM32F105微控制器的雙CAN冗余設計方案。
Abstract:
Key words :
   控制器局域網(wǎng)(ControllerAreaNetwork,CAN)是一種多主方式的串行通訊總線。CAN總線具有較高的位速率,很強的抗電磁干擾性,完善的錯誤檢測機制,在汽車、制造業(yè)以及航空工業(yè)領域中得到廣泛應用。由于船舶機艙環(huán)境極為惡劣,且船舶航行過程中維修條件不如陸上,對CAN通信的可靠性要求很高,采取雙CAN冗余總線提高通信可靠性。本文提出一種基于STM32F105微控制器的雙CAN冗余設計方案。

  1硬件平臺組成

  STM32F105是STMicroelectronics公司推出的一款基于ARMCortex-M3內(nèi)核的32位微控制器,其內(nèi)核是專門設計于滿足高性能、低功耗、實時應用的嵌入式領域的要求。由于采用Thumb-2指令集,與ARM7微控制器相比STM32運行速度最多可快35%且代碼最多節(jié)省45%。較高的主頻和代碼執(zhí)行效率使系統(tǒng)在進行CAN總線數(shù)據(jù)收發(fā)的同時仍可運行總線冗余算法。STM32F105微控制器內(nèi)部集成2路獨立的CAN控制器,控制器集成在芯片內(nèi)部,避免了總線外擴引入的干擾,同時簡化了電路設計、降低成本。

  系統(tǒng)使用兩條完全獨立的CAN總線,兩個CAN總線收發(fā)器和總線控制器,實現(xiàn)物理層、數(shù)據(jù)鏈路層的全面冗余。在初始化時兩個控制器被同時激活,一個作為主CAN,另一個作為從CAN,為主控制器的備份。正常運作時,數(shù)據(jù)通過主CAN優(yōu)先發(fā)送;當主CAN總線繁忙時,從CAN總線分擔部分通信流量;而當主CAN總線發(fā)生故障時,數(shù)據(jù)轉移至從CAN控制器傳輸,反之亦然。在任一總線發(fā)生故障時,數(shù)據(jù)都能經(jīng)由另一條總線傳輸,而當兩條總線都正常時,使用兩總線同時傳輸,增加約1倍的通信帶寬,這樣在保證了通信可靠性的同時提高了實時性。

  CAN總線接口電路設計如圖1所示,使用TJA1050作為總線收發(fā)器,它完成CAN控制器與物理總線之間的電平轉換和差動收發(fā)。盡管TJA1050本身具備一定的保護能力,但其與總線接口部分還是采用一定的安全和抗干擾措施;TJA1050的CANH和CANL與地之間并聯(lián)兩只10pF的小電容,可以濾除總線上的高頻干擾;另外,為了增強CAN總線節(jié)點的抗干擾能力,總線輸入端與地之間分別接入一只瞬態(tài)抑制二極管,當兩輸入與地之間出現(xiàn)瞬變干擾時,收發(fā)器輸入端電壓被鉗位在安全范圍。

  為防止總線過壓造成節(jié)點損壞,STM32F105內(nèi)置CAN控制器的數(shù)據(jù)收發(fā)引腳并不與TJA1050直接相連,通過ADuM1201磁隔離器實現(xiàn)信號隔離傳輸。與傳統(tǒng)光耦隔離相比,磁隔離簡化了隔離電路設計,并且磁隔離芯片的功耗很低,大約相當于光耦隔離的1/10。除了將CAN數(shù)據(jù)信號隔離外,TJA1050T使用的電源和地也必須與系統(tǒng)完全隔離,使用5V隔離輸出的開關電源模塊IB0505LS提供隔離電源。由于CAN總線數(shù)據(jù)傳輸率較高,為了提高信號質(zhì)量,網(wǎng)絡拓撲結構應盡量設計成單線結構以避免信號反射,同時終端連接120歐姆左右的匹配電阻。

CAN 接口電路設計

圖1CAN接口電路設計

  2軟件設計

  CAN協(xié)議規(guī)范定義的數(shù)據(jù)鏈路層和部分物理層并不完整,雙CAN冗余應用需要實現(xiàn)總線狀態(tài)監(jiān)控、網(wǎng)絡故障的診斷和標識,這就要通過添加軟件冗余模塊來實現(xiàn)。冗余模塊在程序主循環(huán)中調(diào)用,根據(jù)不同總線錯誤狀態(tài)執(zhí)行收發(fā)通道切換。CAN總線錯誤狀態(tài)分為3類:錯誤激活、錯誤認可、總線關閉。總線正常工作時處于錯誤激活狀態(tài),控制器檢測到錯誤后將發(fā)送/接收錯誤計數(shù)器的值遞增,當值大于127時進入錯誤認可,大于255時總線關閉狀態(tài),CAN總線錯誤檢測模塊通過讀取錯誤狀態(tài)寄存器作為總線故障的測試條件,在錯誤狀態(tài)發(fā)生改變時調(diào)用冗余算法,執(zhí)行總線切換操作。

  通過實際調(diào)試發(fā)現(xiàn),總線連接斷開且只有1個節(jié)點不斷發(fā)送報文時產(chǎn)生發(fā)送錯誤,控制器進入錯誤認可狀態(tài),但不進入總線關閉狀態(tài);其它錯誤均使錯誤計數(shù)器增加,依次進入錯誤認可狀態(tài)、總線關閉狀態(tài),后兩種狀態(tài)表明總線被嚴重干擾,需要采取相應措施。為簡化控制邏輯設計將錯誤認可和總線關閉合并為總線故障。

  冗余算法使用狀態(tài)機實現(xiàn)發(fā)送模式的切換,根據(jù)不同總線故障選擇發(fā)送使用的總線。狀態(tài)切換流程圖如圖2所示,程序首先讀取錯誤狀態(tài)寄存器獲得總線錯誤狀態(tài),判斷當前總線是否處于錯誤激活模式,若檢測到總線故障程序置相應標志位向其他程序模塊指示錯誤。為提高報文發(fā)送效率,發(fā)送程序一次將多個報文寫入發(fā)送郵箱由硬件控制自動發(fā)送,在切換總線時,需先把故障總線發(fā)送郵箱中的報文中回讀,通過備份總線優(yōu)先發(fā)送,這一機制保證報文不會因總線切換而丟失??刂破飨蚬收峡偩€發(fā)送數(shù)據(jù)域為空的測試報文,每成功發(fā)送1報文,總線發(fā)送錯誤計數(shù)器的值遞減,直至其值小于128總線恢復到錯誤被動狀態(tài);每隔一定時間冗余程序讀取錯誤狀態(tài)寄存器,檢測故障總線是否恢復正常。

  在2總線同時傳輸模式,發(fā)送程序優(yōu)先寫入總線1郵箱,當總線1郵箱滿時寫入總線2的郵箱,由于報文按優(yōu)先級仲裁發(fā)送,若某一路發(fā)送郵箱經(jīng)常為空,說明該路總線通信流量較小,發(fā)送程序將較多報文轉由空閑總線發(fā)送,實現(xiàn)報文的負載均衡。

總線狀態(tài)切換流程圖

圖2總線狀態(tài)切換流程圖。

  3雙總線冗余的可靠性分析與測試

  對雙CAN冗余系統(tǒng)的可靠性進行定量分析,引入平均無故障運行時間(MeanTimeToFailure,MTTF)的概念。MTTF描述一個系統(tǒng)從開始工作到發(fā)生故障的時間間隔,也即平均壽命。為簡化分析作如下假設:每路CAN總線的故障率相同;CAN總線的損壞屬于物理損壞,即不可修復的損壞。指數(shù)分布可以很好地用來描述電子元器件的壽命,假設CAN總線的壽命分布服從指數(shù)分布,CAN總線的可靠性模型如圖3所示。

CAN 總線可靠性模型圖

圖3CAN總線可靠性模型圖

  模型1為單總線的可靠性模型,因為總線壽命服從指數(shù)分布,根據(jù)單一CAN總線無故障運行時間MTTF1=1/λ。模型2為雙CAN總線冗余可靠性模型,系統(tǒng)由兩條獨立的總線并聯(lián)而成,即只有當這2條總線都失效時系統(tǒng)通信才會失敗,于是系統(tǒng)的平均壽命MTTF2=3/2。采用雙線冗余設計使CAN通信的平均無故障時間增加了50%。

  雙線CAN冗余系統(tǒng)的另一關鍵指標是總線切換時間,它等于檢測錯誤所需時間與處理故障總線未發(fā)送報文所需時間之和,切換時間越短,總線故障對報文傳輸造成的延遲就越小。檢測錯誤所需時間,即從總線錯誤出現(xiàn)到被冗余程序檢測到所需的時間。以總線斷開故障為例,發(fā)送器每發(fā)送一個報文產(chǎn)生一次應答錯誤,錯誤計數(shù)器每次加8,需連續(xù)進行16次發(fā)送,使錯誤計數(shù)器值達到128引起總線切換。在位速率125kbps情況下,發(fā)送最長為128位的報文,若忽略控制器重發(fā)間隔時間,從故障發(fā)生到被檢測到的響應時間為:

  為避免在總線切換時丟失報文,冗余算法需回讀故障控制器中未發(fā)送報文,由此產(chǎn)生額外的故障處理時間,因為每個發(fā)送郵箱最多存儲3個報文,假定位速率125kbps不變,備份總線發(fā)送時即取得仲裁,最長故障處理時間為:

  因此總線切換時間為16.38+3.07=19.45ms。

  通過實驗測得在125kbps位速率下連續(xù)發(fā)送不同報文長度的總線切換時間如表1所示:

表1總線切換時間

總線切換時間

  在125kbps位速率下切換時間為22.80ms,比理論計算值稍長,這是由總線切換時運行冗余算法及讀取控制器錯誤寄存器(ESR)所額外消耗的,但在實際應用中,發(fā)送報文獲取仲裁所需的等待時間遠大于切換時間,總線故障并不頻繁發(fā)生,冗余切換算法對系統(tǒng)的運行并無顯著影響。

  4結束語

  與傳統(tǒng)單片機總線外擴兩片CAN控制器的冗余方案相比,本設計充分利用STM32F105微控制器內(nèi)置的兩路CAN控制器,簡化電路設計,相對降低了成本,同時雙CAN冗余通信系統(tǒng)的采用提高了系統(tǒng)整體可靠性。所使用雙總線負載均衡技術,可以提高總線帶寬,平衡通信負荷。系統(tǒng)船舶機艙監(jiān)控系統(tǒng)的圖像和數(shù)據(jù)信號的傳輸中取得很好的效果。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。