基于STC89C51的CAN總線點(diǎn)對(duì)點(diǎn)通信模塊設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:隨著人們對(duì)總線對(duì)總線各方面要求的不斷提高,總線上的系統(tǒng)數(shù)量越來越多,繼而出現(xiàn)電路的復(fù)雜性提高、可靠性下降、成本增加等問題。為解決上述問題,文中闡述了基于SJAl000的CAN總線通信模塊的實(shí)現(xiàn)方法,該方法以PCA82C250作為通信模塊的總線收發(fā)器,以SITA-l000作為網(wǎng)絡(luò)控制器。并以STCSTC89C5l單片機(jī)來完成基于STC89C5l的CAN通信硬件設(shè)計(jì)。文章還就平臺(tái)的初始化、模塊的發(fā)送和接收進(jìn)行了設(shè)計(jì)和分析。通過測(cè)試分析證明,該系統(tǒng)可以達(dá)到CAN的通信要求,整個(gè)系統(tǒng)具有較高的實(shí)用性。
關(guān)鍵詞:CAN總線;SJAl000;82C250;STC89C51
O 引言
現(xiàn)場(chǎng)總線是應(yīng)用在生產(chǎn)最底層的一種總線型拓?fù)渚W(wǎng)絡(luò),是可用做現(xiàn)場(chǎng)控制系統(tǒng)直接與所有受控設(shè)備節(jié)點(diǎn)串行相連的通信網(wǎng)絡(luò)。在工業(yè)自動(dòng)化方面,其控制的現(xiàn)場(chǎng)范圍可以從一臺(tái)家電設(shè)備到一個(gè)車間、一個(gè)工廠。一般情況下,受控設(shè)備和網(wǎng)絡(luò)所處的環(huán)境可能很特殊,對(duì)信號(hào)的干擾往往也是多方面的。但要求控制則必須實(shí)時(shí)性很強(qiáng),這就決定了現(xiàn)場(chǎng)總線有別于一般的網(wǎng)絡(luò)特點(diǎn)。此外,由于現(xiàn)場(chǎng)總線的設(shè)備通常是標(biāo)準(zhǔn)化和功能模塊化,因而還具有設(shè)計(jì)簡(jiǎn)單、易于重構(gòu)等特點(diǎn)。
1 CAN總線概述
CAN (Controller Area Network)即控制器局域網(wǎng)絡(luò),最初是由德國Bosch公司為汽車檢測(cè)和控制系統(tǒng)而設(shè)計(jì)的。與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性。其良好的性能及獨(dú)特的設(shè)計(jì),使CAN總線越來越受到人們的重視。由于CAN總線本身的特點(diǎn),其應(yīng)用范圍目前已不再局限于汽車行業(yè),而向自動(dòng)控制、航空航天、航海、過程工業(yè)、機(jī)械工業(yè)、紡織機(jī)械、農(nóng)用機(jī)械、機(jī)器人、數(shù)控機(jī)床、醫(yī)療器械及傳感器等領(lǐng)域發(fā)展。目前,CAN已經(jīng)形成國際標(biāo)準(zhǔn),并已被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)總線之一。它的直線通信距離最大可以達(dá)到l Mbps/30m.其它的節(jié)點(diǎn)數(shù)目取決于總線驅(qū)動(dòng)電路,目前可以達(dá)到110個(gè)。
2 CAN系統(tǒng)硬件設(shè)計(jì)
圖l所示是基于CAN2.0B協(xié)議的CAN系統(tǒng)硬件框圖,該系統(tǒng)包括電源模塊、MCU部分、CAN控制器、光電耦合器、CAN收發(fā)器和RS232接口。硬件系統(tǒng)MCU采用STC89C5l,CAN控制器采用SJAl000,CAN收發(fā)器采用PCA82C250,光耦隔離采用6N137。
圖l中的CAN控制器SJAl000是CAN控制器(BasicCAN)PCA82C200的替代產(chǎn)品,它增加了一種新的操作模式(PeliCAN),這種模式可以支持很多新特性的CAN2.OB協(xié)議。微處理器STC89C5l在一定的模式下可對(duì)SJAl000中的寄存器進(jìn)行讀寫操作,以控制SJAl000進(jìn)行數(shù)據(jù)的發(fā)送和接收。
CAN收發(fā)器PCA82C250是CAN控制器與物理總線之間的接口。它最初是為汽車中的高速應(yīng)用(lMbps)而設(shè)計(jì)的。該器件可以提供對(duì)總線的差
動(dòng)發(fā)送和接收功能。它采用雙線差分驅(qū)動(dòng)方式,有助于抑制汽車等惡劣電氣環(huán)境下的瞬變干擾。PCA82C250可對(duì)SJAl000傳來的TTL電平和CAN總線差動(dòng)信號(hào)進(jìn)行相互轉(zhuǎn)換,而且可使總線具有較好的EMC特性。
光耦隔離器可對(duì)總線上各個(gè)CAN節(jié)點(diǎn)進(jìn)行電氣隔離,以增強(qiáng)系統(tǒng)的可靠性,減少系統(tǒng)與系統(tǒng)之間的相互影響。
2.1 CAN控制器硬件電路的設(shè)計(jì)
將SJAl000的ADO~AD7連接到STC89C5l的P0口,CS連接到STC89C5l的P20,這樣,當(dāng)P20為O時(shí),CPU片外存儲(chǔ)器地址即可選中SJAl000,CPU
則通過這些地址對(duì)SJAl000執(zhí)行相應(yīng)的讀寫操作。設(shè)計(jì)時(shí),可將SJAl000的RD、WR、ALE分別和STC89C5l的對(duì)應(yīng)引腳相連,INT接STC89C51的IN-T0,這樣,CPU可以通過中斷方式來訪問SJAl000。其連接電路圖如圖2所示。
2.2 光電耦合器的設(shè)計(jì)
為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,SJAl000的TX0和RX0并不直接和收發(fā)器PCA82C250的TXD和RXD相連,而是通過高速光耦6N137后再和PCA82C250相連,這樣就可以很好的實(shí)現(xiàn)各CAN節(jié)點(diǎn)間的電氣隔離。應(yīng)當(dāng)注意的是光耦部分采用的電源VCC和VDD最好完全隔離,可以用小功率的電源隔離模塊來實(shí)現(xiàn),這樣就可以提高節(jié)點(diǎn)的穩(wěn)定性和安全性。其電路圖如圖3所示。
2.3 CAN收發(fā)器的設(shè)計(jì)
PCA82C250是一種差分收發(fā)器,它可完成TTL電平到差分信號(hào)的轉(zhuǎn)換。它的CANH和CANL引腳各自通過一個(gè)5 Ω的電阻和CAN總線相連,該電阻可以起到一定的限流作用,可保護(hù)PCA82C250免受過流的沖擊。而CANH和CANL與地并聯(lián)了兩個(gè)30pF的小電容??梢赃^濾總線上的高頻干擾并具有一定的防電磁輻射能力。PCA82C250的RS腳上應(yīng)接一個(gè)斜率電阻,電阻大小可根據(jù)總線通信速度適當(dāng)調(diào)節(jié),一般可在16~140 kΩ之間,這里選用47 kΩ電阻。圖4所示是收發(fā)器的電路圖。
2.4 總體電路分析
由于本設(shè)計(jì)將SJAl000的AD0~AD7和STC89C5l的P0口相連,CS連接到P20口,ALE、WE、RD分別與單片機(jī)的對(duì)應(yīng)各口相連,因此,SJAl000就相當(dāng)于單片機(jī)的外部存儲(chǔ)器。訪問SJAl000的寄存器就相當(dāng)于對(duì)外部寄存器地址進(jìn)行讀寫操作。SJAl000的MODE接高電平,采用的是intel二分頻模式,TXO和RX0通過高速光耦器件6N137與CAN收發(fā)器82C250連接,PCA82C250的TXD和RXD引腳分別接發(fā)送和接收驅(qū)動(dòng)信號(hào),然后通過CANH和CANL接至物理總線傳輸介質(zhì)上,這個(gè)介質(zhì)可以是光纖或雙膠線等。
3 CAN系統(tǒng)軟件設(shè)計(jì)
STC89C51的軟件設(shè)計(jì)由MCU初始化、SJAl000初始化、SJAl000的接收發(fā)送和數(shù)據(jù)顯示模塊等構(gòu)成。其系統(tǒng)軟件設(shè)計(jì)圖如圖5所示。
3.1 SJAl000初始化軟件設(shè)計(jì)
SJAl000的初始化程序設(shè)計(jì)主要是通過對(duì)SJAl000的寄存器寫入相應(yīng)的控制字,從而確定SJAl000的工作方式。在對(duì)SJAl000的寄存器寫入控制字時(shí),要在SJAl000的復(fù)位模式下采用軟件復(fù)位模式。其初始化流程圖如圖6所示。
3.2 SJAl000數(shù)據(jù)發(fā)送軟件設(shè)計(jì)
報(bào)文的發(fā)送通常是由CAN控制器根據(jù)CAN協(xié)議規(guī)范自動(dòng)完成的。首先由CPU將要發(fā)送的報(bào)文傳送到發(fā)送緩沖器中,并置位命令寄存器中的發(fā)送請(qǐng)求標(biāo)志。其發(fā)送流程圖如圖7所示。
3.3 SJAl000接收數(shù)據(jù)軟件設(shè)計(jì)
CPU以一定的周期讀取CAN控制器的狀態(tài)寄存器,從而檢查接收緩沖區(qū)的轉(zhuǎn)臺(tái)標(biāo)志,指示是否至少接收到一個(gè)報(bào)文。當(dāng)接收緩沖區(qū)狀態(tài)標(biāo)志指示為“空”時(shí),表示沒有接收到報(bào)文;在沒有新的檢查接收緩沖區(qū)狀態(tài)的要求前,CPU則繼續(xù)當(dāng)前的任務(wù)。
當(dāng)接收緩沖區(qū)狀態(tài)標(biāo)志為滿的時(shí)候,即表明已接收一個(gè)或者多個(gè)報(bào)文。此時(shí)CPU將從CAN控制器取出第一個(gè)報(bào)文,并置位命令寄存器中的釋放接收緩沖區(qū)標(biāo)志。其接收流程圖如圖8所示。
4 測(cè)試
將兩個(gè)CAN系統(tǒng)模塊掛接在CAN總線上,相當(dāng)于構(gòu)成CAN總線上兩個(gè)節(jié)點(diǎn),這樣就可以點(diǎn)對(duì)點(diǎn)地發(fā)送數(shù)據(jù),其測(cè)試方法就是在當(dāng)其中一個(gè)節(jié)點(diǎn)的按鍵按下時(shí),除了自身的數(shù)碼管1、2顯示加一外,總線上另一節(jié)點(diǎn)接收到該數(shù)據(jù)后,它的數(shù)碼管3、4也做加一操作,即與發(fā)送端節(jié)點(diǎn)的數(shù)碼管1、2同步顯示。這樣就可以測(cè)試CAN總線的點(diǎn)對(duì)點(diǎn)的通信。
5 結(jié)束語
通過此系統(tǒng)可以較好地完成CAN節(jié)點(diǎn)的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)發(fā)送和接收,且正確率高,速度快。若加以擴(kuò)張,再增加節(jié)點(diǎn),其通信原理與上述相同。此外,也可以加上串口,這樣就可以實(shí)現(xiàn)下位機(jī)的多點(diǎn)采集數(shù)據(jù),上位機(jī)實(shí)現(xiàn)顯示和控制。因此,本文設(shè)計(jì)在實(shí)踐中如果加以擴(kuò)張,會(huì)有很好的價(jià)值。