《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于CAN總線的PC機與單片機的多點通信
基于CAN總線的PC機與單片機的多點通信
2015年微型機與應用第15期
劉 登,李國利,陳 健,張愷鈺,時 光
(金陵科技學院 機電工程學院,江蘇 南京 211169)
摘要: 設計了一種基于CAN總線的PC機與單片機多點通信系統。系統包括PC機、STC89S52單片機、CAN接口控制器、串行收發器等。介紹了USB轉CAN通信接口的通信節點設計方案,給出了各通信節點的硬件電路和軟件設計,最后進行了系統通信實驗,結果表明該系統具有可靠性高、抗干擾能力強等特點。
Abstract:
Key words :

  摘  要: 設計了一種基于CAN總線的PC機與單片機多點通信系統。系統包括PC機、STC89S52單片機、CAN接口控制器、串行收發器等。介紹了USB轉CAN通信接口的通信節點設計方案,給出了各通信節點的硬件電路和軟件設計,最后進行了系統通信實驗,結果表明該系統具有可靠性高、抗干擾能力強等特點。

  關鍵詞: CAN總線;單片機;多點通信

0 引言

  傳統的單片機串口通信中大多采用RS232或RS485串口,因其傳輸速率和距離(小于1.5 km)的限制,已漸漸不能滿足用戶系統需求,而CAN總線因其卓越的性能,被廣泛應用到汽車工業、自動控制、樓宇自動化、醫學設備等各個領域[1]。CAN(Controller Area Network,控制器局域網)屬于現場總線的范疇,是一種有效支持分布式控制或實時控制的串行通信網絡,是國際上應用最廣泛的現場總線之一[2-3]。CAN可以組建多主對等的總線通信系統;具有非破壞性總線仲裁技術,讓優先級高的信息得到更快速的處理;具有強大的錯誤檢測機制,可以檢測到總線上的任何錯誤;采用短幀結構、位填充和CRC校驗等措施,使傳輸具有高可靠性。這些優點使得CAN總線特別適用于工業過程監控設備的互聯。在所有的CAN轉接口中,USB速度快,即插即用,使用更加廣泛,采用USB轉CAN總線實現單片機與上位機的通信具有一定的研究與應用意義[4]。

1 系統硬件設計

  1.1 系統總體設計

001.jpg

  系統的總體結構如圖1所示,硬件電路主要包括USB轉CAN通信接口以及各個通信節點,每個節點由CAN收發器TJA1050、CAN控制器SJA1000和單片機STC89S52組成,CAN總線兩端應串接120 ?贅的電阻,該電阻對于匹配總線阻抗起著重要作用。系統主要實現的功能為:PC機通過USB轉CAN通信接口向CAN總線發送一幀CAN總線數據,相應節點在接收到CAN消息后,存儲在SJA1000的接收緩沖區中,并向單片機發送中斷信號,單片機在中斷子程序中讀取SJA1000接收緩沖區中的數據,當需要向上位機發送數據時,先由單片機將一幀CAN消息寫入到SJA1000的發送緩沖區,再將其發送到CAN總線上,PC機調用接收子函數以實現CAN消息的接收。

  1.2 USB轉CAN模塊硬件設計

002.jpg

  該部分硬件框圖如圖2所示。此部分對應于圖1中的USB轉CAN通信接口模塊。USB控制芯片采用CP2102,該芯片是一種高度集成的USB轉UART橋接器,包含USB2.0全速功能控制器,符合USB2.0規范的要求。USB收發器內含512 B接收緩沖器和512 B發送緩沖器,振蕩器和帶有全部的調制解調器控制信號的異步串行數據總線,CP2102內置有與計算機通信的USB協議,PC機通過USB控制芯片CP2102向單片機發送CAN消息,再由單片機通過SJA1000將數據送到CAN總線上。所提供的COM口器件驅動器允許一個基于CP2102的產品作為PC機的一個COM口使用,可以像操作通用串行口的控制方式來使用這個COM口。

  1.3 CAN模塊節點硬件設計

