你的位置:首頁 > 測(cè)試測(cè)量 > 正文

基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)

發(fā)布時(shí)間:2014-10-16 責(zé)任編輯:echolady

【導(dǎo)讀】控制局域網(wǎng)又稱CAN,是一種多主方式的串行通訊總線。CAN總線以其抗電磁干擾性強(qiáng)、位速率高、錯(cuò)誤檢測(cè)機(jī)制完善的特點(diǎn)被廣泛應(yīng)用于航空航天、汽車制造等工業(yè)領(lǐng)域。尤其是船在行駛時(shí),環(huán)境惡劣,通信方面的準(zhǔn)確性和可靠性高,雙CAN冗余總線的通信完全符合條件。針對(duì)這種情況,本文中的方案設(shè)計(jì)是基于STM32F105微控制器的雙CAN 冗余設(shè)計(jì)方案。
 
一、硬件設(shè)計(jì)

1、平臺(tái)搭建
  
STM32F105是一款基于ARM Co rtex- M3內(nèi)核的32位微控制器, 其內(nèi)核是專門設(shè)計(jì)于滿足高性能、低功耗、實(shí)時(shí)應(yīng)用的嵌入式領(lǐng)域的要求。由于采用Thumb - 2指令集,與ARM7微控制器相比STM32運(yùn)行速度最多可快35% 且代碼最多節(jié)省45% 。較高的主頻和代碼執(zhí)行效率使系統(tǒng)在進(jìn)行CAN 總線數(shù)據(jù)收發(fā)的同時(shí)仍可運(yùn)行總線冗余算法。STM32F105微控制器內(nèi)部集成2路獨(dú)立的CAN 控制器, 控制器集成在芯片內(nèi)部, 避免了總線外擴(kuò)引入的干擾, 同時(shí)簡(jiǎn)化了電路設(shè)計(jì)、降低成本。
 
2、方案設(shè)計(jì)
  
系統(tǒng)使用兩條完全獨(dú)立的CAN 總線, 兩個(gè)CAN 總線收發(fā)器和總線控制器, 實(shí)現(xiàn)物理層、數(shù)據(jù)鏈路層的全面冗余。在初始化時(shí)兩個(gè)控制器被同時(shí)激活, 一個(gè)作為主CAN, 另一個(gè)作為從CAN, 為主控制器的備份。正常運(yùn)作時(shí), 數(shù)據(jù)通過主CAN 優(yōu)先發(fā)送; 當(dāng)主CAN 總線繁忙時(shí), 從CAN 總線分擔(dān)部分通信流量; 而當(dāng)主CAN 總線發(fā)生故障時(shí), 數(shù)據(jù)轉(zhuǎn)移至從CAN 控制器傳輸, 反之亦然。在任一總線發(fā)生故障時(shí),數(shù)據(jù)都能經(jīng)由另一條總線傳輸, 而當(dāng)兩條總線都正常時(shí), 使用兩總線同時(shí)傳輸, 增加約1倍的通信帶寬,這樣在保證了通信可靠性的同時(shí)提高了實(shí)時(shí)性。
  
CAN 總線接口電路設(shè)計(jì)如圖1所示,使用TJA1050作為總線收發(fā)器,它完成CAN 控制器與物理總線之間的電平轉(zhuǎn)換和差動(dòng)收發(fā)。盡管TJA1050本身具備一定的保護(hù)能力,但其與總線接口部分還是采用一定的安全和抗干擾措施;TJA1050的CANH 和CANL與地之間并聯(lián)兩只10pF的小電容, 可以濾除總線上的高頻干擾;另外,為了增強(qiáng)CAN 總線節(jié)點(diǎn)的抗干擾能力,總線輸入端與地之間分別接入一只瞬態(tài)抑制二極管,當(dāng)兩輸入與地之間出現(xiàn)瞬變干擾時(shí),收發(fā)器輸入端電壓被鉗位在安全范圍。
 
為防止總線過壓造成節(jié)點(diǎn)損壞,STM32F105內(nèi)置CAN 控制器的數(shù)據(jù)收發(fā)引腳并不與TJA1050直接相連,通過ADuM1201磁隔離器實(shí)現(xiàn)信號(hào)隔離傳輸。與傳統(tǒng)光耦隔離相比,磁隔離簡(jiǎn)化了隔離電路設(shè)計(jì),并且磁隔離芯片的功耗很低,大約相當(dāng)于光耦隔離的1/10。除了將CAN 數(shù)據(jù)信號(hào)隔離外,TJA1050T使用的電源和地也必須與系統(tǒng)完全隔離,使用5V 隔離輸出的開關(guān)電源模塊IB0505LS提供隔離電源。由于CAN 總線數(shù)據(jù)傳輸率較高,為了提高信號(hào)質(zhì)量,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)應(yīng)盡量設(shè)計(jì)成單線結(jié)構(gòu)以避免信號(hào)反射, 同時(shí)終端連接120歐姆左右的匹配電阻。
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
圖1:CAN 接口電路設(shè)計(jì)
 
 
二、軟件設(shè)計(jì)
  
