CAN總線與一般的串行通信總線相比,,它的數(shù)據(jù)通信具有可靠性高,,實(shí)時(shí)性高,靈活性強(qiáng)等優(yōu)點(diǎn),,不僅廣泛應(yīng)用于汽車行業(yè),,而且擴(kuò)展到了機(jī)械工業(yè)、機(jī)器人,、數(shù)控機(jī)床等諸多領(lǐng)域,。尤其在大量數(shù)據(jù)通信處理中,,高可靠性及實(shí)時(shí)響應(yīng)的場合,,單通道CAN總線不能滿足實(shí)際通信的要求。為此,,介紹一種基于多通道" title="多通道">多通道實(shí)時(shí)CAN模擬器的設(shè)計(jì)方案,。
1 CAN總線技術(shù)介紹
1.1 CAN總線特性
CAN(Controller Area BOSCH公司為汽車的監(jiān)測、控制系統(tǒng)而設(shè)計(jì)的,。由于CAN總線具有卓越的特性和極高的可靠性,,特別適合于工業(yè)過程中監(jiān)控設(shè)備的互連,具體來說,,CAN具有如下特性:
(1)CAN可以多主方式工作,,網(wǎng)絡(luò)上任意一個(gè)節(jié)點(diǎn)均可以在任意時(shí)刻主動地向網(wǎng)絡(luò)上的其他節(jié)點(diǎn)發(fā)送信息,而不分主從,,通信方式靈活,;
(2)CAN可以點(diǎn)對點(diǎn)、點(diǎn)對多點(diǎn)(成組)及全局廣播方式傳送接收數(shù)據(jù),;
(3)CAN網(wǎng)絡(luò)上的節(jié)點(diǎn)信息可分成不同的優(yōu)先級,,可以滿足不同的實(shí)時(shí)要求;
(4)CAN采用非破壞性總線仲載技術(shù),。當(dāng)兩個(gè)節(jié)點(diǎn)是向網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)時(shí),,優(yōu)先級低的節(jié)點(diǎn)主動停止數(shù)據(jù)發(fā)送,而優(yōu)先級高的節(jié)點(diǎn)可以不受影響地繼續(xù)傳輸數(shù)據(jù),,大大節(jié)省了總線仲載沖突時(shí)間,,在網(wǎng)絡(luò)負(fù)載很重的情況下也不會出現(xiàn)網(wǎng)絡(luò)癱瘓,;
(5)CAN的直接通信距離最大可達(dá)10 km(速率小于5 Kb/s),最高通信速率可達(dá)1 Mb/s,。
1.2 CAN通信協(xié)議
在CAN 2.0B的版本協(xié)議中有兩種不同的幀格式,,不同之處為標(biāo)識符域的長度不同,含有11位標(biāo)識符的幀稱為標(biāo)準(zhǔn)幀,,而含有29位標(biāo)識符的幀稱為擴(kuò)展幀,。擴(kuò)展格式是CAN 2.0B協(xié)議新增加的特性。在報(bào)文傳輸時(shí),,不同的幀具有不同的傳輸結(jié)構(gòu),,只有嚴(yán)格按照該結(jié)構(gòu)進(jìn)行幀的傳輸,才能被節(jié)點(diǎn)正確接收和發(fā)送,。下面將分別介紹四種傳輸幀的結(jié)構(gòu):
(1)數(shù)據(jù)幀(Data):數(shù)據(jù)幀將數(shù)據(jù)從發(fā)送器傳輸?shù)浇邮掌?。CAN協(xié)議有兩種數(shù)據(jù)幀類型標(biāo)準(zhǔn)2.0A和標(biāo)準(zhǔn)2.0B。兩者本質(zhì)的不同在于ID的長度不同,。在2.0A類型中,,ID的長度為11位;在2.0B類型中,,ID的長度為29位,。它由7個(gè)域組成:幀起始、仲裁域,、控制域,、數(shù)據(jù)域、CRC校驗(yàn)碼域,、應(yīng)答域,、幀結(jié)束。
(2)遠(yuǎn)程幀(Remote):總線單元發(fā)出遠(yuǎn)程幀,,請求發(fā)送具有同一標(biāo)識符的數(shù)據(jù)幀,。接收數(shù)據(jù)的節(jié)點(diǎn)可通過發(fā)遠(yuǎn)程幀請求源節(jié)點(diǎn)發(fā)送數(shù)據(jù)。它由6個(gè)域組成:幀起始,、仲裁域,、控制域、校驗(yàn)域,、應(yīng)答域,、幀結(jié)束。
(3)錯誤幀(Error):任何單元檢測到總線錯誤就發(fā)出錯誤幀,。由錯誤標(biāo)志和錯誤分界兩個(gè)域組成,。接收節(jié)點(diǎn)發(fā)現(xiàn)總線上的報(bào)文有誤時(shí),將自動發(fā)出“活動錯誤標(biāo)志”,其他節(jié)點(diǎn)檢測到活動錯誤標(biāo)志后發(fā)送“錯誤認(rèn)可標(biāo)志”,。
(4)過載幀(Overload):過載幀用在相鄰數(shù)據(jù)幀或遠(yuǎn)程幀之間提供附加的延時(shí),。由超載標(biāo)志和超載分隔符組成。超載幀只能在一個(gè)幀結(jié)束后開始,。當(dāng)接收方在接收下一幀之前,,需要過多的時(shí)間處理當(dāng)前的數(shù)據(jù),或在幀間空隙域檢測到顯性電平時(shí),,則導(dǎo)致發(fā)送超載幀,。
1.3 CAN協(xié)議控制器
目前主流的CAN協(xié)議控制器一般采用I/O總線(SJA1000等)或SPI接口(M(2P2515等)與處理器進(jìn)行通信。該設(shè)計(jì)采用SJA1000控制器,。
SJA1000是一款獨(dú)立CAN控制器,,應(yīng)用于移動目標(biāo)和工業(yè)局域網(wǎng)控制領(lǐng)域。SJA1000具有兩種工作模式:BasicCAN和PeliCAN,。該設(shè)計(jì)采用PeliCAN工作模式,。SJA1000用來完成CAN協(xié)議所規(guī)定的物理層和數(shù)據(jù)鏈路層的所有功能,它可以支持多種處理器的時(shí)序特性,,如Intel模式或Motorola模式,,與微處理器的接口非常簡單,微處理器以訪問外部存儲器的方式來訪問SJA1000,。
SJA1000通過CAN控制器接口即PCA82C250芯片接到CAN總線上,。CAN收發(fā)器使用飛利浦公司的PCA82C250,它是連接CAN控制器和物理總線之間的接口,,提供了對總線的差動發(fā)動和接收能力,,與ISO11898標(biāo)準(zhǔn)完全兼容,,有三種不同的工作方式即高速,、斜率控制和待機(jī),可根據(jù)實(shí)際情況選擇,。硬件電路中使用PCA82C250是為了增加通信距離,,提高系統(tǒng)的瞬間抗干擾能力,保護(hù)總線,,降低干擾等,。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)方案設(shè)計(jì)
根據(jù)通用計(jì)算機(jī)的總線分類,可采用基于ISA總線對多通道實(shí)時(shí)CAN總線模擬器" title="CAN總線模擬器">CAN總線模擬器進(jìn)行研制,,根據(jù)CAN總線通信原理可以提出以下兩種設(shè)計(jì)方案:
(1)ISA總線+CAN通信控制器,;
(2)ISA總線+微處理器+CAN通信控制器。這兩種設(shè)計(jì)方案的不同點(diǎn)在于是否采用處理器來加強(qiáng)控制,。
由于CAN總線通信要求實(shí)時(shí)性高,,再加上多通道的設(shè)計(jì)滿足實(shí)際的需要,故采用單片機(jī)來負(fù)責(zé)CAN總線的通信功能。在這里主要介紹單片機(jī)與CAN控制器之間的設(shè)計(jì)部分,,其系統(tǒng)設(shè)計(jì)框圖如圖1所示,。
單片機(jī)選用DALLAS公司的DS89C430,它是當(dāng)前8051兼容微控制器中性能最高的,。具有重新設(shè)計(jì)的處理器內(nèi)核,,在相同的晶振頻率下,執(zhí)行指令的速度是最初8051微處理器的12倍,。特性:高速8051架構(gòu),,每個(gè)機(jī)器周期一個(gè)時(shí)鐘;片內(nèi)存儲器16 KB/32 KB/64 KB閃存,,在應(yīng)用可編程,,通過串口實(shí)現(xiàn)在系統(tǒng)可編程;與8051引腳和指令集兼容,;四路雙向,、8位I/O端口;三個(gè)16位定時(shí)器/計(jì)數(shù)器,;256 B暫存RAM等特點(diǎn),。可根據(jù)實(shí)際應(yīng)用的需要選擇其部分功能,。隨著可編程邏輯器件的飛速發(fā)展,,其應(yīng)用領(lǐng)域不斷擴(kuò)大,可用于譯碼,、解碼等方面,,使用CPLD可以提高系統(tǒng)集成度,降低噪聲,,增強(qiáng)系統(tǒng)可靠性,。因此,單片機(jī)與CAN控制器之間的鎖存,、譯碼采用Xilinx公司XC95144CPLD芯片,,優(yōu)化了系統(tǒng)資源,降低了其功耗,。
2.2 系統(tǒng)硬件設(shè)計(jì)
該部分由單片機(jī),、CAN控制器、CAN收發(fā)器,、SRAM存儲器組成,。單片機(jī)主要用于系統(tǒng)計(jì)算及信息處理等功能;CAN控制器主要用于系統(tǒng)通信,;CAN收發(fā)器主要用于增強(qiáng)系統(tǒng)的驅(qū)動能力,;SRAM主要用于緩存數(shù)據(jù),。系統(tǒng)的發(fā)送過程是:單片機(jī)將外圍設(shè)備傳送過來的信息處理后,按CAN規(guī)范規(guī)定的格式,,將其寫入CAN控制器的發(fā)送緩沖區(qū),,并啟動發(fā)送命令,把數(shù)據(jù)發(fā)送到CAN總線上,;接收過程是:CAN控制器從CAN總線上自動接收數(shù)據(jù),,并經(jīng)過濾后存入CAN接收緩沖區(qū),且向單片機(jī)發(fā)出中斷請求,,此時(shí)單片機(jī)可從CAN接收緩沖區(qū)讀取要接收的數(shù)據(jù),。SJA1000提供的微處理器接口方式為典型INTEL或MOTOROLA-p.htm" target="_blank" title="MOTOROLA貨源和PDF資料">MOTOROLA地址數(shù)據(jù)多路復(fù)用總線模式。主要信號有地址數(shù)據(jù)信號AD7~AD0,,地址選通信號ALE,,片選信號CS,讀信號RD,,寫信號WR,,模式選擇信號MODE。當(dāng)MODE=1時(shí),,為INTEL模式,;當(dāng)MODE=0時(shí),為MOTOROLA-p.htm" target="_blank" title="MOTOROLA貨源和PDF資料">MOTOROLA模式,。后面描述的總線模式均為INTEL模式,。AD7~AD0引腳在ALE有效時(shí),傳送的是地址信號,,在RD或WR有效時(shí),,傳輸?shù)氖菙?shù)據(jù)信號,在這里分別與單片機(jī)的PO口相連,,RD,,WR信號線分別與單片機(jī)的讀/寫信號線相連。具體方案如圖2所示,。限于篇幅限制,,虛線內(nèi)給出1路CAN的連接圖,2路CAN有同樣的連接方法,。
SRAM和CAN控制器的片選信號。由于單片機(jī)可以查詢或中斷方式訪問,,在此采用中斷方式進(jìn)行CAN多通道選擇訪問,,以滿足不同通信速率下數(shù)據(jù)處理的需要。SRAM的地址線與數(shù)據(jù)線是分開的,,故采用74LS373鎖存器實(shí)現(xiàn)鎖存功能,??刹捎肵C95144CPLD芯片以及VHDL硬件描述語言以實(shí)現(xiàn)鎖存、譯碼等功能,。
2.3 CPLD設(shè)計(jì)部分
2.3.1 結(jié)構(gòu)設(shè)計(jì)
CPLD的輸入信號是單片機(jī)發(fā)送的信號,,由高位地址A[15..8]、ALE鎖存信號,、中斷信號以及寫/讀信號組成,。地址線A14和A15經(jīng)譯碼后作為片選信號,ALE實(shí)現(xiàn)低8位地址線的鎖存,。實(shí)體和構(gòu)造體部分代碼如下所示:
2.3.2 仿真結(jié)果
該模塊在Xilinx ISE 9.1工具下進(jìn)行綜合,,并在結(jié)合ModelSim環(huán)境下進(jìn)行功能仿真。其仿真結(jié)果如圖3所示,。
3 軟件設(shè)計(jì)
該系統(tǒng)軟件設(shè)計(jì)的關(guān)鍵是通信程序設(shè)計(jì),。通信軟件由三部分組成:單片機(jī)和CAN控制器的初始化程序、CAN發(fā)送程序,、CAN接收程序,。對于初始化程序,采用MAX232芯片對單片機(jī)進(jìn)行在線編程,,可同時(shí)對多通道CAN控制器初始化,。對于CAN控制器的初始化程序,主要是通過對CAN控制器控制段中的寄存器寫入控制字,,從而確定CAN控制器的工作方式等,,即通過上電復(fù)位、硬件復(fù)位或軟件復(fù)位給CAN控制器發(fā)一個(gè)復(fù)位請求,,便可進(jìn)入初始化,。在復(fù)位期間,對必需的寄存器進(jìn)行設(shè)置,。對于發(fā)送和接受程序,,只需把到來的信息幀送到CAN的發(fā)送或接受緩沖區(qū),同時(shí)啟動命令即可,。二者可采用查詢方式或中斷方式,,對于中斷方式,程序分為主程序和中斷服務(wù)程序兩部分設(shè)計(jì),。在具體項(xiàng)目中,,需要軟硬件結(jié)合調(diào)試才能保證各部分的設(shè)計(jì)準(zhǔn)確無誤,到達(dá)實(shí)際應(yīng)用的要求,。
4 結(jié) 語
在對CAN通信協(xié)議進(jìn)行分析的基礎(chǔ)上,,構(gòu)建了一種多通道實(shí)時(shí)CAN總線模擬器架構(gòu),同時(shí)利用CPLD器件,,通過功能仿真,,驗(yàn)證了設(shè)計(jì)方案的正確性,。經(jīng)實(shí)際工程項(xiàng)目使用,驗(yàn)證了該設(shè)計(jì)方案切實(shí)可行,,滿足了實(shí)際應(yīng)用中高可靠性,、高實(shí)時(shí)性以及傳輸速率較高的需求。