003.jpg

  CAN節點的通信核心芯片為CAN控制器和CAN驅動收發器,各節點電路圖如圖3所示。CAN控制器SJA1000是一種獨立控制器,是PHILIPS半導體PCA82C200 CAN控制器(BasicCAN)的替代品,而且它增加了一種新的工作模式(PeliCAN),這種模式支持具有很多新特性的CAN2.0B協議[5-6]。TJA1050 符合ISO 11898標準,協議控制器通過一條串行數據輸出線TxD和一條串行數據輸入線RxD連接到收發器,而收發器則通過它的兩個有差動接收和發送能力的總線終端CANH和CANL連接到總線線路。它的引腳S用于模式控制,參考輸出電壓Vef提供一個Vcc/2的額定輸出電壓,這個電壓是作為帶有模擬Rx輸入的CAN控制器的參考電平。由于SJA1000具有數字輸入,因此它不需要這個電壓。收發器使用5 V的額定電源電壓。

  微處理器采用STC公司生產的STC89S52,它是一種低功耗、高性能CMOS 8位微控制器,具有8 KB Flash,512 B RAM,3個16位定時器/計數器,4個外部中斷[7]。

  CAN控制器的CS片選端連接到單片機的通用I/O口上,由圖3可知SJA1000基址SJA_BaseAdr即為0x7F00,數據端AD0~AD7連接到單片機的P0.0~P0.7以實現數據的交換,SJA1000的INT是終端信號輸出端,在中斷允許的情況下,有中斷發生時,INT出現由高電平到低電平的跳變,因此此腳與單片機的外部中斷輸入腳INT0相連,從而使單片機可通過外部中斷的方式訪問SJA1000。

2 系統軟件設計

  2.1 各節點單片機控制程序

  單片機主函數流程如圖4所示。

004.jpg

  這里單片機主要完成CAN控制器SJA1000的初始化,初始化程序中需要設置時鐘分頻寄存器、驗收代碼寄存器、驗收定時寄存器和總線定時寄存器,以及數據的接收和發送。首先,微處理器關閉SJA1000的中斷,然后寫SJA1000的模式寄存器,將模式寄存器中的RM位置1,進入復位模式,接下來在時鐘寄存器里確定使用BasicCAN模式還是PeliCAN模式,本系統采用了PeliCAN模式,驗收代碼寄存器和驗收屏蔽寄存器的設置決定了各個節點的地址,在通信過程中起到重要作用,可以讓單片機選擇性地接收響應節點CAN消息,通信波特率在總線定時寄存器BTR0和BTR1中進行設置,輸出寄存器配置輸出位流的電平驅動形式,通過中斷寄存器IR和中斷使能寄存器IER設置正確的中斷模式以實現CAN數據的正確收發處理,最后將模式寄存器RM位請求清0,進入工作模式。初始化程序的流程圖如圖5所示,關鍵部分程序如下:

005.jpg

  EA=0;//關總中斷

  BCAN_ENTER_RETMODEL();//進入復位模式

  BCAN_CREATE_COMMUNATION();//接口檢測

  BCAN_SET_OUTCLK(0x88);//Pelican模式

  BCAN_SET_OBJECT(0x01,0x01,0x00,0x20,0xff,0xff,0x00,0x00);//驗收碼和屏蔽碼

  BCAN_SET_BANDRATE(ByteRate_125k);//設置波特率

  REG_OCR=0x1a;//設置輸出控制寄存器

  REG_INTENABLE=0x1D;//設置中斷,接收

  BCAN_SET_CONTROL(0x08);

  SJA=REG_CONTROL;

  *SJA=*SJA&0xfe;

  if(*SJA!=0x00)

  return 0;//退出復位模式

