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

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

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

  系統(tǒng)硬件設計

  SJA1000獨立CAN控制器是PHILIPS公司PCA82C200CAN控制器的替代產品,它是在完全兼容PCA82C200的基礎上,增加了一種新的工作模式PeliCAN,SJA1000完全支持具有很多新特性的CAN2.0B協(xié)議。SJA1000的工作模式通過其內部的時鐘分頻寄存器中的CAN模式為來選擇。SJA1000可以支持多種為處理器的時序特性,如Intel模式或Motorla模式,SJA1000與微處理器的接口非常簡單,微處理器以訪問外部存儲器的方式來訪問SJA1000。

  TJA1050是控制器局域網CAN協(xié)議控制器和物理總線之間的接口,TJA1050可以為總線提供不同的發(fā)送性能,為CAN控制器提供不同的接收性能。TJA1050主要有以下特征:完全符合ISO 11898標準,最高速到達1Mb/s,輸入級3.3V以及5V器件兼容,至少可以連接110個節(jié)點。本設計的微處理器為89C51負責初始化 SJA1000及通過控制SJA1000實現數據的接收和發(fā)送等通信任務,系統(tǒng)電路圖如圖2所示。

系統(tǒng)電路圖

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

  系統(tǒng)軟件設計

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

下位機軟件的流程圖

  系統(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ā)送數據幀
 {  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)顯示接受數據

 

  SJA1000的初始化過程包括申請進入復位狀態(tài),設置總線波特率,設置輸出方式,開放錯誤中斷、接受和發(fā)送中斷。在進行數據發(fā)送時數據包前兩個字節(jié)0Xaa、0X08為描述符,包括11位長的ID(標志符)\1位RTR\4位描述數據長度的DLC共16 位。BCAN_DATA_RECEIVE(rcv_data),為89C51對SJA1000的讀數據函數其具體函數定義:

 

   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)               //如果是數據幀
   {
     TempCount=(*SJA_BCANAdr& 0x0f)+2;      //計算報文中數據的個數
   }
   else
   {
    TempCount="2";
   }
   SJA_BCANAdr = REG_RxBuffer1;             //訪問地址指向接收緩沖區(qū)1
   memcpy(RcvDataBuf, SJA_BCANAdr,TempCount);//讀取接收緩沖區(qū)的報文
   return  0;
 }

  此函數僅限于CAN控制器接受數據,返回值如果為0表示接受成功,如果為1表示接受失敗。

BCAN_DATA_WRITE(send_data)函數是89C51對SJA1000的寫數據函數其具體定義如下:
  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,從而得出是數據幀還是遠程幀
   {
     TempCount =(SendData Buf[1]&0x0f)+2; //輸入數據幀
     }
     else
     {
       TempCount =2;                     //遠程幀
  memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
    return 0;
  }

 

  此函數將待發(fā)送的特定幀各式的數據,送入SJA1000發(fā)送緩存區(qū)中,然后啟動,函數返回0表示將數據成功的送至發(fā)送緩沖區(qū),返回1表示上一次的數據正在發(fā)送。

  系統(tǒng)組網相對容易只需把各個節(jié)點掛在同一條雙絞線上即可,啟動上位機的CAN收發(fā)器,用來監(jiān)視總線數據狀態(tài)。每當啟動一個下位機CAN收發(fā)器,上位機的測試軟件就可以每隔一秒鐘收到由同一CAN收發(fā)器發(fā)送的數據幀。實驗結果顯示當3臺下位機CAN總線同時發(fā)數時數據接收端沒有數據丟失和總線沖突現象。

  結語

  現場總線有著巨大的發(fā)展?jié)摿Γ鼘⒔o自動控制領域的變革帶來深遠的影響。我們設計的CAN總線收發(fā)器具有通用性,在本系統(tǒng)設計的基礎上只需要相應的修改數據傳輸協(xié)議即可應用于各個CAN總線的數傳系統(tǒng)。

  參考文獻:

  1. 陳立元主編. Visual Basic實現串并行通信技術. 清華大學出版社,2001

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

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

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

