<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > RS485-CAN轉換器的設計

RS485-CAN轉換器的設計

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
  1 RS485CAN 總線(xiàn)簡(jiǎn)介

  RS485 是一種平衡傳輸方式的串行接口標準,采用半雙工異步數據通信方式?;谠赗S485 總線(xiàn)上只能有一個(gè)主機的特點(diǎn),它往往應用在集中控制樞紐和分散控制單元之間。同時(shí)RS485 的總線(xiàn)效率低,系統的實(shí)時(shí)性差,通信的可靠性低,后期維護成本高,網(wǎng)絡(luò )工程調試復雜,傳輸距離不理想,單總線(xiàn)可掛接的節點(diǎn)少等缺點(diǎn)也局限了其應用。

本文引用地址:http://dyxdggzs.com/article/201611/319298.htm

  CAN(Controller Area Network,控制器局域網(wǎng))現場(chǎng)總線(xiàn)是一種由帶CAN 控制器組成的高性能串行數據局域通信網(wǎng)絡(luò ),是國際上應用最廣泛的現場(chǎng)總線(xiàn)之一。它的總線(xiàn)長(cháng)度最遠可達10 千米(速率5Kbps 以下),數據傳輸速率最高可達1Mbps(通訊距離40 米以?xún)龋?。它在多主方式下工作,不分主從。采用非破壞總線(xiàn)仲裁技術(shù),即使網(wǎng)絡(luò )負載很重也不會(huì )出現網(wǎng)絡(luò )癱瘓現象。此外,CAN 的每幀信息都有CRC 校驗和其它檢錯措施,有很好的檢錯效果。由于CAN 總線(xiàn)具備以上優(yōu)點(diǎn),它目前已經(jīng)被廣泛應用到汽車(chē)電子、電力系統、航空工業(yè)和自動(dòng)工作等領(lǐng)域中,并形成了國際標準,被公認為幾種最有前途的現場(chǎng)總線(xiàn)之一。

  一時(shí)間完全放棄RS485網(wǎng)絡(luò )系統是有困難的,尤其是在已經(jīng)具有現成的硬件網(wǎng)絡(luò )中。因此考慮一種折中的方法,就是在保留現有RS485系統硬件結構的基礎上,添加一個(gè)CAN總線(xiàn)接口,從而實(shí)現RS485網(wǎng)絡(luò )與CAN網(wǎng)絡(luò )的互聯(lián)。

  2 系統硬件設計

  RS485-CAN轉換器硬件設計框圖如圖1所示,整個(gè)硬件系統分為5個(gè)模塊:微控制器模塊,基本模塊,CAN接口模塊,RS485模塊和儲存模塊。其中CAN接口模塊的CAN控制器的選用要依據微控制器模塊,如果選擇的微控制器中集成了CAN控制器,則無(wú)需外接CAN控制器,否則需要外接CAN控制器。

  2.1 微控制器模塊,基本模塊以及儲存模塊

  這三個(gè)模塊的設計屬于常規設計,因此省去具體的電路圖。需要說(shuō)明的是微控制器可以選擇內部集成了CAN 控制器的單片機,但是本設計基于系統成本,性?xún)r(jià)比以及微控制器的應用普遍性的考慮,使用的是ATMEL 的AT89C52 單片機;基本模塊主要是完成微控制器的外圍電路設計,主要包括電源和晶振以及復位電路等;儲存模塊主要是用來(lái)儲存系統的配置信息,如CAN 波特率,RS485 波特率等,要求的儲存空間較小,1K 的片外EEPROM 足夠使用,當然也可以選擇自帶EEPROM 的微處理器。

圖1:系統硬件設計框圖

  2.2 CAN 接口模塊

  CAN 接口模塊包括總線(xiàn)控制器和收發(fā)器兩部分。CAN 總線(xiàn)控制器選擇的是SJA1000,它是Philips 公司推出的一款完全符合CAN 總線(xiàn)協(xié)議規定的CAN 控制器,可完成報文控制,數據濾波等CAN 控制器功能,SJA1000 不僅兼容PCA82C200 支持的BasicCAN(CANBUS2.0A)模式,還支持功能更強的PeliCAN(CANBUS 2.0B)模式;收發(fā)器選擇的是TJA1050,它是CAN 協(xié)議控制器和物理總線(xiàn)的接口,是一種標準的高速CAN 收發(fā)器。