006.jpg

  發送過程單片機將要發送的數據以CAN協議規定的幀格式構成數據幀,存入SJA1000的發送緩沖區,然后寫發送命令,在把數據寫入發送緩沖區前,先判斷SJA1000的工作狀態,再決定是否發送,其發送一個數據幀的過程如圖6所示,發送數據子程序如下:

  Void SendMessage(unsigned char CAN_TX_data,unsigned char length1)

  loop:

  SJA=REG_STATUS;

  temptt=*SJA;

  if((temptt&0x04)==0x00)goto loop;//循環檢測等待

  {

  SJA=REG_RXBuffer1;//發送緩沖區1

  *SJA=length1;

  *SJA=CAN_TX_data;

  BCAN_CMD_PRG(TR_CMD);//請求發送

  }

  接收數據采用接收中斷方式,單片機在中斷程序中從數據口讀取CAN消息,具有較高的實時性,接收數據子程序如下:

  void ex0_int(void)interrupt 0 using 1

  {

  unsigned char tt,tt1,length,i;

  SJA=REG_INTERRUPT;

  if((*SJA)&0x01)//產生接收中斷

  {

  SJA=REG_RXBuffer1;

  tt=*SJA;

  tt1=*SJA;

  length=tt1&0x0F;

  if ((tt&0x40)!=0x40)

  //將幀格式設置為數據幀

  {

  SJA=REG_RXBuffer4;

  memcpy(RevceData,SJA_BCANAdr,length);

  //將接收到的數據存入RevceData數組中

  }

  BCAN_CMD_PRG(RRB_CMD);

  //釋放SJA1000接收緩沖區

  }

  }

  2.2 上位機軟件設計

007.jpg

  上位機軟件基于C++語言,采用Windows API函數實現串口通信,API函數在通信任務較復雜的系統中具有優勢,適合多線程編程,且通信穩定,串口的打開、關閉、讀取和寫入所用的函數與操作文件的函數完全一致。通過調用CreateFile()函數打開串口,CreateFile()函數會返回一個句柄,在隨后的寫串口操作中,只需在WriteFile()函數中設置相應的入口參數,將數據轉換成CAN消息格式并打包發送即可。讀串口操作則是通過ReadFile()函數實現,對接收到的CAN消息數據包解包后提取出數據段,其上位機軟件工作流程如圖7所示,其中發送子程序關鍵部分程序如下:

  CAN_msg msg;//CAN消息結構體,

  //結構體成員包括CAN數據地址及類型等

  CAN.SendCANMessage(&msg);//發送CAN消息,

  SendCANMessage()函數定義如下:其中pMsg為CAN消息數據包,dwTimeout為超時時間,如果發送錯誤,系統將返回錯誤信息。

  CAN_ERROR RT_CAN::

  SendCANMessage(CAN_msg*pMsg,DWORD dwTimeout)

  {

  if(pMsg==NULL)return CAN_ERR_PARAM;

  if(pMsg->ch==CAN_CONFIG_CHANNEL)

  return CAN_ERR_CHANNEL;

  if(WritePackage((BYTE*)pMsg,sizeof(CAN_msg),dwTimeout)==0)

  return CAN_ERR_TRANS;

  return CAN_OK;

  }

  接收子程序關鍵部分如下:

  RecvCANMessage(CAN_msg*pMsg,DWORD dwTimeout)

  {

  if(pMsg==NULL)

  return CAN_ERR_PARAM;

  if(WAIT_TIMEOUT==WaitForSingleObject(m_hRecvMsgEvnet,dwTimeout))

  return CAN_ERR_TIMEOUT;

  *pMsg=m_CANRecvMsg;

  return CAN_OK;

  }

  在數據發送或接收完畢后,調用CloseHandle()函數關閉串口。上位機整體界面設計如圖8所示。

3 系統實驗

  為驗證系統通信的可靠性和穩定性,實驗中擬將一幀CAN消息設置為ID:01(十六進制),消息長度為8,采用標準數據幀傳輸一個十六進制數據,下位機采用數碼管顯示的方式來判斷數據傳輸的正確性。當下位機接收到消息后,將會把此消息重新返回給上位機。經過幾次反復實驗,系統通信穩定、可靠。