CAN 協(xié)議規(guī)范定義的數(shù)據(jù)鏈路層和部分物理層并不完整,雙CAN 冗余應(yīng)用需要實(shí)現(xiàn)總線狀態(tài)監(jiān)控、網(wǎng)絡(luò)故障的診斷和標(biāo)識(shí),這就要通過添加軟件冗余模塊來實(shí)現(xiàn)。冗余模塊在程序主循環(huán)中調(diào)用,根據(jù)不同總線錯(cuò)誤狀態(tài)執(zhí)行收發(fā)通道切換。CAN 總線錯(cuò)誤狀態(tài)分為3類:錯(cuò)誤激活、錯(cuò)誤認(rèn)可、總線關(guān)閉。總線正常工作時(shí)處于錯(cuò)誤激活狀態(tài),控制器檢測(cè)到錯(cuò)誤后將發(fā)送/接收錯(cuò)誤計(jì)數(shù)器的值遞增,當(dāng)值大于127時(shí)進(jìn)入錯(cuò)誤認(rèn)可,大于255時(shí)總線關(guān)閉狀態(tài),CAN 總線錯(cuò)誤檢測(cè)模塊通過讀取錯(cuò)誤狀態(tài)寄存器作為總線故障的測(cè)試條件,在錯(cuò)誤狀態(tài)發(fā)生改變時(shí)調(diào)用冗余算法,執(zhí)行總線切換操作。
  
通過實(shí)際調(diào)試發(fā)現(xiàn),總線連接斷開且只有1個(gè)節(jié)點(diǎn)不斷發(fā)送報(bào)文時(shí)產(chǎn)生發(fā)送錯(cuò)誤,控制器進(jìn)入錯(cuò)誤認(rèn)可狀態(tài),但不進(jìn)入總線關(guān)閉狀態(tài);其它錯(cuò)誤均使錯(cuò)誤計(jì)數(shù)器增加,依次進(jìn)入錯(cuò)誤認(rèn)可狀態(tài)、總線關(guān)閉狀態(tài),后兩種狀態(tài)表明總線被嚴(yán)重干擾 需要采取相應(yīng)措施。為簡(jiǎn)化控制邏輯設(shè)計(jì)將錯(cuò)誤認(rèn)可和總線關(guān)閉合并為總線故障。
  
冗余算法使用狀態(tài)機(jī)實(shí)現(xiàn)發(fā)送模式的切換,根據(jù)不同總線故障選擇發(fā)送使用的總線。狀態(tài)切換流程圖如圖2所示,程序首先讀取錯(cuò)誤狀態(tài)寄存器獲得總線錯(cuò)誤狀態(tài),判斷當(dāng)前總線是否處于錯(cuò)誤激活模式,若檢測(cè)到總線故障程序置相應(yīng)標(biāo)志位向其他程序模塊指示錯(cuò)誤。為提高報(bào)文發(fā)送效率,發(fā)送程序一次將多個(gè)報(bào)文寫入發(fā)送郵箱由硬件控制自動(dòng)發(fā)送,在切換總線時(shí),需先把故障總線發(fā)送郵箱中的報(bào)文中回讀,通過備份總線優(yōu)先發(fā)送,這一機(jī)制保證報(bào)文不會(huì)因總線切換而丟失??刂破飨蚬收峡偩€發(fā)送數(shù)據(jù)域?yàn)榭盏臏y(cè)試報(bào)文,每成功發(fā)送1報(bào)文,總線發(fā)送錯(cuò)誤計(jì)數(shù)器的值遞減,直至其值小于128總線恢復(fù)到錯(cuò)誤被動(dòng)狀態(tài);每隔一定時(shí)間冗余程序讀取錯(cuò)誤狀態(tài)寄存器,檢測(cè)故障總線是否恢復(fù)正常。
  
在2總線同時(shí)傳輸模式,發(fā)送程序優(yōu)先寫入總線1郵箱,當(dāng)總線1郵箱滿時(shí)寫入總線2的郵箱,由于報(bào)文按優(yōu)先級(jí)仲裁發(fā)送,若某一路發(fā)送郵箱經(jīng)常為空,說明該路總線通信流量較小,發(fā)送程序?qū)⑤^多報(bào)文轉(zhuǎn)由空閑總線發(fā)送,實(shí)現(xiàn)報(bào)文的負(fù)載均衡。
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
圖2:總線狀態(tài)切換流程圖
[page]
 
