?嵌入式CAN總線入門篇(底層細節(jié))
CAN通訊協(xié)議ISO-11898:2003標(biāo)準(zhǔn)介紹網(wǎng)絡(luò)上的設(shè)備間信息是如何傳遞的,以及符合開放系統(tǒng)互聯(lián)參考模型(OSI)的哪些分層項。實際通訊是在連接設(shè)備的物理介質(zhì)中進行,物理介質(zhì)的特性由模型中的物理層定義。ISO11898體系結(jié)構(gòu)定義七層,OSI模型中的最低兩層作為數(shù)據(jù)鏈路層和物理層,見圖2-1。
ISO-11898:2003標(biāo)準(zhǔn),帶有11位標(biāo)識符,提供的最高信號速率從125Kbps到1Mbps。更遲一些的修訂標(biāo)準(zhǔn)使用了擴展的29位標(biāo)識符。標(biāo)準(zhǔn)11位標(biāo)識符位域參見圖3-1,提供2048個不同的報文標(biāo)識符,擴展29位標(biāo)識符位域參見圖3-2,提供537百萬個不同報文標(biāo)識符。
如果多個節(jié)點同時訪問總線,CAN使用非破壞式、逐位仲裁的方式?jīng)Q定哪個節(jié)點使用總線:各發(fā)送節(jié)點從仲裁域(標(biāo)識符和RTR域)的第1位開始進行仲裁,連續(xù)輸出顯性電平(0)最多的節(jié)點可以繼續(xù)發(fā)送。因此標(biāo)識符數(shù)值越低的CAN報文,優(yōu)先級越高。標(biāo)識符數(shù)值為0的CAN報文,具有最高優(yōu)先級,因為它輸出的顯性電平最多。
數(shù)據(jù)幀或遠程幀的剩余位域(CRC界定符、應(yīng)答域和幀結(jié)尾域)形式固定,不填充。錯誤幀和過載幀也不填充。
CAN網(wǎng)絡(luò)同步需要足夠多的上升沿,這是CAN協(xié)議規(guī)定位填充的目的之一。位填充的其它作用:確保數(shù)據(jù)幀不會被當(dāng)作錯誤幀(由6個連續(xù)的顯性或隱性位組成)、確保正確識別幀結(jié)束標(biāo)志(7個連續(xù)隱性位)。
報文層的錯誤檢測包括CRC和ACK。16位的CRC域包含15位校驗和、1位界定符。ACK域包括1位應(yīng)答位、1位界定符。
CRC校驗錯誤很好理解,它對數(shù)據(jù)域以及數(shù)據(jù)域之前的位生產(chǎn)CRC校驗。由于一幀CAN報文數(shù)據(jù)流很?。ㄗ疃?個用戶數(shù)據(jù)),所以15位CRC的偵錯能力非常優(yōu)秀。
ACK域是怎么起作用的呢?這是由CAN協(xié)議規(guī)定的,即發(fā)送節(jié)點發(fā)送一幀數(shù)據(jù)后,接收節(jié)點必須向發(fā)送節(jié)點應(yīng)答,如果發(fā)送節(jié)點沒有收到接收節(jié)點的應(yīng)答信號,就會認為自己發(fā)送失敗,從而重傳數(shù)據(jù)。
報文層的第三種錯誤檢查方法是格式檢查。這種檢查會監(jiān)控報文中那些一定為隱性位的域,如果這些域中出現(xiàn)顯性位,則檢測到格式錯誤。這些域包括SOF、EOF、ACK的界定符和CRC的界定符。
位流層的錯誤檢測之一是發(fā)送到總線上的每一個數(shù)據(jù)位,都會被監(jiān)視,如果發(fā)現(xiàn)發(fā)送的位和總線上的位不相同時,產(chǎn)生位錯誤。這種監(jiān)視機制并不會監(jiān)視仲裁域的位,這是因為多個節(jié)點同時競爭總線時,優(yōu)先級高的節(jié)點可能會覆寫總線上的仲裁域位。
位流層的另外一個錯誤檢測機制是位填充規(guī)則:5個連續(xù)相同邏輯位之后,如果第6個位的邏輯還和前五個相同,則產(chǎn)生位填充錯誤。
高速ISO 11898標(biāo)準(zhǔn)規(guī)定了CAN傳輸最高速率為1Mbps,在這個速率下,傳輸距離最長40米(掛接30個節(jié)點,CAN信號不隔離)。推薦節(jié)點分支長度最大為0.3米、推薦使用帶屏蔽或不帶屏蔽的雙絞線,線纜特性阻抗為120歐姆。
由于CAN收發(fā)器結(jié)構(gòu),從隱性變成顯性由晶體管驅(qū)動,所以都是很陡的,但是從顯性回到隱性,卻需要終端電阻來放電,否則就會由于導(dǎo)線分布電容,緩慢放電,導(dǎo)致位寬錯誤。所以所謂的近距離、低波特率CAN總線不加終端電阻的做法,都是錯誤的。
RS485與CAN總線不同,由于RS485收發(fā)器中一般都內(nèi)置失效保護電路,在近距離、低波特率下允許不加終端匹配電阻。
圖9-11列出帶單屏蔽層的CAN電纜剖析與連接線示范。
一般情況下,電纜供應(yīng)商會提供信號衰減圖表。
如圖11-1所示,1號節(jié)點與2號節(jié)點相隔5km,使用的傳輸電纜直流電阻12.8歐姆/km,終端匹配電阻為124歐姆。1號節(jié)點發(fā)送的波形差分電壓幅值為2V,經(jīng)過5km傳輸電纜到2號節(jié)點時,差分電壓幅值大約為1V,信號衰減了一半!我們在上文第10節(jié)中提到過:CAN總線上的差分電壓>0.9V才能被識別成顯性電平,現(xiàn)在2號節(jié)點只有1V差分電壓,其可靠性已經(jīng)變的較低。
為了保證可靠的數(shù)據(jù)通訊,一個有用的經(jīng)驗法則是:最末端節(jié)點差分電壓幅值不小于1.2V。
注意圖中故意忽略了分布電容和分布電感的影響,因此傳輸?shù)牟ㄐ螞]有畸變。
圖12-1給出了截面積為1.5mm2傳輸電纜,在不同波特率和終端匹配電阻下的最大通訊距離。其中當(dāng)波特率為1Mbps時,通訊距離大約為30米。30米的通訊電纜,其傳輸損耗可以忽略不計,此時影響通訊距離的主要是信號延遲。
通常,傳輸電纜延時為5ns/m、高速光耦延時可達25ns、磁耦合隔離器件延遲3~5ns。在CAN通訊系統(tǒng)中,一個優(yōu)良的延遲標(biāo)準(zhǔn)是:
tl_MAX:最大延遲時間
tBIT:位時間
以1Mbps為例,其位時間為1us,則tl_MAX < 0.245 × tBIT = 0.245 × 1us = 245ns。信號在1.5mm2傳輸電纜上傳輸49米就能達到這個延遲時間,另外再加上信號上升/下降沿時間以及隔離器件、ESD器件、PCB走線延時,實際項目中,1Mbps波特率在1.5mm2傳輸電纜上只能傳輸30米。
這也是為什么RS485波特率可以達到10Mbps甚至50Mbps,而CAN標(biāo)準(zhǔn)最大速率只有1Mbps的原因。
表13-1給出了判定延遲的參考標(biāo)準(zhǔn),在實際項目中,推薦信號延遲處于良好一欄標(biāo)準(zhǔn)。
空載情況下,傳輸電纜的特性阻抗近似為Z=√(L/C),其中L為電纜單位長度感抗,C為電纜單位長度電容。隨著負載的增加,傳輸線上的電容增加(負載電容、負載與總線連接線電容),傳輸電纜特性阻抗相比空載情況下變小。如果負載比較集中,則負載區(qū)傳輸電纜特性阻抗和空閑區(qū)電纜特性阻抗相差較大,從而會引起阻抗不匹配。如圖14-1所示。
3.3V的CAN收發(fā)器一般能達到16pF電容,具體可以參考收發(fā)器數(shù)據(jù)手冊;印制板走線一般0.5pF~0.8pF/cm,這取決于電路板的材質(zhì)和結(jié)構(gòu);連接器和保護裝置(比如ESD器件)的電容值可能范圍會很大,具體要參考設(shè)備數(shù)據(jù)手冊;非屏蔽雙絞線介質(zhì)的分布電容大約在40pF/m~70pF/m。
圖14-2給出了更明了的圖表顯示.
采樣點略靠后,比如80~90%,有利于遠距離傳輸。提高節(jié)點波特率寄存器中的同步跳轉(zhuǎn)寬度SJW值(加大到3個單位時間),可以加大位寬度和采樣點的容忍度。
CAN標(biāo)準(zhǔn)規(guī)定,設(shè)定的理論波特率與實際波特率偏差不得超過±1%;節(jié)點需要容忍的波特率偏差不得小于±3%。
CAN標(biāo)準(zhǔn)對節(jié)點容抗有嚴(yán)格定義,容抗影響上升沿下降沿斜率,節(jié)點容抗增大,上升沿和下降沿會變緩,導(dǎo)致位時間畸變,誤碼率增加。上升沿和下降沿變緩會使得信號延遲變大,在高波特率下,影響信號傳輸質(zhì)量和通訊距離。
節(jié)點容抗不易測量,需要專門儀器。在電路設(shè)計時,要對結(jié)合數(shù)據(jù)手冊中給出的典型值,對CAN接口電路使用的器件總電容值進行估算。對于高波特率情況下,單節(jié)點電容推薦<100pF,多節(jié)點電容推薦值見表17-1所示。低波特率應(yīng)用可以放寬要求。
Rdiff_min:收發(fā)器差動輸入阻抗最小值
RL_min:收發(fā)器可驅(qū)動的負載電阻最小值
RT_min:終端匹配電阻最小值
在上式中,收發(fā)器差動輸入阻抗最小值(Rdiff_min)和收發(fā)器可驅(qū)動的負載阻抗最小值(RL_min)由收發(fā)器芯片決定,終端匹配電阻最小值(RT_min)由傳輸電纜特性阻抗以及具體應(yīng)用決定。
以本公司使用的PCA82C251收發(fā)器為例,其收發(fā)器差動輸入阻抗最小值Rdiff_min = 20K歐姆,收發(fā)器可驅(qū)動的負載阻抗最小值RL_min = 45歐姆,假設(shè)終端匹配電阻最小值RT_min = 120歐姆,則最大節(jié)點數(shù)量為112個。
目前的CAN收發(fā)器都可以容忍一定的共模電壓,ISO 11898標(biāo)準(zhǔn)規(guī)定,CAN收發(fā)器必須能容忍-2V~7V的共模電壓。對于長達數(shù)千米的CAN通訊系統(tǒng)來說,標(biāo)準(zhǔn)規(guī)定的共模電壓容忍能力遠遠達不到實際要求,因此電流隔離對于遠距離數(shù)據(jù)傳輸系統(tǒng)來說仍是必須的。
熱關(guān)斷電路用于幫助CAN收發(fā)器防御因短路產(chǎn)生破壞性電流和高溫。一旦激活熱關(guān)斷電路,設(shè)備會進入關(guān)斷模式。當(dāng)設(shè)備冷卻到正常操作溫度時,設(shè)備自動恢復(fù)運行。
本公司使用的PCA82C251收發(fā)器具有短路保護和熱關(guān)斷保護。短路保護允許總線與24V電源短接。
解決這些問題的一個方法是使用電流隔離:隔離變壓器為系統(tǒng)提供電源,光耦或數(shù)字隔離器件提供數(shù)據(jù)隔離。電流隔離可以去除地環(huán)流,抑制噪聲電壓。采用電流隔離的電路如圖21-1所示,本公司CAN接口電路也采用了電流隔離處理。
CAN總線對信號延遲敏感,因此信號隔離必須使用高速光耦或者磁耦合器件,以減少信號延遲。公司大量使用的TLP521光耦因為延遲時間過大(微秒級)不可以用于CAN接口電路。
CAN總線對電容敏感,在設(shè)計CAN接口電路時,需要使用CAN專用共模電感、專業(yè)ESD器件;需要根據(jù)應(yīng)用的最大波特率和通訊距離,來決定是否在CAN總線上增加濾波電容以及濾波電容的大小。





