《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > CAN總線系統(tǒng)的設(shè)計與實現(xiàn)
CAN總線系統(tǒng)的設(shè)計與實現(xiàn)
摘要: 現(xiàn)場總線有著巨大的發(fā)展?jié)摿?,它將給自動控制領(lǐng)域的變革帶來深遠的影響。我們設(shè)計的CAN總線收發(fā)器具有通用性,在本系統(tǒng)設(shè)計的基礎(chǔ)上只需要相應(yīng)的修改數(shù)據(jù)傳輸協(xié)議即可應(yīng)用于各個CAN總線的數(shù)傳系統(tǒng)。
Abstract:
Key words :

  在現(xiàn)場總線概念的出現(xiàn)到現(xiàn)在的近20年時間里,已經(jīng)出現(xiàn)了好幾種現(xiàn)場總線技術(shù)并走向成熟。其中CAN總線已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一。 CAN是一種由帶有CAN控制器組成的高性能串行數(shù)據(jù)局域通信網(wǎng)絡(luò),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。由于其具有通信速度快、可靠性高和性能價格比好等突出優(yōu)點,它正越拉越廣泛地應(yīng)用于汽車、機械工業(yè)、紡織機械、農(nóng)業(yè)用機械、機器人、數(shù)控機床、醫(yī)療器械、家用電器及傳感器等領(lǐng)域。圖1所示是典型的CAN總線節(jié)點的系統(tǒng)框圖。

CAN總線節(jié)點的系統(tǒng)框圖

  系統(tǒng)硬件設(shè)計

  SJA1000獨立CAN控制器是PHILIPS公司PCA82C200CAN控制器的替代產(chǎn)品,它是在完全兼容PCA82C200的基礎(chǔ)上,增加了一種新的工作模式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標(biāo)準(zhǔn),最高速到達1Mb/s,輸入級3.3V以及5V器件兼容,至少可以連接110個節(jié)點。本設(shè)計的微處理器為89C51負責(zé)初始化 SJA1000及通過控制SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù),系統(tǒng)電路圖如圖2所示。

系統(tǒng)電路圖

  CAN控制器SJA1000的數(shù)據(jù)線AD0~AD7連接到51單片機的P0口,連接到基址為0xFA00的外部存儲器片選信號,當(dāng)訪問地址 0xFA00~0xFA31時,CPU可對SJA1000執(zhí)行相應(yīng)的讀寫操作。SJA1000的、、分別與51對應(yīng)的引腳相連,接51的使51可以通過中斷方式訪問SJA1000。

  系統(tǒng)軟件設(shè)計

  本設(shè)計的系統(tǒng)由4個節(jié)點組成,一個節(jié)點由上位機通過并口轉(zhuǎn)CAN總線的數(shù)據(jù)收發(fā)器構(gòu)成,另外3個節(jié)點由圖2所示的單片機CAN總線收發(fā)系統(tǒng)構(gòu)成。單片機系統(tǒng)每秒發(fā)送一幀(8個字節(jié))數(shù)據(jù)。連接上位機的CAN總線收發(fā)器有相應(yīng)的上位機測試軟件支持,本文主要介紹單片機CAN總線收發(fā)器的程序設(shè)計。圖3是下位機軟件的流程圖。

下位機軟件的流程圖

  系統(tǒng)設(shè)計的部分代碼如下:

