基于PIC18F458的CAN總線(xiàn)接口設計
1 引言
在ff、lonworks、profibus、can、hart等主流現場(chǎng)總線(xiàn)工業(yè)通訊技術(shù)之中,can(controller area network,又稱(chēng)控制器局域網(wǎng))總線(xiàn)除了具備現場(chǎng)總線(xiàn)的開(kāi)放式、互操作性、數字化通訊等特點(diǎn)外,還具有以下特點(diǎn):(1)以多主機方式工作;(2)can上的節點(diǎn)信息分不同的優(yōu)先級,可滿(mǎn)足不同的實(shí)時(shí)要求;(3)采用非破壞性總線(xiàn)仲裁技術(shù),節省了總線(xiàn)沖突仲裁時(shí)間;(4)采用短幀結構,傳輸時(shí)間短,受干擾率降低,具有極好的檢錯效果;(5)每幀信息都有crc校驗及其它檢錯措施,數據出錯率極低;(6)通信介質(zhì)可靈活地選擇;(7)can上的節點(diǎn)數高達110個(gè);(8)有很高的可靠性和性能價(jià)格比等。can總線(xiàn)的這些特點(diǎn)使得其能同時(shí)滿(mǎn)足過(guò)程控制和制造業(yè)自動(dòng)化的需求,[1]因而can總線(xiàn)的研究與應用已成為工業(yè)數據總線(xiàn)領(lǐng)域的熱點(diǎn)。在總線(xiàn)系統中,傳統的4-20ma的模擬輸入信號被數字信號取代,設備狀態(tài)、故障、參數等信息通過(guò)現場(chǎng)總線(xiàn)傳送給上位機完成遠程控制及遠程參數化,具有can總線(xiàn)接口的各種儀器、儀表設備通過(guò)can適配卡可實(shí)現與上位機的can總線(xiàn)通訊。
2 硬件設計
can通信的核心芯片是can控制器,can的通信協(xié)議主要是由它完成的,它可以實(shí)現物理層和數據鏈路層的所有功能。can控制器有許多芯片結構,獨立芯片的例如philips的sja1000,西門(mén)子的82c900等,還有和微處理器做在一起的嵌入型結構。本項目根據智能化、可靠性高、抗干擾能力強、成本低等原則,can控制器采用microchip公司的pic18f458單片機內嵌can控制器方案。pic18f458功能強大,1536k片內數據ram、3個(gè)16位定時(shí)/計數器、1個(gè)8位看門(mén)狗wdt定時(shí)器、8路模擬輸入的片內adc??撮T(mén)狗wdt定時(shí)器用來(lái)監視程序的運行狀態(tài),一旦cpu由于意外原因偏離正常程序之外,wdt將強行把cpu復位,使其返回正常程序。pic18f458can模塊除遵循can總線(xiàn)的協(xié)議,同時(shí)也有自己的特點(diǎn),主要包括:(1)支持can協(xié)議can2.0a、can2.0b;(2)支持標準幀、擴展幀、遠程幀、過(guò)載幀、錯誤幀等;(3)2個(gè)接收緩沖器、3個(gè)發(fā)送緩沖器;(4)6個(gè)接收過(guò)濾器;(5)2個(gè)屏蔽過(guò)濾器。選用功能強大的pic18f458單片機,大大簡(jiǎn)化了電路設計,節省了成本。
can收發(fā)器即總線(xiàn)驅動(dòng)器是can控制器與物理總線(xiàn)之間的接口,可以提供對總線(xiàn)的差動(dòng)發(fā)送和接受功能,can總線(xiàn)驅動(dòng)器種類(lèi)有82c250/251、tja1040、tja1050等多種,適用于不同場(chǎng)合。philips公司的高速總線(xiàn)驅動(dòng)器82c50,它采用雙線(xiàn)差分驅動(dòng),抗干擾強。can總線(xiàn)驅動(dòng)器與單片機接線(xiàn)如圖1所示,為實(shí)現總線(xiàn)上節點(diǎn)之間的電氣隔離 can驅動(dòng)器通過(guò)高速光藕6n137與pic18f458進(jìn)行相連。在can總線(xiàn)兩端的can接頭上接入120歐匹配電阻,以消除阻抗不連續時(shí)的反射現象,總線(xiàn)與地各自并聯(lián)一個(gè)30pf的小電容,以防電磁輻射和抗高頻干擾[2]。注意在實(shí)際應用中,節點(diǎn)之間的電源也要隔離,+5v隔離后才能接vcc,否則也會(huì )有干擾。
圖1 82c250與pic18f458接線(xiàn)圖
3 軟件設計
軟件采用mplab ide7.5開(kāi)發(fā)平臺及mcc18軟件,為了有利于程序的移植和修改可將程序設計成能相對獨立的子程序。can總線(xiàn)的各種協(xié)議已經(jīng)被集成在pic18f458的can模塊里面,只要對相應的寄存器進(jìn)行操作就可完成can系統通信。pici8f458的can通信程序主要包括can初始化、接受子程序、發(fā)送子程序等。can初始化主要對can進(jìn)行配置,設置發(fā)送郵箱、接收郵箱標識符及初始化數據,設置波特率、can工作模式,初始化接受濾波器和接受屏蔽。接受使用中斷方式,發(fā)送采用查詢(xún)方式。在can總線(xiàn)上的所有節點(diǎn)必須有相同的波特率,設波特率fosc=4mhz,同步時(shí)間段sync_seg=1tq,傳輸時(shí)間段prop_seg=1tq,相位緩沖時(shí)間段1phase_seg1=3tq,相位緩沖時(shí)間段2phase_seg2=3tq,標稱(chēng)位時(shí)間=8tq,位率=0.125mhz。在can總線(xiàn)通訊中,can的初始化非常重要[3]。
3.1 can初始化子程序
void intcan()
{trisb=(trisb|0x08)0xfb; /* 設置rb2為輸出,rb3為輸入*/
cancon=0x80; /*請求配置*/
while((canstat0x80)==0) /*配置方式*/
{
??;
} /*等待進(jìn)入配置模式*/
brgcon1=0x01; /*設置波特率*/
brgcon2=0x90;
brgcon3=0x42;
txb0con=0x03; /*設置優(yōu)先級*/
txb0sidl=can_biaosf_l0xe0; /*標準標識符*/
txb0sidh= can_ biaosf _h ;
txb0dlc=0x08; /*數據長(cháng)度1字節*/
txb0d0=0x00;
txb0d1=0x00;
rxb0sidl= can_ biaosf _l0xe0;/*標準標識符*/
rxb0sidh= can_ biaosf _h ;
rxb0con=0x20; / *接受有效的標準標識符信息*/
rxb0dlc=0x08; /*數據長(cháng)度1字節*/
rxb0d0=0x00; /*初始數據*/
rxb0d1=0x00;
rxb0d2=0x00;
rxf0sidh=can_ biaosf _h;/*初始化接受濾波器和接受屏蔽*/
rxf0sidl=can_ biaosf _l;
rxm0sidh=0xff;
rxm0sidl=0xe0;
cancon=0x40; /*正常模式*/
while((canstat0x40)!=0) /*檢測配置完成*/
{
??;
}
pir3=0x00; /*初始化can中斷*/
pie3=0x01;
ipr3=0x01;
}
3.2 接收中斷子程序
void interruphandlerhigh()
{
if(pir3bits.rxb0if==1) /*接收can中斷*/
{
can_flag=1; /*置接收中斷標志*/
pir3bits.rxb0if=0; /*清接收中斷標志*/
rxb0conbits.rxful=0; /*接收*/
}
}
3.3 發(fā)送子程序
void fasong()
txb0d0=clz; /*clz為發(fā)送數值*/
txb0con=txb0con|0x08; /*發(fā)送*/
}
寫(xiě)好這三部分程序,就很容易寫(xiě)出通訊程序了。
4 結束語(yǔ)
本項目設計可用于各種電氣設備形成can接口,也可在此基礎上繼續開(kāi)發(fā),加入設備的控制算法,對設備進(jìn)行總線(xiàn)化智能化改造。利用pic18f458設計的can總線(xiàn)接口進(jìn)行了dkj直行程電動(dòng)執行機構的智能化改造,與上位機實(shí)現了can總線(xiàn)通訊,試驗效果理想。
評論