圖2:CAN 模塊電路圖

  如圖2所示SJA1000的AD0-AD7與單片機的數據總線(xiàn)相連,P2.0引腳作為SJA1000的片選使能端,由ALE,WR,RD控制SJA1000的數據的發(fā)送和接收。11腳MODE接高電平,選用51系列的8位微控制器的Intel二分頻模式。16腳是中斷信號,接單片機的外部中斷引腳。TX1腳懸空,RX1腳的電位必須維持在0.5VCC以上,否則將不能形成CAN總線(xiàn)所要求的電平邏輯。

  高速光耦6N137提高了總線(xiàn)節點(diǎn)的抗干擾能力,TVS能避免數據受到不必要的外界影響并能保護元器件;另外在總線(xiàn)兩端的設備加120歐姆的匹配電阻會(huì )使數據通信的抗干擾性以及可靠性大大加強,CANH和CANL與地之間并聯(lián)兩個(gè)30PF的小電容,可以濾除總線(xiàn)上的高頻干擾并且具有一定的防電磁輻射的能力。這些額外的保護電路同樣適合RS485模塊的設計。

  2.3 RS485 接口模塊

  RS485 接口模塊采用MAX485 芯片作為總線(xiàn)收發(fā)器,它是+5V 低功耗半雙工器件。MAX485 的驅動(dòng)器輸出是差分輸出,完全滿(mǎn)足RS485 串行協(xié)議的要求,兼容工業(yè)標準規范,符合RS485 串行協(xié)議的電氣規范。電路連接如圖3。

圖 3:RS485 模塊電路圖

  3 系統軟件設計

  本系統的軟件設計除了實(shí)現單個(gè)模塊的驅動(dòng)程序以外,最主要的就是實(shí)現兩種網(wǎng)絡(luò )間不同協(xié)議的轉換。CAN協(xié)議參考模型中定義了物理層和數據鏈路層,RS485協(xié)議參考模型中只定義了物理層。因此建立圖4所示的協(xié)議模型。

  CAN的幀格式中,有一個(gè)標識符域,CAN控制器的全局濾波器會(huì )檢測這個(gè)標識域,決定是否接收本幀數據。由于RS485網(wǎng)絡(luò )上,所有節點(diǎn)都會(huì )同時(shí)收到數據,因此可以為所有的RS485從設備設定同一個(gè)標識符。一個(gè)CAN節點(diǎn)若要發(fā)送數據給RS485設備,只需在該幀把標識符域設定為相應的標識符即可;RS485本質(zhì)上僅僅是一個(gè)物理層標準,其幀格式完全由用戶(hù)自己定義。最終在RS485總線(xiàn)中傳輸還是以幀為單位,其中包含了地址信息。RS485設備會(huì )自動(dòng)根據接收到的幀,自動(dòng)判斷該幀是否發(fā)往本節點(diǎn),然后做出相應處理。因此,在RS485設備要發(fā)送數據時(shí),RS485-CAN總線(xiàn)轉換器只需把RS485總線(xiàn)的數據進(jìn)行幀打包后送入CAN的數據幀中,然后發(fā)送到CAN網(wǎng)絡(luò )上;而RS485設備在接收數據時(shí),RS485-CAN總線(xiàn)轉換器則把RS485總線(xiàn)的數據幀從接收到的CAN數據幀中提取出來(lái),發(fā)往RS485設備即可。