008.jpg

4 結束語

  由于CAN總線通信可靠、性能穩定,具有易開發和低成本等特點,近年來在自動控制等很多領域得到了越來越廣泛的應用。在一些復雜系統中,不可避免地存在多點通信的情況。本文設計的基于CAN總線的PC機與單片機多點通信系統,在所有的CAN轉接口中,通過USB連接到CAN總線,簡化了硬件接口,提高了開發效率,具有很好的應用前景。

參考文獻

  [1] 李真花,崔健.CAN總線輕松入門與實踐[M].北京:北京航空航天大學出版社,2011.

  [2] 劉維弋,金遠平.基于CAN總線的通信系統的設計與實現[J].計算機技術與發展,2007,17(12):207-209.

  [3] 楊春杰,王曙光,亢紅波.CAN總線技術[M].北京:北京航空航天大學出版社,2010.

  [4] 張念淮.USB總線接口開發指南[M].北京:國防工業出版社,2001.

  [5] 孫兵,何瑾,陳廣廈.基于DSP的CAN總線與以太網互聯系統研制[J].儀器儀表學報,2008,29(2):377-380.

  [6] 王平,江華麗,何花.基于單片機的CAN總線通訊應用設計[J].電子測量技術,2009,32(9):131-135.

  [7] 郭天祥.新概念51單片機C語言教程[M].北京:電子工業出版社,2009.


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品欧美在线| 最新亚洲一区| 欧美日本亚洲视频| 久久久噜噜噜久噜久久| 亚洲欧美日韩国产另类专区| 日韩午夜在线视频| 亚洲国产婷婷综合在线精品 | 免费h精品视频在线播放| 久久电影一区| 久久riav二区三区| 欧美在线精品免播放器视频| 亚洲一区二区三区四区五区午夜 | 99成人在线| 91久久国产综合久久| 久久成人综合网| 欧美亚洲在线观看| 亚洲欧美日韩在线高清直播| 制服丝袜亚洲播放| 一区二区三区三区在线| 一区二区三区高清| 一本久道久久久| 在线亚洲成人| 亚洲免费网站| 欧美一级播放| 久久国产欧美| 亚洲国产欧美久久| 亚洲精品网址在线观看| 夜夜嗨av一区二区三区网页| 亚洲视频每日更新| 亚洲女人天堂成人av在线| 亚洲欧美大片| 欧美在线影院| 玖玖玖国产精品| 欧美99在线视频观看| 欧美精品www| 欧美天堂亚洲电影院在线观看| 欧美色区777第一页| 国产精品成人va在线观看| 国产精品久久7| 欧美日韩亚洲天堂| 国产精品视频福利| 国产精品青草久久久久福利99| 国产精品久久久久久久电影| 国产精品久线观看视频| 国产精品另类一区| 国产欧美精品一区二区色综合| 国产欧美日韩免费| 国产午夜久久久久| 狠狠久久亚洲欧美| 原创国产精品91| 亚洲国产精品嫩草影院| 亚洲精品中文在线| 一本久久知道综合久久| 亚洲一区二区三区777| 亚洲一区亚洲二区| 久久国产欧美日韩精品| 亚洲国产一区视频| 日韩午夜电影av| 亚洲影院免费| 久久成人免费网| 免费成人高清视频| 欧美日韩精品国产| 国产日韩精品视频一区二区三区| 国产偷国产偷精品高清尤物| 激情欧美一区二区三区在线观看| 亚洲国产精品一区| 一区二区欧美日韩| 欧美一区二区三区在线观看| 亚洲国产成人91精品| 亚洲伦理精品| 亚洲午夜日本在线观看| 亚洲高清视频的网址| 一本色道久久精品| 久久成人18免费观看| 久久综合色婷婷| 欧美日韩国产在线看| 国产精品视频一二| 永久久久久久| 亚洲美女淫视频| 亚洲欧美国产高清| 亚洲国产日韩在线一区模特| 一区二区欧美精品| 久久久久久久综合日本| 欧美欧美午夜aⅴ在线观看| 国产精品视频yy9099| 尤物99国产成人精品视频| 国产一级精品aaaaa看| 一本大道久久精品懂色aⅴ| 性欧美xxxx视频在线观看| 91久久久一线二线三线品牌| 亚洲欧美中文日韩在线| 免费观看不卡av| 国产精品裸体一区二区三区| 韩国一区二区三区美女美女秀| 亚洲精品一区二区网址| 欧美亚洲综合网| 亚洲无线一线二线三线区别av| 久久亚洲影音av资源网| 国产精品另类一区| 亚洲国产精品黑人久久久| 亚洲一本大道在线| 亚洲美女一区| 久久久久久久波多野高潮日日 | 激情久久久久久久| 亚洲一级免费视频| 亚洲精品视频啊美女在线直播| 亚洲欧美国产不卡| 欧美黑人在线观看| 国产又爽又黄的激情精品视频| 一本久久a久久免费精品不卡| 亚洲国产成人午夜在线一区| 日韩视频免费观看高清完整版| 久久综合网hezyo| 国产精品午夜视频| 一本大道久久精品懂色aⅴ| 亚洲激情社区| 久久久亚洲一区| 国产欧美日本| 一区二区三区精品视频| 日韩视频中午一区| 可以看av的网站久久看| 国产偷久久久精品专区| 亚洲影视九九影院在线观看| 一区二区免费在线播放| 欧美大片免费观看在线观看网站推荐| 国产主播精品| 亚洲欧美在线免费观看| 亚洲欧美日本国产专区一区| 欧美日韩精品久久| 亚洲人体大胆视频| 亚洲人成网站在线播| 免费欧美电影| 精品成人国产在线观看男人呻吟| 欧美一级夜夜爽| 欧美在线观看视频在线| 国产精品美女视频网站| 这里只有精品视频| 亚洲自拍偷拍福利| 久久欧美中文字幕| 在线观看成人一级片| 久久精品视频网| 久久久噜噜噜| 韩国女主播一区二区三区| 久久黄色小说| 久久综合免费视频影院| 精品成人一区二区三区| 久久精品一区二区三区四区| 久久影院亚洲| 一区精品久久| 亚洲人成网站777色婷婷| 模特精品在线| 99伊人成综合| 亚洲一区二区三区777| 国产精品久久久久久妇女6080| 亚洲天堂偷拍| 性高湖久久久久久久久| 国产精品最新自拍| 欧美一级视频免费在线观看| 久久久久高清| 在线观看成人网| 99精品热6080yy久久| 欧美日韩mp4| 中文日韩欧美| 久久激情综合网| 在线观看91精品国产麻豆| 亚洲精品视频一区| 欧美日韩在线直播| 亚洲一区二区三区乱码aⅴ| 欧美一区激情| 激情小说另类小说亚洲欧美 | 亚洲一区二区成人在线观看| 国产日韩一区在线| 亚洲第一色中文字幕| 免费在线亚洲| 国产精品嫩草久久久久| 欧美一区二视频在线免费观看| 麻豆精品视频| 亚洲欧洲视频| 久久精品成人欧美大片古装| 好吊日精品视频| 亚洲精品一区二区在线| 欧美视频在线免费看| 性色av一区二区三区在线观看 | 久久在精品线影院精品国产| 亚洲国产成人精品女人久久久| 亚洲日本va午夜在线电影| 国产精品初高中精品久久| 亚洲欧美综合一区| 欧美激情综合五月色丁香小说| 中国成人黄色视屏| 久久综合给合| 99riav久久精品riav| 久久www成人_看片免费不卡| 亚洲国产中文字幕在线观看| 亚洲影视在线| 亚洲欧洲精品一区二区| 欧美一区综合| 最新精品在线| 久久疯狂做爰流白浆xx| 亚洲精品黄网在线观看|