摘 要: 分析了CAN總線通信的性能和技術(shù)特點(diǎn),,介紹了CAN總線結(jié)構(gòu)的模式及應(yīng)用趨勢(shì)。針對(duì)采用單片機(jī)實(shí)現(xiàn)與CAN總線接口的問題,,詳細(xì)探討了用STC15F2K60S2單片機(jī)結(jié)合總線控制器SIA1000和總線收發(fā)器PCA82C250芯片構(gòu)成CAN總線接口電路的實(shí)現(xiàn),,并介紹了接口驅(qū)動(dòng)軟件的編制流程。
關(guān)鍵詞: CAN總線; 控制器,;收發(fā)器,;單片機(jī); 通信; 接口;
控制器局域網(wǎng)絡(luò)CAN(Controller Area Network)是由研發(fā)和生產(chǎn)汽車電子產(chǎn)品著稱的德國(guó)BOSCH公司開發(fā)的,,并最終成為國(guó)際標(biāo)準(zhǔn)(ISO11898),,是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。在北美和西歐,,CAN總線協(xié)議已經(jīng)成為汽車計(jì)算機(jī)控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線,,并且擁有以CAN為底層協(xié)議專為大型貨車和重工機(jī)械車輛設(shè)計(jì)的J1939協(xié)議。近年來,,由于該總線所具有的高可靠性和良好的錯(cuò)誤檢測(cè)能力受到重視,,被廣泛應(yīng)用于汽車計(jì)算機(jī)控制系統(tǒng)和環(huán)境溫度惡劣、電磁輻射強(qiáng)和振動(dòng)大的工業(yè)環(huán)境。
1 CAN總線通訊原理
CAN總線目前采用2.0規(guī)范,。CAN 2.0規(guī)范分為CAN 2.0A與CAN 2.0B,。CAN 2.0A 支持標(biāo)準(zhǔn)的11 位標(biāo)識(shí)符,CAN 2.0B同時(shí)支持標(biāo)準(zhǔn)的11位標(biāo)識(shí)符和擴(kuò)展的29位標(biāo)識(shí)符,。
CAN總線的物理層包括物理層信號(hào)(PLS),、媒體訪問單元(PMA)和介質(zhì)相關(guān)接口(MDI)3部分,主要完成電氣連接,、驅(qū)動(dòng)器/接收節(jié)點(diǎn)特性,、位定時(shí)、同步,、位編碼/解碼的描述,。
在國(guó)際標(biāo)準(zhǔn)ISO11898中,對(duì)基于雙絞線的CAN系統(tǒng)建議了電氣連接,。為了抑制信號(hào)在端點(diǎn)的反射,,CAN總線要求在兩個(gè)端點(diǎn)上安裝兩個(gè)120 Ω的終端電阻。CAN總線的驅(qū)動(dòng)可采用單線上拉,、單線下拉和雙線驅(qū)動(dòng),,如果所有節(jié)點(diǎn)的晶體管均處于關(guān)斷狀態(tài),則CAN總線上呈現(xiàn)隱性狀態(tài),,如果CAN總線上至少有一個(gè)節(jié)點(diǎn)發(fā)送端的那對(duì)晶體管導(dǎo)通,,產(chǎn)生的電流流過終端電阻,在CAN_H和CAN_L兩條線之間產(chǎn)生差分電壓,,總線上就呈現(xiàn)出顯性狀態(tài),。CAN總線上的信號(hào)接收采用差分比較器,讀取差分電壓值,。
理想發(fā)送節(jié)點(diǎn)在沒有重同步的情況下每秒發(fā)送的位數(shù)量定義為標(biāo)稱位速率(Nominal Bit Rate),。標(biāo)稱位時(shí)間(Nominal Bit Time)定義為標(biāo)稱位速率的倒數(shù),即標(biāo)稱位時(shí)間 = 1/標(biāo)稱位速率,。位時(shí)間指的是CAN總線通信時(shí)1 bit數(shù)據(jù)持續(xù)的時(shí)間,,CAN總線工作時(shí)標(biāo)稱位速率是不變的,那么標(biāo)稱位時(shí)間也保持不變,,即要求每個(gè)位在總線上的時(shí)間要保持一致,。CAN總線的標(biāo)稱位時(shí)間可劃分為4個(gè)同步段(SYNC_SEG)、傳播段(PROP_SEG),、相位緩沖段1(PSEG1)和相位緩沖段2 (PSEG2)不重疊的時(shí)間段,。
CAN總線標(biāo)稱位時(shí)間中各個(gè)時(shí)間段都可以根據(jù)具體網(wǎng)絡(luò)情況而重新設(shè)置,均由CAN控制器的可編程位定時(shí)參數(shù)來實(shí)現(xiàn),。位時(shí)間內(nèi)時(shí)間段的設(shè)定能實(shí)現(xiàn)CAN總線節(jié)點(diǎn)同步,、網(wǎng)絡(luò)發(fā)送延遲補(bǔ)償和采樣點(diǎn)定位等功能,。
CAN總線的同步使CAN總線系統(tǒng)的收發(fā)兩端在時(shí)間上保持步調(diào)一致。從位定時(shí)的同步方式考慮,,CAN總線實(shí)質(zhì)上屬于異步通信協(xié)議,,每傳輸一幀,以幀起始位開始,,而以幀結(jié)束及隨后的間歇場(chǎng)結(jié)束,。這就要求收/發(fā)雙方從幀起始位開始必須保持幀內(nèi)報(bào)文代碼中的每一位嚴(yán)格的同步,。CAN 總線的位同步只有在節(jié)點(diǎn)檢測(cè)到“隱性位”到“顯性位”的跳變時(shí)才會(huì)產(chǎn)生,,當(dāng)跳變沿不位于位周期的同步段之內(nèi)時(shí)將會(huì)產(chǎn)生相位誤差。該相位誤差就是跳變沿與同步段結(jié)束位置之間的距離,。相位誤差源于節(jié)點(diǎn)的振蕩器漂移,、網(wǎng)絡(luò)節(jié)點(diǎn)之間的傳播延遲以及噪聲干擾等。CAN 協(xié)議規(guī)定了硬同步和重同步兩種類型的同步,。
硬同步只在總線空閑時(shí)通過一個(gè)從“隱性位”到“顯性位”的跳變(幀起始)來完成,,此時(shí)不管有沒有相位誤差,所有節(jié)點(diǎn)的位時(shí)間重新開始,。強(qiáng)迫引起硬同步的跳變沿位于重新開始的位時(shí)間的同步段(SYNC_SEG)之內(nèi),。
重同步在報(bào)文的隨后位中,每當(dāng)有從“隱性位”到“顯性位”的跳變,,并且該跳變落在了同步段之外,,就會(huì)引起一次重同步。重同步機(jī)制可以根據(jù)跳變沿加長(zhǎng)或者縮短位時(shí)間以調(diào)整采樣點(diǎn)的位置,,保證正確采樣,。
2 CAN總線的接口
CAN總線的接口主要包括電源電路、復(fù)位電路,、時(shí)鐘電路和STC15F2K60S2單片機(jī)與SJA1000接口電路,、CAN總線收發(fā)器電路幾部分。
2.1 CAN總線控制器SJA1000
SJA1000是NXP公司研制的一款獨(dú)立CAN控制器,,可以完成CAN總線標(biāo)準(zhǔn)中物理層和數(shù)據(jù)鏈路層的所有功能,,在汽車制造和其他的工業(yè)領(lǐng)域得到了十分廣泛的應(yīng)用。SJA1000有BasicCAN 模式和PeliCAN模式兩種不同的協(xié)議模式,。BasicCAN模式是復(fù)位時(shí)默認(rèn)模式,,這種模式與早期產(chǎn)品PCA82C200兼容,只支持CAN 2.0A協(xié)議,;PeliCAN模式是新增加的工作模式,,支持CAN 2.0B協(xié)議的一些新特性。
SJA1000的內(nèi)部功能結(jié)構(gòu)如圖1所示,,主要包括接口管理邏輯,、發(fā)送緩沖器,、接收緩沖器、驗(yàn)收過濾器,、位流處理器,、位定時(shí)邏輯和錯(cuò)誤管理邏輯等功能單元。
2.2 CAN總線收發(fā)器PCA82C250
PCA82C250是NXP公司針對(duì)汽車中的高速應(yīng)用而生產(chǎn)的CAN總線收發(fā)器,。CAN總線收發(fā)器是CAN控制器和物理總線的接口,,用于對(duì)總線提供差動(dòng)發(fā)送能力和對(duì)CAN控制器提供差動(dòng)接收能力。PCA82C250是目前應(yīng)用最廣泛的CAN總線收發(fā)器,。設(shè)計(jì)CAN總線接口時(shí),,PCA82C250一般與CAN控制器(例如SJA1000)配合工作。
PCA82C250的內(nèi)部功能結(jié)構(gòu)如圖2所示,,主要包括基準(zhǔn)電壓,、發(fā)送器、接收器,、保護(hù)電路和工作模式控制電路等,。
PCA82C250的工作模式:通過斜率電阻輸入引腳(RS)的3種不同接法,可以設(shè)置PCA82C250的工作模式,,如表1所示,。
⑴高速模式,。在高速工作模式下,,發(fā)送器輸出級(jí)晶體管將以盡可能快的速度打開和關(guān)閉,且不采用任何措施用于限制上升和下降的斜率,。采用高速模式時(shí),,最好使用屏蔽電纜以避免射頻干擾問題。通過把斜率電阻輸入引腳(RS)接地選擇高速模式,。
?、菩甭士刂颇J健?duì)于較低速度或較短總線長(zhǎng)度的應(yīng)用場(chǎng)合,,可使用非屏蔽雙絞線或平行線作為總線,。此時(shí),為降低射頻干擾,,應(yīng)對(duì)上升斜率和下降斜率進(jìn)行控制,。上升斜率和下降斜率可通過由斜率電阻輸入引腳(RS)接至地的連接電阻進(jìn)行控制,斜率正比于斜率電阻輸入引腳(RS)的電流輸出,。
?、谴龣C(jī)模式。通過斜率電阻輸入引腳(RS)接至高電平選擇低電流待機(jī)模式,。在此模式下,,發(fā)送器被關(guān)閉,,而接收器轉(zhuǎn)至低電流。若在總線上檢測(cè)到顯性位,,RXD將變?yōu)榈碗娖?。微控制器?yīng)將PCA82C250轉(zhuǎn)回至正常工作狀態(tài),以對(duì)此信號(hào)作出響應(yīng),。注意:由于處在待機(jī)模式下,,接收器是慢速的,因此,,第一個(gè)報(bào)文將被丟失,。
2.3 STC15F2K60S2單片機(jī)
STC15F2K60S2單片機(jī)是STC公司生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),指令代碼完全兼容傳統(tǒng)8051,,但速度快8~12倍,。內(nèi)部集成高精度R/C時(shí)鐘,,5 MHz~ 35 MHz范圍內(nèi)可設(shè)置,,可省掉外部電路的晶振和外部的復(fù)位電路,芯片內(nèi)置2 KB容量的SRAM和60KB容量程序存儲(chǔ)器,。工作電壓范圍為3.8 V~5.5 V,,是寬電壓范圍。
2.4 STC15F2K60S2單片機(jī)與SJA1000接口電路
stc15f2k60s2單片機(jī)與SJA1000接口電路主要包括數(shù)據(jù)線,、地址線和控制線的接線設(shè)計(jì),,如圖2-3所示。SJA1000的MODE接高電平選擇Intel接口模式,。STC15F2K60S2單片機(jī)的P0口接SJA1000的數(shù)據(jù)/地址總線,,8位數(shù)據(jù)線用于單片機(jī)與SJA1000之間的數(shù)據(jù)傳遞,低8位地址線用于SJA1000內(nèi)部的CAN地址尋址,。STC15F2K60S2單片機(jī)可采用線選法提供片選信號(hào),,即SJA1000的片選線接P2口任意一個(gè)口線(高8位地址線)。圖3中P2.7作為SJA1000的片選線,,則片選地址為7F00H,,片選地址和CAN地址相加得到SJA1000內(nèi)部寄存器的地址。單片機(jī)和SJA1000的讀寫允許信號(hào),、地址鎖存信號(hào)控制線對(duì)應(yīng)連接即可,。
2.5 CAN總線收發(fā)器電路
CAN總線收發(fā)器電路是指SJA1000與PCA82C250之間的電路,主要包括串行通信線和模式選擇兩部分,。串行通信線包括串行數(shù)據(jù)發(fā)送線和串行數(shù)據(jù)接收線,,如不采用光電隔離則SJA1000與PCA82C250對(duì)應(yīng)連接即可,如圖4所示,。PCA82C250若需要使用待機(jī)模式時(shí),,RS引腳可以連接微控制器的I/O線P2.0,;若不使用待機(jī)模式時(shí),RS引腳可以經(jīng)電阻接地(斜率控制模式),。
3 CAN總線接口軟件設(shè)計(jì)
CAN總線接口軟件設(shè)計(jì)主要分為初始化程序,、發(fā)送子程序和接收子程序3部分。
3.1 SJA1000初始化程序
SJA1000要完成正常的CAN通信,,需要進(jìn)行必要的初始化參數(shù)設(shè)置,。這些初始化參數(shù)包括驗(yàn)收過濾器、總線定時(shí)寄存器,、輸出驅(qū)動(dòng)方式和中斷系統(tǒng)等,。這些設(shè)置實(shí)際上是對(duì)SJA1000內(nèi)部相關(guān)寄存器的寫操作。SJA1000初始化的程序流程如圖5所示,。
3.2 發(fā)送子程序
發(fā)送子程序主要分為3個(gè)流程:⑴判斷SJA1000當(dāng)前的狀態(tài)是否允許報(bào)文發(fā)送,;⑵將要發(fā)送的數(shù)據(jù)按照CAN協(xié)議規(guī)定的幀格式組成數(shù)據(jù)幀,存入SJA1000的發(fā)送緩沖器,;⑶寫發(fā)送命令,。發(fā)送子程序流程如圖6所示。發(fā)送前,,一般檢查3個(gè)狀態(tài)位:一是接收狀態(tài),,如果目前SJA1000正在接收?qǐng)?bào)文,則不能發(fā)送,,至少等本次接收完成后才能申請(qǐng)發(fā)送,;二是檢查發(fā)送完成狀態(tài),也即檢查 SJA1000是否正在發(fā)送報(bào)文,。如果正在發(fā)送,,要等本次發(fā)送完成,才能啟動(dòng)新的發(fā)送任務(wù),;三是檢查發(fā)送緩沖器是否被鎖定,,發(fā)送緩沖器處于不鎖定狀態(tài),才能發(fā)送報(bào)文,。
3.3 接收子程序
接收子程序的處理比發(fā)送子程序要復(fù)雜些,。在接收子程序中,不僅要對(duì)接收數(shù)據(jù)作出處理,,還要對(duì)各種錯(cuò)誤,、數(shù)據(jù)溢出等進(jìn)行判斷和處理,由于篇幅限制,,本文只討論對(duì)接收數(shù)據(jù)作出處理,。接收子程序主要分為3個(gè)流程:⑴判斷SJA1000是否有報(bào)文可以接收;⑵讀取SJA1000的接收緩沖器中的報(bào)文,;⑶寫釋放接收緩沖器命令,。接收數(shù)據(jù)處理有:查詢接收方式和中斷接收方式兩種,。圖7為查詢方式接收子程序流程圖。
本文介紹的采用STC15F2K60S2單片機(jī)結(jié)合SJA1000和PCA82C250芯片實(shí)現(xiàn)CAN總線的接口已經(jīng)在某鋼管廠無損探傷設(shè)備上得到了實(shí)際應(yīng)用,,原系統(tǒng)采用的是RS-232串行總線的形式,,不僅工程安裝復(fù)雜,成本高,,而且數(shù)據(jù)傳輸速率低,,實(shí)時(shí)更新慢,經(jīng)常出現(xiàn)檢查跟蹤滯后的情況,。采用CAN總線后,,系統(tǒng)的抗干擾能力明顯提高,特別是對(duì)微弱信號(hào)的分辨,,較以前的系統(tǒng)有很大的改善,,漏檢率明顯下降,保證了產(chǎn)品的合格率,。
參考文獻(xiàn)
[1] 曹小華,,趙成. 基于現(xiàn)場(chǎng)總線CAN的實(shí)時(shí)監(jiān)控系統(tǒng)研究與設(shè)計(jì)[J]. 武漢理工大學(xué)學(xué)報(bào)(交通與工程版),2005(6): 910-912.
[2] 李愛軍. 四種現(xiàn)場(chǎng)總線的技術(shù)特點(diǎn)比較[J]. 城市軌道交通研究,,2009(4):67-70.
[3] 鄔寬明. CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M]. 北京:北京航空航天大學(xué)出版社,,1996.
[4] 孫兵,何瑾,,陳廣廈.基于DSP的CAN總線與以太網(wǎng)互聯(lián)系統(tǒng)研制[J].儀器儀表學(xué)報(bào),2008,,29(2):377—380.
[5] 朱齊丹,,汪瞳.CAN通信物理層建模與仿真口[J].計(jì)算機(jī)工程與應(yīng)用,2008,,44(36):11—15.
[6] 李真花, 崔健.CAN總線輕松入門與實(shí)踐[M]. 北京:北京航空航天大學(xué)出版社,, 2011.