基于AVR處理器的CAN總線設(shè)計(jì)方案
1 前 言
本文引用地址:http://butianyuan.cn/article/193173.htm現(xiàn)場(chǎng)總線是當(dāng)前工業(yè)總線領(lǐng)域中最活躍的一個(gè)領(lǐng)域, CAN 總線是工業(yè)數(shù)據(jù)總線領(lǐng)域重要的現(xiàn)場(chǎng)總線之一。CAN 是Contro ller Area N etw ork的縮寫(xiě), 是國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。在當(dāng)今的汽車(chē)產(chǎn)業(yè)中, 出于對(duì)安全性、舒適性、方便性、低公害、低成本的要求, 各種各樣的電子控制系統(tǒng)被開(kāi)發(fā)出來(lái)。由于這些系統(tǒng)之間通信所用的數(shù)據(jù)類(lèi)型及對(duì)可靠性的要求不盡相同, 由多條總線構(gòu)成的情況很多, 線束的數(shù)量也隨之增加。為減少線束的數(shù)量、通過(guò)多個(gè)LAN進(jìn)行大量數(shù)據(jù)的高速通信, 1986年德國(guó)電氣商博世公司開(kāi)發(fā)出面向汽車(chē)的CAN 通信協(xié)議。而今CAN 在歐洲已是汽車(chē)網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議。CAN 的初衷是為了解決汽車(chē)?yán)锒喾N復(fù)雜數(shù)據(jù)的通信, 后來(lái)證實(shí)在很多工業(yè)領(lǐng)域也能應(yīng)用自如。
2 CAN 總線特性及當(dāng)今狀況
CAN 總線與其他通訊網(wǎng)絡(luò)的不同之處在于: 報(bào)文傳送中不包括目標(biāo)地址, 以全網(wǎng)廣播為基礎(chǔ), 各接收站根據(jù)報(bào)文中反映數(shù)據(jù)性質(zhì)的標(biāo)識(shí)符過(guò)濾報(bào)文;強(qiáng)化了對(duì)數(shù)據(jù)安全性的關(guān)注, 滿足控制系統(tǒng)較高的數(shù)據(jù)需求。它具有如下顯著特征: 極高的總線利用率、低成本、高速的數(shù)據(jù)傳輸速率、遠(yuǎn)距離傳輸、可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制、可根據(jù)報(bào)文的ID決定接收或屏蔽該報(bào)文, 節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)退出總線的功能等等。
CAN 總線所需完善的通信協(xié)議可由CAN 控制器芯片和接口芯片實(shí)現(xiàn), 大大降低了系統(tǒng)的開(kāi)發(fā)難度、組成成本、縮短了開(kāi)發(fā)周期, 其高性能高可靠性以及靈活的設(shè)計(jì)受到人們的重視, 應(yīng)用也越來(lái)越廣泛。目前比較流行的控制器芯片是飛利浦公司的SJA1000和收發(fā)器芯片TJA1050。
由于近幾年來(lái)CAN 總線技術(shù)逐步在我國(guó)推廣開(kāi)來(lái), CAN 總線技術(shù)的獨(dú)特特點(diǎn) 傳輸數(shù)據(jù)的可靠性和實(shí)時(shí)性, 已獲得國(guó)際自動(dòng)化控制領(lǐng)域的認(rèn)可,其應(yīng)用前景十分光明。國(guó)內(nèi)推動(dòng)CAN 總線技術(shù)進(jìn)步的應(yīng)用事例不斷擴(kuò)展, 積極促進(jìn)了我國(guó)自動(dòng)化技術(shù)的進(jìn)步。由于CAN 總線本身的特點(diǎn), 其應(yīng)用范圍己經(jīng)擴(kuò)展到過(guò)程工業(yè)、機(jī)械工業(yè)、數(shù)控機(jī)床、醫(yī)療機(jī)械、家用電器及傳感器等領(lǐng)域, 而在電梯控制系統(tǒng)中, 主板需要接收不同樓層呼梯、轎廂里呼梯、調(diào)整電梯運(yùn)行參數(shù)等多路信號(hào), 因此CAN 總線的優(yōu)勢(shì)明顯。如圖1所示。
圖1 CAN總線應(yīng)用拓?fù)浣Y(jié)構(gòu)
3 集成CAN 控制器的ARM 微處理器
CAN 總線基于一組嚴(yán)格的協(xié)議, 一般來(lái)說(shuō)在主CPU 外接一個(gè)專(zhuān)用CAN 控制器以實(shí)現(xiàn)。由于近年來(lái)微處理器的迅速發(fā)展, 出現(xiàn)了很多功能強(qiáng)大的集成CAN 控制器的CPU, 使得在CAN 總線應(yīng)用上又簡(jiǎn)便了一些。而在價(jià)格上, 集成CAN 總線的微處理器和一般處理器加上專(zhuān)用CAN 控制器芯片的價(jià)格相當(dāng), 所以, 集成CAN 總線的微處理器必然成為今后CAN 總線應(yīng)用的趨勢(shì)。NXP 公司生產(chǎn)的ARM結(jié)構(gòu)LPC2294就是其中一款流行的帶CAN 總線控制器的CPU。它是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的32位ARM7TDM I- S CPU 的微控制器, 并帶有256k字節(jié)嵌入的高速Flash 存儲(chǔ)器。極低的功耗、多個(gè)32位定時(shí)器、8路10位ADC、4路CAN以及多達(dá)9個(gè)外部中斷使它們特別適用于工業(yè)控制, 因此,LPC2294也可作為電梯控制系統(tǒng)的主控制器。
4 集成CAN 控制器的高端8位AVR
上文提到, 電梯控制系統(tǒng)需要處理多路信息, 而且它們可能是具有不同傳輸速率的, 因此需要使用不同通道的CAN 總線控制器。對(duì)于控制系統(tǒng), 必須具有可操作性, 考慮到要減輕主CPU 的負(fù)擔(dān), 因此,設(shè)計(jì)一個(gè)簡(jiǎn)單的操作系統(tǒng)對(duì)主系統(tǒng)進(jìn)行操作, 而數(shù)據(jù)的交換方式就是采用CAN 總線傳輸, 此文中稱這個(gè)操作系統(tǒng)為副系統(tǒng)。副系統(tǒng)相對(duì)比較簡(jiǎn)單, 其功能主要包括: ! 和主板進(jìn)行信息交換; ? 具有按鍵供輸入; # 具有顯示信息的顯示器。針對(duì)功能的需要和程序的體積, 選用了ATMEL公司近年力推的8位AVR控制器at90can128。
a t90can128是一種基于AVR 增強(qiáng)型R ISC結(jié)構(gòu)的低功耗CMOS 8位單片機(jī)。通過(guò)執(zhí)行一個(gè)單時(shí)鐘周期的高效指令, AT90CAN128每MH z能達(dá)1M IPS,這就可讓系統(tǒng)設(shè)計(jì)人員將功率損耗與處理速度優(yōu)化。AVR內(nèi)核具有豐富的指令集并帶有32個(gè)通用目的工作寄存器。32 個(gè)寄存器全都直接連到運(yùn)算邏輯單元( ALU ) , 允許兩個(gè)獨(dú)立的寄存器在一個(gè)時(shí)鐘周期執(zhí)行單個(gè)指令的方式訪問(wèn)。其結(jié)果就是, 采用這種結(jié)構(gòu)的速度比常規(guī)的R ISC單片機(jī)快10倍的同時(shí)代碼效率更高。它除了擁有一般AVR 處理器的AD 模塊, SPI模塊外, 還集成CAN 控制器, 為搭建基于CAN 通信的系統(tǒng)提供了便利??刂平Y(jié)構(gòu)如圖2所示。
圖2 at90can128的CAN控制結(jié)構(gòu)。
對(duì)于復(fù)雜的CAN 通信協(xié)議, 在此不詳述, 以下就at90can128的CAN控制器使用作介紹。
a t90can128的CAN 控制器提供了所有有利于消息管理的硬件, 對(duì)于每個(gè)要發(fā)送或接收的信息都是通過(guò)一個(gè)叫做消息對(duì)象( message ob ject) 的東西來(lái)封裝起來(lái)的。在對(duì)模塊初始化的時(shí)候, 程序會(huì)指定哪些消息要發(fā)送, 哪些消息要接收, 只有那些約定好標(biāo)識(shí)符的消息才能被正確無(wú)誤地交換。另外, 對(duì)于接收到的遠(yuǎn)程幀, 控制器會(huì)進(jìn)行相應(yīng)的自動(dòng)回復(fù)。
所以在這種方式下, 相對(duì)于最原始的CAN 控制方式, CPU 的負(fù)擔(dān)大大減小了。用戶可以根據(jù)自身要求, 通過(guò)對(duì)相關(guān)寄存器進(jìn)行配置達(dá)到自己的要求。
而在發(fā)送消息之前, 必須初始化幾個(gè)字段:
其中IDT 是標(biāo)識(shí)符字段, IDE 是標(biāo)識(shí)符擴(kuò)展使能選擇, RTRTAG是遠(yuǎn)程傳輸請(qǐng)求, DLC 是數(shù)據(jù)長(zhǎng)度代碼, RBnTAG 是保留字段( n = 0, 1) , MSG 是指向相應(yīng)MOB的CAN 數(shù)據(jù)。當(dāng)MOB 的發(fā)送指令執(zhí)行后, MOB 就會(huì)準(zhǔn)備發(fā)送一個(gè)數(shù)據(jù)或者是一個(gè)遠(yuǎn)程幀。接著, CAN 通道就會(huì)掃描各個(gè)MOB, 尋找到優(yōu)先級(jí)最高的MOB, 將其發(fā)送出去。當(dāng)傳送成功后,MOB 狀態(tài)寄存器CANSTMOB 中的TXOK 位就會(huì)置位。而最重要的是, 對(duì)于每一次新的數(shù)據(jù)傳輸都必須重新對(duì)相關(guān)寄存器初始化, 否則無(wú)法正常工作。
接收消息之前所要做的初始化步驟基本相同,只是多了IDMSK 和IDEMSK 標(biāo)識(shí)符掩碼的設(shè)置。
以下就給出基于AVR at90can128CAN 總線接口初始化以及發(fā)送、接收功能模塊的關(guān)鍵代碼及注解(見(jiàn)圖3)。
圖3 電梯系統(tǒng)主板與調(diào)試器之間的CAN通信。
CAN 初始化:
CANGCON | = 0X01;
for( i= 0; i 15; i+ + )
{
CANPAGE = i 4; / /將15個(gè)MOB 都初始化一次
CANCDMOB = 0;
CANSTMOB= 0;
CAN IDT1= 0;
CAN IDT2= 0;
……
for( j= 0; j 8; j+ + )
CANMSG= 0;
CANBT1= 0X1E; / /設(shè)置CAN 傳輸波特率, 16分頻
CANBT2= 0X40;
CANBT3= 0X49;
CANPAGE = ( 0 4) ; / /選擇MOB0作為接收MOB, 并設(shè)定標(biāo)識(shí)碼
CAN IDT1= 0X00;
CAN IDM1= 0X00;
……
CANPAGE = ( 1 4); / /選擇MOB1作為發(fā)送MOB, 并設(shè)定標(biāo)識(shí)碼
CAN IDT1= 0X00;
……
}
發(fā)送模塊代碼:
CANPAGE = ( 1 4); / /選定MOB1
If( ( CANGSTA 0X10) = = 0) / /查詢CAN 狀態(tài)寄存器的TXBSY 位, 為0, 則可以發(fā)送
for( i= 0; i 8; i+ + )
{
CANMSG= my _dada[ i] ; / /將要發(fā)送的數(shù)據(jù)裝入數(shù)據(jù)寄存器中, 共8 by te
CANCDMOB | = 0X48; / /發(fā)送
}
接收模塊代碼是類(lèi)似的, 設(shè)計(jì)思路都是在判斷發(fā)送允許標(biāo)志之后, 如果允許, 就將數(shù)據(jù)裝入到指定的MOB中, 而每個(gè)MOB 一個(gè)發(fā)送周期一共可以發(fā)送8byte的數(shù)據(jù)。而CAN 總線的另一端是NXP公司LPC2294的CAN總線外圍, 其結(jié)構(gòu)和原理都差不多, 當(dāng)然, 在寄存器設(shè)置中會(huì)有一點(diǎn)差別, 但只要兩個(gè)CPU 約定好數(shù)據(jù)幀的標(biāo)識(shí)符編號(hào)是什么, 傳輸速率相同, 就可以進(jìn)行數(shù)據(jù)交換了。由于篇幅有限,LPC2294的CAN接口設(shè)置在此就不作介紹了。
最后給出了CAN 總線應(yīng)用CPU 外部的硬件原理參考圖, 如圖4所示。
5 CAN 總線收發(fā)器TJA1050硬件連接圖
圖中CAN 收發(fā)器為NXP公司的TJA1050, TXD和RXD分別連接到CPU 的CAN接口, CANL和CANH 則為與另一個(gè)CPU 連接的總線, CANL 和CANH 之間電阻值約為120歐姆, 開(kāi)關(guān)S可以作為CAN 總線的硬件啟用開(kāi)關(guān)。另外, 如果在抗干擾要求高的場(chǎng)合, 可以對(duì)TXD 和RXD使用光電隔離。
圖4 CPU 外圍收發(fā)器的硬件原理圖。
6 結(jié)束語(yǔ)
基于at90can128的CAN 總線模塊設(shè)計(jì)的電梯系統(tǒng)調(diào)試器, 經(jīng)過(guò)長(zhǎng)時(shí)間的檢驗(yàn), 使用良好, 通信正常無(wú)誤。在眾多的現(xiàn)場(chǎng)總線當(dāng)中, CAN 總線憑借其優(yōu)秀的特性已經(jīng)為越來(lái)越多的工程人員認(rèn)同和偏愛(ài), 而隨著越來(lái)越多的高端CPU 對(duì)CAN 控制器的集成和綜合成本的下降, CAN 總線的使用必定會(huì)越來(lái)越普遍, 其中集成CAN 控制器的8位AVR 也會(huì)受到越來(lái)越多人的青睞。
評(píng)論