三、CAN總線通信系統(tǒng)的原理和方案
1.系統(tǒng)原理
CAN總線和總線上的各個(gè)CAN節(jié)點(diǎn)在具備完整的通信協(xié)
議下,一起構(gòu)成了CAN網(wǎng)絡(luò)。本系統(tǒng)設(shè)計(jì)兩個(gè)CAN節(jié)點(diǎn)進(jìn)行互相通信,其中采用瑞典Kvaser公司的KvaserLeafProfessional———CAN總線分析儀作為總線的一個(gè)節(jié)點(diǎn),負(fù)責(zé)與上位機(jī)通信,同時(shí)檢測(cè)總線狀況,包括總線負(fù)載、信號(hào)幀的收發(fā)數(shù)量以及錯(cuò)誤幀情況;另一個(gè)是基于52單片機(jī)自主開發(fā)的CAN節(jié)點(diǎn),可以實(shí)現(xiàn)對(duì)模擬信號(hào)的采集并轉(zhuǎn)化為CAN信號(hào)。該CAN節(jié)點(diǎn)能夠處理CAN總線上的數(shù)據(jù),能夠?qū)AN2.0(A/B)協(xié)議進(jìn)行解析,并由硬件完成一些CAN基本功能,比如為接收到的CAN報(bào)
文提供一定大小的接收緩沖區(qū)、按照一定規(guī)則對(duì)接收到的數(shù)據(jù)完成ID濾波以及執(zhí)行CRC校驗(yàn)等等。每個(gè)CAN節(jié)點(diǎn)包括以下三個(gè)部分[3]:①微控制器負(fù)責(zé)完成CAN控制器的初始化,進(jìn)行與CAN控制器的數(shù)據(jù)傳遞,并按照預(yù)定的程序進(jìn)行處理;②CAN控制器主要負(fù)責(zé)將數(shù)據(jù)以CAN報(bào)文的形式傳遞,并進(jìn)行系統(tǒng)的診斷、測(cè)試以及處理CAN總線上的錯(cuò)誤等;③CAN收發(fā)器是CAN控制器和CAN總線之間的接口,完成物理電平的轉(zhuǎn)換。
2.總體方案
較常見的CAN節(jié)點(diǎn)組成框圖如圖1所示。
圖1中方案1的一種經(jīng)典配置就是“51系列微控制器+獨(dú)立的CAN控制器SJA1000+高速CAN收發(fā)器TJA1050”[4]。此方案的優(yōu)點(diǎn)在于靈活性,設(shè)計(jì)者可以選用性價(jià)比最高、最適合實(shí)際用途的51系列微控制器。缺點(diǎn)就是硬件電路相對(duì)復(fù)雜,同下面的方案2相比,需要設(shè)計(jì)微控制器和CAN控制器之間的連接電路。
方案2采用的是“內(nèi)嵌CAN控制器的微控制器+高速CAN收發(fā)器TJA1050”[4]。其中,STM8A是ST公司一款性能出眾的帶片內(nèi)CAN控制器的微控制器。此方案的優(yōu)點(diǎn)在于電路設(shè)計(jì)簡(jiǎn)單,由于將CAN控制器集成在微控制器片內(nèi),這樣就減少了部分連接電路。此方案的缺點(diǎn)就是目前可供選擇的帶片內(nèi)CAN控制器的微控制器相對(duì)較少,用戶選擇余地不大。
由于STM8A芯片有128個(gè)引腳,其內(nèi)部的構(gòu)造比51系列單片機(jī)復(fù)雜,同時(shí)也需要專用的編譯器和調(diào)試工具,而且價(jià)格昂貴,給編程者的開發(fā)增加了難度,因此本系統(tǒng)的一個(gè)節(jié)點(diǎn)采用第一種方案。
另外一個(gè)節(jié)點(diǎn)采用瑞典Kvaser公司的KvaserLeafProfession-al,它是超高性能的USB接口單通道CAN總線分析儀,支持CAN協(xié)議,其MagiSync技術(shù)是Kvaser的國(guó)際核心專利技術(shù)之一。它能夠把多個(gè)CAN總線分析儀連接到同一臺(tái)PC機(jī)上,并通過(guò)Kva-serMagiSync技術(shù)同步各個(gè)CAN總線分析儀的時(shí)間標(biāo)簽,其靈活性特別適合多通道的應(yīng)用項(xiàng)目。每個(gè)CAN消息均標(biāo)有1μs精度的時(shí)間標(biāo)簽(timestamp),每秒可以處理高達(dá)20000個(gè)幀。
系統(tǒng)軟件選擇了虛擬儀器軟件LabVIEW。通過(guò)設(shè)計(jì),軟件實(shí)現(xiàn)的功能為:(1)能夠全程實(shí)時(shí)監(jiān)控每個(gè)節(jié)點(diǎn)在總線上的通信情況,并能完整記錄、歷史回放??稍O(shè)置總線波特率和發(fā)送各種數(shù)據(jù)幀,包括遠(yuǎn)程幀、標(biāo)準(zhǔn)幀、擴(kuò)展幀和錯(cuò)誤幀。(2)具有判定、報(bào)警及統(tǒng)計(jì)功能,可根據(jù)檢測(cè)錯(cuò)誤計(jì)數(shù)器來(lái)界定“錯(cuò)誤激活”、“錯(cuò)誤認(rèn)可”和“總線關(guān)閉”等三種故障。
四、硬件設(shè)計(jì)
本系統(tǒng)自主設(shè)計(jì)的CAN節(jié)點(diǎn),采用89C52作為節(jié)點(diǎn)的微控制器。在CAN總線通信接口中,CAN通信的控制器采用SJA1000,CAN的收發(fā)器采用TJA1050。
圖2 CAN節(jié)點(diǎn)電路原理圖
圖2為CAN節(jié)點(diǎn)的硬件電路原理圖。從圖中可以看出,電路主要由五個(gè)部分所構(gòu)成:微控制器89C52、獨(dú)立CAN通信控
制器SJA1000、CAN總線收發(fā)器TJA1050、顯示電路和控制電路。微控制器89C52負(fù)責(zé)SJA1000的初始化,通過(guò)控制SJA1000實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù)。SJA1000的AD0~AD7連接到89C52的P0口,CS連接到89C52的P2.0。P2.0為0時(shí),CPU片外存儲(chǔ)器地址可選中SJA1000,CPU通過(guò)這些地址可對(duì)SJA1000執(zhí)行相應(yīng)的讀/寫操作。SJA1000的RD、WR、分別與89C52的對(duì)應(yīng)引腳相連接,INT接89C52的INT0,89C52也可通過(guò)中斷方式訪問(wèn)SJA1000。
TJA1050與CAN總線的接口部分采用了一定的安全和抗干擾措施。TJA1050的CAN-H和CAN-L引腳各自通過(guò)一個(gè)5Ψ的電阻與CAN總線相連,電阻可起到一定的限流作用,保護(hù)TJA1050免受過(guò)流的沖擊。CANH和CANL與地之間并聯(lián)了兩個(gè)30P的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的能力。
顯示電路通過(guò)使用四個(gè)七段管,并使用74LS138和74LS373進(jìn)行控制??刂齐娐分饕伤膫€(gè)按鈕組成,分別對(duì)輸入信號(hào)、總線波特率、模式轉(zhuǎn)換和數(shù)據(jù)發(fā)送進(jìn)行控制。
硬件電路設(shè)計(jì)的時(shí)候,需注意的地方有:
?。?)SJA1000與AT89C52的復(fù)位電路是不同的,單片機(jī)的RST是高電平有效的,而SJA1000的RST是低電平有效的,而且不是用一個(gè)非門把單片機(jī)的RST反相就可以的[5]。有兩種解決方式:第一種是使用單片機(jī)的IO引腳來(lái)控制SJA的復(fù)位引腳,優(yōu)點(diǎn)是單片機(jī)完全控制SJA的復(fù)位過(guò)程;第二種是使用微處理器電源監(jiān)控芯片MAX708,它可以提供兩種復(fù)位信號(hào),可以滿足需要。
?。?)SJA1000的CLKOUT引腳可以提供時(shí)鐘輸出信號(hào),但是如果該信號(hào)作為AT89C52的時(shí)鐘信號(hào),則容易出現(xiàn)問(wèn)題,建議分別使用晶振。
(3)CAN-H與CAN-L之間需接120歐姆電阻。
?。?)電路板中使用兩個(gè)9針串口,為的是方便于構(gòu)建一個(gè)CAN小網(wǎng)絡(luò),并方便于接不同串口的CAN檢測(cè)儀。
五、 軟件設(shè)計(jì)
1. CAN節(jié)點(diǎn)的軟件部分設(shè)計(jì)
本節(jié)點(diǎn)的軟件編程主要包括單片機(jī)初始化、CAN控制器的初始化、CAN總線數(shù)據(jù)的發(fā)送和接收等幾個(gè)部分。初始化設(shè)置主要包括通信的波特率的設(shè)置、報(bào)文濾波器的設(shè)置和輸出模式的設(shè)置。主程序的流程圖如圖3所示
圖3 主程序流程圖
?。?)數(shù)據(jù)發(fā)送 將待發(fā)送的數(shù)據(jù)打包成符合CAN協(xié)議的幀格式后,便可寫入SJA1000發(fā)送緩沖區(qū),并自動(dòng)發(fā)送。圖4為發(fā)送子程序流程圖。在寫發(fā)送緩沖區(qū)前必須查詢其狀態(tài),數(shù)據(jù)只能寫入空閑的發(fā)送緩沖區(qū)。發(fā)送大量數(shù)據(jù)時(shí),這一步顯得尤其重要,否則發(fā)送可靠性將不能保證啟動(dòng)發(fā)送命令后,只能通過(guò)查詢或配置發(fā)送成功中斷判斷數(shù)據(jù)是否發(fā)送成功。發(fā)送程序分發(fā)送遠(yuǎn)程幀和數(shù)據(jù)幀兩種,遠(yuǎn)程幀無(wú)數(shù)據(jù)場(chǎng)。
圖4 發(fā)送子程序流程圖
?。?)數(shù)據(jù)接收 接收數(shù)據(jù)可采用查詢方式或中斷方式。在某一段時(shí)間內(nèi),CAN總線并不是總是在活動(dòng),為了提高效率,可采用中斷方式在初始化程序中必須打開接收中斷。在中斷服務(wù)子程序中,判斷是否有接收中斷標(biāo)志,有則讀取接收緩沖區(qū)數(shù)據(jù)。為了防止接收緩沖區(qū)數(shù)據(jù)溢出,可開辟一個(gè)循環(huán)接收數(shù)據(jù)隊(duì)列來(lái)暫時(shí)存儲(chǔ)數(shù)據(jù),主程序則通過(guò)查詢?cè)撽?duì)列來(lái)獲得總線數(shù)據(jù)。
2. 上位機(jī)程序設(shè)計(jì)
本系統(tǒng)的PC機(jī)端的軟件采用美國(guó)NI公司的圖形化編程語(yǔ)言LabVIEW平臺(tái),該平臺(tái)是測(cè)控領(lǐng)域優(yōu)秀軟件,被譽(yù)為工程師的語(yǔ)言,可以加快產(chǎn)品開發(fā)速度。在該套測(cè)試系統(tǒng)中,采用順序結(jié)構(gòu),并使用瑞典Kvaser公司提供的僅適用于Kvaser硬件的多個(gè)子VI,利用這些子VI建立控制模塊,并通過(guò)一定的邏輯關(guān)系聯(lián)系起來(lái),完成對(duì)硬件的驅(qū)動(dòng)、測(cè)量參數(shù)設(shè)定以及數(shù)據(jù)的采集和保存。
前面板一共有三部分:第一部分是CAN總線系統(tǒng)的相關(guān)參數(shù)配置,如圖5所示,其中包括連接在PC機(jī)上的通道選擇;總線通道的類型(單一、擴(kuò)展和虛擬通道)還包括總線的波特率以及總線狀態(tài)。第二部分為數(shù)據(jù)發(fā)送窗口,主要用于對(duì)所要發(fā)送的數(shù)據(jù)進(jìn)行定義以及顯示總線是否有錯(cuò)誤,如圖6所示,其中包括CAN數(shù)據(jù)幀的ID、數(shù)據(jù)長(zhǎng)度控制字DLC、八個(gè)字節(jié)的數(shù)據(jù)以及幀類型的選擇:遠(yuǎn)程幀、標(biāo)準(zhǔn)幀、擴(kuò)展幀和錯(cuò)誤幀。另外還可以顯示總線錯(cuò)誤和錯(cuò)誤源。該窗口負(fù)責(zé)總線上數(shù)據(jù)的傳輸,是整個(gè)程序中的核心部分。最后一部分是數(shù)據(jù)接收窗口,主要負(fù)責(zé)接收整個(gè)總線上的數(shù)據(jù),當(dāng)點(diǎn)擊“GoBuson”之后,就可以自動(dòng)接收數(shù)據(jù),同時(shí)可以檢測(cè)接收錯(cuò)誤。如圖7所示,其中包括了對(duì)數(shù)據(jù)的接收時(shí)間(以系統(tǒng)初始化為0時(shí)開始計(jì)時(shí))、數(shù)據(jù)幀的ID、數(shù)據(jù)長(zhǎng)度控制字以及8個(gè)字節(jié)的數(shù)據(jù),用戶可以通過(guò)此窗口檢測(cè)總線狀況。
圖5 總線參數(shù)配置窗口 圖6數(shù)據(jù)發(fā)送窗口
圖7 數(shù)據(jù)接收窗口
后面板的程序流程圖主要是由瑞典Kvaser公司提供的大約四十二個(gè)針對(duì)本公司產(chǎn)品的CAN子VI程序,其中包括四類:
?。?)CAN總線參數(shù)設(shè)置子VI:這些VI主要用于對(duì)CAN通道進(jìn)行參數(shù)設(shè)置,其中包括CAN總線的初始化、CAN協(xié)議版本的選擇、波特率以及總線的幀類型選擇等等,還包括了Kvaser分析儀在LabVIEW下運(yùn)行的驅(qū)動(dòng)程序。
(2)CAN總線數(shù)據(jù)寫入子VI:這些VI主要用于將CAN通道需要送出的數(shù)據(jù)打包成符合CAN協(xié)議的信息并發(fā)送到SJA1000的輸入緩存器。
(3)CAN總線數(shù)據(jù)讀出子VI:這些VI可以讀出CAN口緩存中的數(shù)據(jù)。其中還包括錯(cuò)誤計(jì)數(shù)器、同步讀數(shù)據(jù)和定時(shí)器等。
?。?)CAN總線關(guān)閉子VI:這些VI用于將打開的CAN口關(guān)閉。調(diào)用CAN子程序并按照CAN2.0的通信標(biāo)準(zhǔn),利用G語(yǔ)言,完成通過(guò)LabVIEW軟件平臺(tái)進(jìn)行收發(fā)數(shù)據(jù),圖8為程序流程圖。
六、總結(jié)
本系統(tǒng)實(shí)現(xiàn)了將傳感器輸出的電壓信號(hào)轉(zhuǎn)化為CAN總線信號(hào),并使用其中的一個(gè)字節(jié)表示其變化過(guò)程。將先進(jìn)的現(xiàn)場(chǎng)總線技術(shù)(CANBUS)應(yīng)用于智能的測(cè)量與通信系統(tǒng),可以大大提高系統(tǒng)的可靠性。自主開發(fā)了符合國(guó)際標(biāo)準(zhǔn)的基于單片機(jī)的智能CAN節(jié)點(diǎn),不僅大量節(jié)約了資金,而且可以根據(jù)不同的需要連接不同的傳感器,實(shí)現(xiàn)基于CAN總線的智能測(cè)量節(jié)點(diǎn)。基于LabVIEW的上位機(jī)提供了良好的人機(jī)界面,使操作更加方便、直觀。
評(píng)論