三、雙總線冗余的可靠性分析與測(cè)試
 
  
對(duì)雙CAN 冗余系統(tǒng)的可靠性進(jìn)行定量分析,引入平均無故障運(yùn)行時(shí)間(M ean T ime To Fa ilure, MTTF)的概念。MTTF描述一個(gè)系統(tǒng)從開始工作到發(fā)生故障的時(shí)間間隔,也即平均壽命。為簡(jiǎn)化分析作如下假設(shè): 每路CAN總線的故障率相同;CAN 總線的損壞屬于物理損壞。即不可修復(fù)的損壞。指數(shù)分布可以很好地用來描述電子元器件的壽命, 假設(shè)CAN總線的壽命分布服從指數(shù)分布, CAN 總線的可靠性模型如圖3所示。
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
圖3:CAN總線模型
 
模型1為單總線的可靠性模型,因?yàn)榭偩€壽命服從指數(shù)分布,根據(jù)單一CAN總線無故障運(yùn)行時(shí)間MTTF1 = 1 /λ。模型2為雙CAN總線冗余可靠性模型,系統(tǒng)由兩條獨(dú)立的總線并聯(lián)而成,即只有當(dāng)這2條總線都失效時(shí)系統(tǒng)通信才會(huì)失敗,于是系統(tǒng)的平均壽命MTTF2 = 3 /2。采用雙線冗余設(shè)計(jì)使CAN 通信的平均無故障時(shí)間增加了50%。
  
雙線CAN 冗余系統(tǒng)的另一關(guān)鍵指標(biāo)是總線切換時(shí)間,它等于檢測(cè)錯(cuò)誤所需時(shí)間與處理故障總線未發(fā)送報(bào)文所需時(shí)間之和,切換時(shí)間越短,總線故障對(duì)報(bào)文傳輸造成的延遲就越小。檢測(cè)錯(cuò)誤所需時(shí)間,即從總線錯(cuò)誤出現(xiàn)到被冗余程序檢測(cè)到所需的時(shí)間。以總線斷開故障為例,發(fā)送器每發(fā)送一個(gè)報(bào)文產(chǎn)生一次應(yīng)答錯(cuò)誤。錯(cuò)誤計(jì)數(shù)器每次加8, 需連續(xù)進(jìn)行16次發(fā)送,使錯(cuò)誤計(jì)數(shù)器值達(dá)到128引起總線切換。在位速率125kbps情況下,發(fā)送最長(zhǎng)為128位的報(bào)文,若忽略控制器重發(fā)間隔時(shí)間,從故障發(fā)生到被檢測(cè)到的響應(yīng)時(shí)間為:
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
 
為避免在總線切換時(shí)丟失報(bào)文,冗余算法需回讀故障控制器中未發(fā)送報(bào)文,由此產(chǎn)生額外的故障處理時(shí)間,因?yàn)槊總€(gè)發(fā)送郵箱最多存儲(chǔ)3個(gè)報(bào)文,假定位速率125kbps不變,備份總線發(fā)送時(shí)即取得仲裁,最長(zhǎng)故障處理時(shí)間為:
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
 
因此總線切換時(shí)間為16. 38+ 3. 07= 19. 45m s。
  
通過實(shí)驗(yàn)測(cè)得在125kbps位速率下連續(xù)發(fā)送不同報(bào)文長(zhǎng)度的總線切換時(shí)間如表1所示:
 
表1:總線切換時(shí)間
 
基于STM32F105微控制器的雙CAN冗余的方案設(shè)計(jì)
 
在125kbps位速率下切換時(shí)間為22.80ms, 比理論計(jì)算值稍長(zhǎng),這是由總線切換時(shí)運(yùn)行冗余算法及讀取控制器錯(cuò)誤寄存器( ESR)所額外消耗的,但在實(shí)際應(yīng)用中,發(fā)送報(bào)文獲取仲裁所需的等待時(shí)間遠(yuǎn)大于切換時(shí)間,總線故障并不頻繁發(fā)生,冗余切換算法對(duì)系統(tǒng)的運(yùn)行并無顯著影響。

結(jié)語:此次設(shè)計(jì)方案充分利用了微控制器STM32F105,在其中內(nèi)置了兩路CAN控制器,這種設(shè)計(jì)思路與傳統(tǒng)的在單片機(jī)總線外擴(kuò)兩片CAN控制器的冗余方案相比,電路設(shè)計(jì)更加簡(jiǎn)單,成本更低,系統(tǒng)的整體可靠性得到了提高。利用雙總線負(fù)載均衡技術(shù),能夠平衡通信負(fù)荷,提高總線帶寬。在船舶機(jī)艙監(jiān)控系統(tǒng)中能夠獲得良好的信號(hào)傳輸。
 
相關(guān)閱讀:

通信系統(tǒng)設(shè)計(jì):基于CAN總線的電動(dòng)汽車電源管理設(shè)計(jì)
關(guān)于CAN總線通訊的電磁兼容設(shè)計(jì)
用于汽車電池監(jiān)控的CAN智能傳感器
要采購(gòu)微控制器么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