main()
  {
Sja_1000_Init();     //初始化SJA1000
 Init_Cpu();      //初始化CPU
 Init_T0();       //初始化定時器
 flag_init=0x00;
 while(1)
 {
  if(rcv_flag)    //rcv_flag為接受標(biāo)志位,有接收則單片機進行處理
  {
   rcv_flag=0; BCAN_DATA_RECEIVE(rcv_data);
 BCAN_CMD_PRG(0X04);
   disp_rec();
  }
if(flag_sec)    //定時中斷標(biāo)志為,定時時間到則發(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的初始化過程包括申請進入復(fù)位狀態(tài),設(shè)置總線波特率,設(shè)置輸出方式,開放錯誤中斷、接受和發(fā)送中斷。在進行數(shù)據(jù)發(fā)送時數(shù)據(jù)包前兩個字節(jié)0Xaa、0X08為描述符,包括11位長的ID(標(biāo)志符)\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)。每當(dāng)啟動一個下位機CAN收發(fā)器,上位機的測試軟件就可以每隔一秒鐘收到由同一CAN收發(fā)器發(fā)送的數(shù)據(jù)幀。實驗結(jié)果顯示當(dāng)3臺下位機CAN總線同時發(fā)數(shù)時數(shù)據(jù)接收端沒有數(shù)據(jù)丟失和總線沖突現(xiàn)象。

  結(jié)語

  現(xiàn)場總線有著巨大的發(fā)展?jié)摿?,它將給自動控制領(lǐng)域的變革帶來深遠的影響。我們設(shè)計的CAN總線收發(fā)器具有通用性,在本系統(tǒng)設(shè)計的基礎(chǔ)上只需要相應(yīng)的修改數(shù)據(jù)傳輸協(xié)議即可應(yīng)用于各個CAN總線的數(shù)傳系統(tǒng)。

  參考文獻:

  1. 陳立元主編. Visual Basic實現(xiàn)串并行通信技術(shù). 清華大學(xué)出版社,2001

  2. 張學(xué)忠,王福成主編. Visual Basic控件應(yīng)用編程實例教程. 北京希望電子出版社,2002

  3. 馬希榮主編. Visual Basic 6.0 程序設(shè)計. 機械工業(yè)出版社,2004

  4. 彭禹皓. 基于單片機和CAN控制器的嵌入式系統(tǒng). 微計算機信息,2007,4-2:33-35

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产一级精品aaaaa看| 一区二区三区国产精华| 欧美区视频在线观看| 美女网站久久| 久久亚洲春色中文字幕久久久 | 亚洲欧洲一区二区三区| 欧美在线短视频| 欧美呦呦网站| 欧美永久精品| 亚洲国产精品福利| 亚洲激情av| 亚洲免费高清视频| 一区二区三区精品在线| 一区二区三区日韩| 亚洲午夜电影在线观看| 亚洲一品av免费观看| 亚洲伊人网站| 午夜精品区一区二区三| 午夜视频一区| 久久精品99国产精品日本 | 国产精品九九久久久久久久| 国产精品福利网| 国产精品捆绑调教| 国产精品亚洲一区二区三区在线| 国产乱码精品一区二区三区五月婷 | 国产精品久久久久影院亚瑟| 国产精品xxx在线观看www| 国产精品乱码妇女bbbb| 国产日韩欧美综合在线| 精品二区视频| 亚洲精品女人| 亚洲天堂久久| 欧美在线日韩| 亚洲精选久久| 亚洲欧美春色| 久久国产精彩视频| 欧美不卡一区| 欧美日韩一区三区| 国产裸体写真av一区二区| 韩国美女久久| 亚洲精品日本| 午夜精品久久| 亚洲精品1区2区| 国产精品99久久不卡二区| 欧美一级淫片aaaaaaa视频| 久久夜色精品国产亚洲aⅴ | 欧美日韩国产经典色站一区二区三区| 欧美天天在线| 国产一区二区视频在线观看 | 久久精品理论片| 一区二区三区高清视频在线观看| 亚洲欧美激情诱惑| 狼狼综合久久久久综合网| 欧美日韩人人澡狠狠躁视频| 国产一区二区欧美日韩| 亚洲欧洲综合| 性欧美超级视频| 日韩视频永久免费| 欧美一区2区视频在线观看 | 日韩一级精品| 久久精品av麻豆的观看方式| 99成人精品| 久久久伊人欧美| 欧美日韩网址| 极品少妇一区二区| 9国产精品视频| 久久精品国产综合精品| 亚洲欧美日韩国产综合精品二区| 牛牛影视久久网| 国产精品一区视频| 亚洲精品偷拍| 亚洲高清免费| 午夜日韩电影| 欧美日韩国产大片| 在线精品福利| 欧美一级网站| 亚洲男女自偷自拍图片另类| 免费亚洲一区二区| 国产伦精品一区二区三区视频黑人| 亚洲日本免费| 久久精品国产久精国产思思| 亚洲欧美日韩久久精品| 欧美日韩国产综合视频在线观看 | 亚洲激情黄色| 久久成人精品视频| 欧美午夜精品| 亚洲精品色婷婷福利天堂| 亚洲高清一区二| 欧美一区二区成人| 国产精品chinese| 亚洲国产精品专区久久| 久久国产精品99久久久久久老狼| 亚洲欧美激情视频| 欧美日韩一区二区在线观看| 亚洲国产精品一区二区第四页av| 久久国产主播| 久久国产精品99国产| 国产精品美女久久久久av超清| 最近看过的日韩成人| 亚洲经典视频在线观看| 久久亚洲春色中文字幕| 国产一区二区福利| 午夜精品久久久久久久白皮肤| 亚洲一区二区免费视频| 欧美日本在线视频| 亚洲精品乱码| 9久re热视频在线精品| 欧美片在线播放| 亚洲乱码国产乱码精品精天堂| 亚洲国产精品ⅴa在线观看| 久久久综合免费视频| 国产一级揄自揄精品视频| 香港成人在线视频| 欧美一区二区三区视频在线| 国产精品国产馆在线真实露脸| 亚洲免费激情| 在线视频日本亚洲性| 欧美日韩亚洲一区二区三区在线| 亚洲黄一区二区三区| 亚洲精品乱码久久久久久黑人| 免播放器亚洲一区| 亚洲电影激情视频网站| 亚洲精品五月天| 欧美韩日高清| 亚洲精品国产精品乱码不99按摩| 亚洲精品小视频| 欧美日韩一区二区高清| 在线一区欧美| 欧美一级免费视频| 国产日韩欧美制服另类| 久久国产精品72免费观看| 久久综合999| 亚洲黄网站在线观看| 一区二区三区精品在线| 国产精品久久久久毛片大屁完整版| 亚洲午夜免费福利视频| 欧美一区二视频| 韩国美女久久| 日韩亚洲国产精品| 国产精品福利在线观看| 亚洲欧美日韩一区在线| 久久久久成人网| 亚洲国产一区二区三区a毛片| 99精品久久久| 国产精品久久久91| 欧美一区网站| 欧美成人四级电影| 99精品欧美一区二区蜜桃免费| 午夜精品久久久久| 激情另类综合| 一区电影在线观看| 国产精品亚洲第一区在线暖暖韩国| 欧美一级一区| 欧美精品入口| 亚洲视频在线一区| 久久网站免费| 亚洲狼人综合| 欧美一级视频精品观看| 亚洲电影免费观看高清完整版在线观看| 一本色道久久综合亚洲精品不| 欧美午夜无遮挡| 欧美一区免费| 欧美精品一区二区三区视频| 中日韩午夜理伦电影免费| 久久久久久网| 亚洲美女啪啪| 久久精品女人的天堂av| 亚洲片区在线| 欧美一区三区三区高中清蜜桃| 在线观看的日韩av| 亚洲色诱最新| 狠狠色综合网站久久久久久久| 一区二区激情视频| 激情丁香综合| 亚洲一区久久久| 伊人天天综合| 欧美一级欧美一级在线播放| 亚洲国产日韩欧美综合久久| 性色一区二区三区| 最新国产拍偷乱拍精品 | 欧美怡红院视频| 亚洲国内精品在线| 久久精品国产99国产精品澳门| 亚洲精品美女91| 久久综合久久综合久久| 亚洲午夜精品久久| 欧美丰满高潮xxxx喷水动漫| 亚洲一区二区三区欧美| 欧美顶级少妇做爰| 午夜精彩国产免费不卡不顿大片| 欧美啪啪一区| 亚洲第一偷拍| 国产女人水真多18毛片18精品视频| 日韩午夜在线视频| 极品中文字幕一区| 久久激情综合网| 亚洲一区二区三区免费观看| 欧美精选午夜久久久乱码6080| 亚洲大胆在线| 国产视频精品xxxx|