技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術頻道 > 技術百科 > CAN總線系統(tǒng)的設計與實現(xiàn)

CAN總線系統(tǒng)的設計與實現(xiàn)

時間:2008-04-16 11:25:00來源:zhangting

導語:?在現(xiàn)場總線概念的出現(xiàn)到現(xiàn)在的近20年時間里,已經(jīng)出現(xiàn)了好幾種現(xiàn)場總線技術并走向成熟。其中CAN總線已被公認為幾種最有前途的現(xiàn)場總線之一。
在現(xiàn)場總線概念的出現(xiàn)到現(xiàn)在的近20年時間里,已經(jīng)出現(xiàn)了好幾種現(xiàn)場總線技術并走向成熟。其中CAN總線已被公認為幾種最有前途的現(xiàn)場總線之一。CAN是一種由帶有CAN控制器組成的高性能串行數(shù)據(jù)局域通信網(wǎng)絡,是國際上應用最廣泛的現(xiàn)場總線之一。最初,CAN被設計作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡。由于其具有通信速度快、可靠性高和性能價格比好等突出優(yōu)點,它正越拉越廣泛地應用于汽車、機械工業(yè)、紡織機械、農(nóng)業(yè)用機械、機器人、數(shù)控機床、醫(yī)療器械、家用電器及傳感器等領域。圖1所示是典型的CAN總線節(jié)點的系統(tǒng)框圖。 [align=center] 圖1 CAN總線節(jié)點系統(tǒng)框圖[/align] 系統(tǒng)硬件設計 SJA1000獨立CAN控制器是PHILIPS公司PCA82C200CAN控制器的替代產(chǎn)品,它是在完全兼容PCA82C200的基礎上,增加了一種新的工作模式PeliCAN,SJA1000完全支持具有很多新特性的CAN2.0B協(xié)議。SJA1000的工作模式通過其內(nèi)部的時鐘分頻寄存器中的CAN模式為來選擇。SJA1000可以支持多種為處理器的時序特性,如Intel模式或Motorla模式,SJA1000與微處理器的接口非常簡單,微處理器以訪問外部存儲器的方式來訪問SJA1000。 TJA1050是控制器局域網(wǎng)CAN協(xié)議控制器和物理總線之間的接口,TJA1050可以為總線提供不同的發(fā)送性能,為CAN控制器提供不同的接收性能。TJA1050主要有以下特征:完全符合ISO 11898標準,最高速到達1Mb/s,輸入級3.3V以及5V器件兼容,至少可以連接110個節(jié)點。本設計的微處理器為89C51負責初始化SJA1000及通過控制SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務,系統(tǒng)電路圖如圖2所示。 [align=center] 圖2 系統(tǒng)電路圖[/align] CAN控制器SJA1000的數(shù)據(jù)線AD0~AD7連接到51單片機的P0口,連接到基址為0xFA00的外部存儲器片選信號,當訪問地址0xFA00~0xFA31時,CPU可對SJA1000執(zhí)行相應的讀寫操作。SJA1000的、、分別與51對應的引腳相連,接51的使51可以通過中斷方式訪問SJA1000。 系統(tǒng)軟件設計 本設計的系統(tǒng)由4個節(jié)點組成,一個節(jié)點由上位機通過并口轉(zhuǎn)CAN總線的數(shù)據(jù)收發(fā)器構成,另外3個節(jié)點由圖2所示的單片機CAN總線收發(fā)系統(tǒng)構成。單片機系統(tǒng)每秒發(fā)送一幀(8個字節(jié))數(shù)據(jù)。連接上位機的CAN總線收發(fā)器有相應的上位機測試軟件支持,本文主要介紹單片機CAN總線收發(fā)器的程序設計。圖3是下位機軟件的流程圖。 [align=center] 圖3 下位機主程序流程圖[/align] 系統(tǒng)設計的部分代碼如下: main()  ?。? Sja_1000_Init(); //初始化SJA1000 Init_Cpu(); //初始化CPU Init_T0(); //初始化定時器 flag_init=0x00; while(1) { if(rcv_flag) //rcv_flag為接受標志位,有接收則單片機進行處理 { rcv_flag=0; BCAN_DATA_RECEIVE(rcv_data); BCAN_CMD_PRG(0X04); disp_rec(); } if(flag_sec) //定時中斷標志為,定時時間到則發(fā)送數(shù)據(jù)幀 { flag_sec=0; send_data[0]=0xaa; send_data[1]=0x08; send_data[2]=DA1; send_data[3]=DA2;   send_data[4]=DA3;   send_data[5]=DA4;   send_data[6]=DA5;   send_data[7]=DA6;   send_data[8]=DA7;   send_data[9]=DA8; BCAN_DATA_WRITE(send_data); BCAN_CMD_PRG(0X01); } if(err_flag) { err_flag=0; disp_err(); Sja_1000_Init(); } display(a); //循環(huán)顯示接受數(shù)據(jù)   SJA1000的初始化過程包括申請進入復位狀態(tài),設置總線波特率,設置輸出方式,開放錯誤中斷、接受和發(fā)送中斷。在進行數(shù)據(jù)發(fā)送時數(shù)據(jù)包前兩個字節(jié)0Xaa、0X08為描述符,包括11位長的ID(標志符)\1位RTR\4位描述數(shù)據(jù)長度的DLC共16 位。BCAN_DATA_RECEIVE(rcv_data),為89C51對SJA1000的讀數(shù)據(jù)函數(shù)其具體函數(shù)定義:  bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf) { unsigned char TempCount; SJA_BCANAdr = REG_STATUS; //訪問地址指向狀態(tài)寄存器 if((*SJA_BCANAdr&0x01)==0) //判斷報文是否有效 { return 1; } SJA_BCANAdr = REG_RxBuffer2; //訪問地址指向接收緩沖區(qū)2 if((*SJA_BCANAdr&0x10)==0) //如果是數(shù)據(jù)幀 { TempCount=(*SJA_BCANAdr& 0x0f)+2; //計算報文中數(shù)據(jù)的個數(shù) } else { TempCount=2; } SJA_BCANAdr = REG_RxBuffer1; //訪問地址指向接收緩沖區(qū)1 memcpy(RcvDataBuf, SJA_BCANAdr,TempCount);//讀取接收緩沖區(qū)的報文 return 0; }   此函數(shù)僅限于CAN控制器接受數(shù)據(jù),返回值如果為0表示接受成功,如果為1表示接受失敗。   BCAN_DATA_WRITE(send_data)函數(shù)是89C51對SJA1000的寫數(shù)據(jù)函數(shù)其具體定義如下:   bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)    {    unsigned char TempCount;    SJA_BCANAdr = REG_STATUS; //訪問地址指向狀態(tài)寄存器    if((*SJA_BCANAdr&0x08) == 0) //判斷上次發(fā)送是否完成    {    return 1;    } if((*SJA_BCANAdr&0x04)==0) //判斷發(fā)送緩沖區(qū)是否鎖定    {    return 1;    }    SJA_BCANAdr = REG_TxBuffer1; //訪問地址指向發(fā)送緩沖區(qū)1 if((SendDataBuf[1]&0x10)==0) //判斷RTR,從而得出是數(shù)據(jù)幀還是遠程幀 { TempCount =(SendData Buf[1]&0x0f)+2; //輸入數(shù)據(jù)幀    }    else    {    TempCount =2; //遠程幀 memcpy(SJA_BCANAdr,SendDataBuf,TempCount);    return 0;  ?。? 此函數(shù)將待發(fā)送的特定幀各式的數(shù)據(jù),送入SJA1000發(fā)送緩存區(qū)中,然后啟動,函數(shù)返回0表示將數(shù)據(jù)成功的送至發(fā)送緩沖區(qū),返回1表示上一次的數(shù)據(jù)正在發(fā)送。 系統(tǒng)組網(wǎng)相對容易只需把各個節(jié)點掛在同一條雙絞線上即可,啟動上位機的CAN收發(fā)器,用來監(jiān)視總線數(shù)據(jù)狀態(tài)。每當啟動一個下位機CAN收發(fā)器,上位機的測試軟件就可以每隔一秒鐘收到由同一CAN收發(fā)器發(fā)送的數(shù)據(jù)幀。實驗結(jié)果顯示當3臺下位機CAN總線同時發(fā)數(shù)時數(shù)據(jù)接收端沒有數(shù)據(jù)丟失和總線沖突現(xiàn)象。 結(jié) 語 現(xiàn)場總線有著巨大的發(fā)展?jié)摿Γ鼘⒔o自動控制領域的變革帶來深遠的影響。我們設計的CAN總線收發(fā)器具有通用性,在本系統(tǒng)設計的基礎上只需要相應的修改數(shù)據(jù)傳輸協(xié)議即可應用于各個CAN總線的數(shù)傳系統(tǒng)。 參考文獻: 1. 陳立元主編. Visual Basic實現(xiàn)串并行通信技術. 清華大學出版社,2001 2. 張學忠,王福成主編. Visual Basic控件應用編程實例教程. 北京希望電子出版社,2002 3. 馬希榮主編. Visual Basic 6.0 程序設計. 機械工業(yè)出版社,2004 4. 彭禹皓. 基于單片機和CAN控制器的嵌入式系統(tǒng). 微計算機信息,2007,4-2:33-35

標簽:

點贊

分享到:

上一篇:基于RS-485總線通信系統(tǒng)的可...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號