此內容為AET網站原創(chuàng),未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品二区在线| 亚洲国产成人精品久久久国产成人一区 | 亚洲狼人综合| 欧美在线播放| 香港久久久电影| 亚洲女性裸体视频| 亚洲一级高清| 亚洲永久免费观看| 亚洲小说欧美另类婷婷| 一区二区三区四区五区在线| 洋洋av久久久久久久一区| 亚洲精品一区二区三区不| 亚洲区国产区| 日韩写真在线| 一本久久a久久精品亚洲| 99热精品在线| 亚洲素人一区二区| 亚洲影视在线| 久久成人一区二区| 亚洲国产精品一区制服丝袜| 亚洲国产一区二区三区青草影视| 亚洲国产美女久久久久| 亚洲欧洲日产国码二区| 亚洲日本成人女熟在线观看| 亚洲久久一区| 亚洲一区亚洲| 西西人体一区二区| 久久精品视频网| 久久综合九色欧美综合狠狠| 欧美r片在线| 欧美精品久久99久久在免费线| 欧美日韩高清在线播放| 国产精品久久久久久久久免费桃花 | 狠狠色伊人亚洲综合网站色| 一区二区在线不卡| 亚洲人线精品午夜| 一本色道久久综合亚洲精品婷婷| 亚洲一区在线播放| 欧美一区二区三区四区夜夜大片| 亚洲电影在线观看| 一区二区欧美日韩视频| 午夜在线播放视频欧美| 久久久久久高潮国产精品视| 欧美成人小视频| 欧美性感一类影片在线播放| 国产日韩欧美成人| 亚洲高清123| 亚洲一区综合| 亚洲国产精品久久久| 99香蕉国产精品偷在线观看| 欧美一区二区三区喷汁尤物| 美女视频黄a大片欧美| 欧美日韩国产探花| 国产日韩欧美日韩| 亚洲第一网站| 亚洲一区免费网站| 亚洲伦理网站| 欧美中文在线免费| 欧美日韩高清在线| 国产一区二区三区精品欧美日韩一区二区三区 | 久久se精品一区精品二区| 亚洲乱码日产精品bd| 亚洲欧美国产视频| 欧美va天堂在线| 国产精品青草久久| 亚洲精美视频| 性欧美暴力猛交69hd| 日韩午夜av在线| 欧美在线视频不卡| 欧美日韩精品免费| 国模精品娜娜一二三区| 在线亚洲国产精品网站| 亚洲国产精品第一区二区| 亚洲男人天堂2024| 免费日韩av片| 国产一区白浆| 一区二区欧美精品| 亚洲人在线视频| 久久久国际精品| 欧美视频免费看| 在线观看一区视频| 亚洲男人天堂2024| 在线视频你懂得一区二区三区| 久久夜色精品国产亚洲aⅴ| 国产精品久久久久久久久久久久久 | 亚洲精品一区二区在线| 久久精品国产亚洲aⅴ| 欧美婷婷久久| 亚洲人成人一区二区在线观看| 久久激情视频久久| 性欧美xxxx大乳国产app| 欧美日韩成人精品| 亚洲国产精品成人va在线观看| 欧美在线视屏| 久久精品成人| 国产精品亚洲片夜色在线| 日韩一级大片| 日韩亚洲国产欧美| 欧美成人中文| 一色屋精品视频免费看| 亚洲欧美在线高清| 午夜精品在线观看| 欧美色123| 99精品国产高清一区二区| 亚洲乱码久久| 欧美国产在线视频| 亚洲高清不卡在线| 亚洲人体影院| 欧美电影打屁股sp| 亚洲国产另类久久久精品极度| 亚洲国产成人久久综合| 久久婷婷久久| 国内成人精品一区| 久久精品91| 另类激情亚洲| 一区二区三区在线免费观看| 亚洲福利专区| 榴莲视频成人在线观看| 激情久久五月天| 亚洲国产另类久久精品| 美女网站久久| 亚洲国产精品一区二区久| 91久久精品国产91性色| 男人插女人欧美| 亚洲韩国精品一区| 亚洲六月丁香色婷婷综合久久| 欧美激情第10页| 亚洲人精品午夜| 一区二区三区视频在线播放| 欧美日韩另类字幕中文| 99在线精品视频在线观看| 亚洲午夜激情网站| 国产精品久久综合| 亚洲欧美日本国产专区一区| 久久成人一区二区| 合欧美一区二区三区| 亚洲国产视频直播| 欧美精品在线观看91| 夜夜嗨av一区二区三区中文字幕 | 亚洲欧美日韩成人高清在线一区| 国产精品亚洲不卡a| 欧美一区三区三区高中清蜜桃| 久久久久久精| 亚洲国产欧美在线人成| 一本色道久久综合狠狠躁的推荐| 欧美日韩在线综合| 亚洲一区二区三区成人在线视频精品| 欧美一区二区观看视频| 国产综合久久久久久| 亚洲国产欧美一区二区三区久久| 欧美高清视频一二三区| 99精品久久久| 香蕉久久一区二区不卡无毒影院 | 亚洲宅男天堂在线观看无病毒| 国产精品久久久久aaaa樱花| 午夜电影亚洲| 欧美99在线视频观看| 亚洲美女毛片| 久久激情视频| 91久久夜色精品国产九色| 亚洲综合色网站| 狠狠色噜噜狠狠狠狠色吗综合| 日韩一区二区精品葵司在线| 国产精品一卡二| 亚洲国产日韩欧美在线99| 欧美三级视频| 欧美一区二区在线看| 欧美激情aaaa| 亚洲欧美在线免费观看| 欧美成年人网站| 亚洲欧美国产高清| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲三级电影在线观看| 欧美在线精品一区| 亚洲国产成人一区| 午夜精品福利一区二区蜜股av| 樱桃视频在线观看一区| 亚洲天堂男人| 国产综合网站| 亚洲性视频网站| 一区二区在线看| 亚洲欧美另类在线| 亚洲国产精品va在线看黑人动漫| 羞羞答答国产精品www一本| 亚洲国产乱码最新视频| 午夜在线精品偷拍| 亚洲精品美女久久久久| 久久免费视频网站| 亚洲午夜在线观看视频在线| 老色鬼久久亚洲一区二区| 亚洲无限av看| 欧美精品亚洲| 久久精品理论片| 国产精品素人视频| 99国产麻豆精品| 国内免费精品永久在线视频| 亚洲一级电影| 亚洲国产婷婷| 久久亚洲不卡| 欧美亚洲在线视频|