圖4:RS485-CAN 協(xié)議模型

  3.1CAN 接口軟件設計

  CAN總線(xiàn)數據鏈路層結構可分為邏輯鏈路控制(LLC)子層和媒體訪(fǎng)問(wèn)控制(MAC)子層。LLC子層主要完成幀接收濾波,超載通告和恢復管理,而MAC子層結構功能模塊包括發(fā)送和接收兩個(gè)部分。對于CAN總線(xiàn)數據鏈路層的各種協(xié)議已經(jīng)被集成到SJA1000芯片中,應用時(shí)只要對SJA1000芯片的控制寄存器進(jìn)行相應的初始化即可進(jìn)行通信,而數據的接收和發(fā)送等也是通過(guò)讀寫(xiě)SJA1000內部寄存器來(lái)實(shí)現的。這里只給出SJA1000的初始化源程序,其它程序可參考文獻[2]進(jìn)行編寫(xiě)。

  SJA1000開(kāi)始工作之前,首先要判斷SJA1000與微處理器的連接是否正確,在確認正確后開(kāi)始SJA1000的初始化,之后SJA1000進(jìn)入工作模式,然后才可以進(jìn)行數據的讀寫(xiě)。

  typedef struct _CAN_PORTSTRUCT /*SJA1000初始化配置文件結構體*/

  {

  FIL filter; /*濾波方式*/

  LIS lisen; /*只聽(tīng)模式/正常模式*/

  TES test; /*自測試模式/正常模式*/

  SLE sleep; /*睡眠模式設置*/

  BAUD baud_rate; /*波特率*/

  MODEL workmodel ; /*工作模式*/

  UCHAR mask1;

  UCHAR mask2;

  UCHAR mask3;

  UCHAR mask4;

  UCHAR code1;

  UCHAR code2;

  UCHAR code3;

  UCHAR code4;

  }CAN_PORT,*CANPORTPTR;

  STATUS sja1000Init(CANPORTPTR pDev) /*SJA1000初始化*/

  {

  UCHAR value;

  canBoardInit(); /*進(jìn)入復位模式*/

  canBoard_canOutByte(SJA1000_MOD,MOD_RM); /*確定CAN控制器工作模式*/

  value = canBoard_canInByte(SJA1000_CDR);

  if(pDev->workmodel == Peli) value|= PeliCAN ;

  else value &= ~PeliCAN;

  /*設置模式寄存器(只在PeliCAN模式可訪(fǎng)問(wèn))*/

  canBoard_canOutByte(SJA1000_CDR,value|0x48);

  value = canBoard_canInByte(SJA1000_MOD);

  if(pDev->sleep == SNORM) value &=~(MOD_SM); /*睡眠模式*/

  else value|= MOD_SM; /*正常模式*/

  if(pDev->lisen == LNORM) value&= ~(MOD_LOM); /*正常模式*/

  else value|= MOD_LOM; /*只聽(tīng)模式*/

  if(pDev->test == TNORM) value&= ~(MOD_STM); /*正常模式*/

  else value|= MOD_STM; /*自檢測模式*/

  if(pDev->filter == SINGLE) value|= MOD_AFM; /*單向驗收濾波*/

  else value &=(~MOD_AFM); /*雙向驗收濾波*/

  canBoard_canOutByte(SJA1000_MOD,value);

  switch (pDev->baud_rate)

  {

  case B20: //波特率為20kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x07);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  break;

  case B80: //波特率為80kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x01);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  break;

  case B250: //波特率為250kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x00);

  canBoard_canOutByte(SJA1000_BTR1,0x1C);

  break;

  case B500: //波特率為500kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x00);

  canBoard_canOutByte(SJA1000_BTR1,0x14);

  break;

  default: //默認波特率為20kpbs

  canBoard_canOutByte(SJA1000_BTR0,0x07);

  canBoard_canOutByte(SJA1000_BTR1,0x7F);

  }

  canBoard_canOutByte(SJA1000_CMR,0); /*設置命令寄存器*/

  canBoard_canOutByte(SJA1000_EWLR,0x60); /*設置錯誤報警限額寄存器*/

  canBoard_canOutByte(SJA1000_IER,0); /*不使能所有中斷*/

  canBoard_canOutByte(SJA1000_OCR,0xaa); /*輸出控制寄存器設置*/

  canBoard_canOutByte(SJA1000_TXERR,0x0); /*設置發(fā)送錯誤計數器*/

  canBoard_canOutByte(SJA1000_RXERR,0x0); /*設置接受錯誤計數器*/

  canBoard_canOutByte(SJA1000_RMC,0); /*設置接收報文計數器*/

  canBoard_canOutByte(SJA1000_ACR0,pDev->code1);

  canBoard_canOutByte(SJA1000_ACR1,pDev->code2); /*設置驗收代碼寄存器*/

  canBoard_canOutByte(SJA1000_ACR2,pDev->code3);

  canBoard_canOutByte(SJA1000_ACR3,pDev->code4);

  canBoard_canOutByte(SJA1000_AMR0,pDev->mask4);

  canBoard_canOutByte(SJA1000_AMR1,pDev->mask4); /*設置驗收屏蔽寄存器*/

  canBoard_canOutByte(SJA1000_AMR2,pDev->mask4);

  canBoard_canOutByte(SJA1000_AMR3,pDev->mask4);

  return OK;

  }

  3.2 RS485接口軟件設計

  RS485接口軟件設計主要包括串口的初始化,串口中斷處理等函數的編寫(xiě),因為RS485接口的軟件設計比較簡(jiǎn)單,所以這部分可參考文獻[4]設計,這里省略。

  結束語(yǔ)

  CAN總線(xiàn)是當前應用最為廣泛的現場(chǎng)總線(xiàn)之一,而RS485總線(xiàn)是最常用的串行總線(xiàn),二者之間的轉換具有很高的使用價(jià)值。設計應注意以下幾點(diǎn):(1)RS485-CAN轉換器的主要任務(wù)是將數據以最快的速度轉發(fā),流量和差錯控制應由通信雙方的應用層來(lái)完成,因此設計不能過(guò)于復雜。(2)處理速度是設計時(shí)首先考慮的一點(diǎn),這將影響芯片的選型。(3)RS485-CAN的通用性取決于軟件方面的設計和協(xié)議的使用,硬件上都是兼容的。



關(guān)鍵詞: RS485CAN轉換

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>