技术专题

CAN总线在工控领域的应用发布时间:2017-11-24 16:36:53    被阅览数:

CAN总线是什么


  CAN是控制器局域网络(Controller Area Network, CAN)的简称,ISO国际标准化的串行通信协议(ISO 11898),具有实时性强、传输距离远、抗电磁干扰能力强、成本低等特点。CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,广泛应用于汽车电控制系统、电梯控制系统、安全监测系统、医疗仪器、纺织机械、船舶运输等领域。


  英创主流工控主板ESMARC系列(目前包括4个大型号:ESM6802,ESM6800,ESM335x,ESM928x)均板载两路CAN总线,用户可以直接使用板载CAN总线进行功能评估使用。英创ESMARC底板上面的CAN部分如下图:


CAN总线在工控领域的应用.gif

英创ESMARC开发评估底板上的CAN电路部分


CAN总线的工作原理


  CAN总线使用串行数据传输方式,可以以1Mb/s的速度在40m的双绞线上运行,也可以使用光缆连接。CAN控制器通过组成总线的两条线(CAN-H和CAN-L)的电位差来确定总线的电平。在任一时刻,总线上都有两种电平:显性电平和隐性电平。只要有一个单元输出显性电平,总线上即为显性电平,只有所有的单元都输出隐性电平,总线上才为隐性电平。


  连接在总线上的所有节点都能够发送信息,如果有超过一个节点在同一时刻发送信息,有最高优先级的节点获得发送的资格,所有其它节点执行接收操作。


CAN总线在工控领域的应用

CAN总线工作原理


  当CAN总线上的一个节点发送数据时,它以报文形式广播给网络中所有节点。发送节点将要发送的数据和自己的标识符传送给本节点的CAN芯片,并处于准备状态,然后在收到总线分配以后,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它节点处于接收状态。每个处于接收状态的节点对接收到的报文进行检测,判断这些报文是否发给自己,以确定是否接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不能有两个节点发送具有相同标识符的报文。


  CAN模块支持以下帧类型:数据帧,远程帧,错误帧,超载帧,空闲帧。


CAN总线在工控领域的应用.gif

典型的CAN帧结构


  数据帧:用于各节点之间传送数据消息,由7个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。


  远程帧:用于一个节点请求其他节点所拥有的数据信息。远程帧的标识符标识了所需数据的类型,而被送回的数据信息的标识符和远程帧的标识符完全一致。数据源节点在接收到远程帧后,根据远程帧的标识符判断所需数据信息类型,并在总线空闲时将相应数据送出。

  远程帧由6个位场组成:帧起始、仲裁场、控制场、CRC场、应答场和帧结束。


  错误帧:为进行错误界定,每个CAN控制器均设有两个错误计数器:发送错误计数器(TEC)和接收错误计数器(REC)。CAN总线上的所有节点,按其错误计数器数值情况,可分为3个状态:错误活动状态、错误认可状态和总线关闭状态。

  上电复位后,两个错误计数器的数值都为0,节点处于错误活动状态,可正常参与总线通信。检测到错误时,节点发送活动错误标志,当错误计数器任一数值超过127时,节点进入错误认可状态。处于错误状态的节点可以参与总线通信,但出错后会发送认可错误标志,并在开始进一步发送数据之前等待一段附加时间(暂停发送场)。当发送错误计数器和接收计数器均小于或等于127时,节点从错误认可状态再次变为错误活动状态。若发送错误计数器数值超过255,则节点进入总线关闭状态,无法收发数据。当软件执行操作模式请求命令,并等待128次总线释放(BusˉFree)序列(11位连续隐性位)后,节点从总线脱离状态重新回到错误活动状态。

  错误帧由两个不同的位场组成,第一个场由来自不同的节点的错误标志叠加而成,第二个场为错误界定符。


  超载帧:超载帧由超载标志和超载界定符组成。超载标志由6个显性位组成,其格式与活动错误标志相同。超载界定符由8个隐性位组成,其格式与错误界定符相同。导致发送超载帧的两个条件为:

  (1)一个接收节点内部接收条件未准备好,要求延迟下一个数据帧或远程帧发送;

  (2)在间歇场(3位)检测到显性位。

  当超载标志发出后,每个节点监视总线状态,直至检测到从显性至隐性位的跳变,此时,所有的节点均己完成了超载标志的发送,随后所有节点开始发送8个隐性位组成的超载界定符。


  空闲帧:数据帧及远程帧与前帧消息之间的间隔被称为空闲帧的场隔开,空闲帧由间歇场和总线空闲场组成,前面已经发送过报文的错误节点还包括暂停发送场。间歇场由3个隐性位组成,在此期间,CAN节点不进行帧发送。间歇场的存在使CAN控制器在下次消息发送前有时间进行内部处理操作。总线空闲场可以为任意长度,此时总线处于空闲状态,允许任何节点开始报文发送。等待报文发送的节点紧随间歇场后启动报文发送,即在空闲场第一位期间就启动报文发送。

  错误认可节点完成一个报文发送后,在开始另一次报文发送或进入总线空闲状态之前,紧随间歇场发送8个隐性位的暂停发送场。发送暂停发送场期间,若其他节点开始发送报文,则本节点停止送出暂停发送场,并变为报文接收器。


CAN总线电路特点


  下图是一个典型的CAN总线扩展电路(英创ETA704 CAN总线扩展模块):


CAN总线在工控领域的应用

典型的CAN接口电路


  由图中可以看出,CAN总线收发管脚通过磁耦器件ADuM1201隔离后,和CAN驱动芯片TJA1050连接,就组成了一个典型的CAN总线通讯电路。带隔离CAN总线通讯模块的CAN收发器端的所有信号和电源与其它部分完全隔离,有效保护了电路的安全。需要注意的是如果扁平带线过长,会影响高速信号的完整性,所以在评估时使用的连接线尽量短一些,避免出现问题。


CAN总线在英创主板平台上的应用


CAN总线在工控领域的应用

英创EM335x工控主板套件 + ETA704 CAN扩展模块扩展4路CAN


  英创主板可以通过主板自带和外扩功能模块,支持和管理多路CAN通信。英创工控主板作为核心控制平台,管理和控制CAN接口与下位设备进行通讯,从而实现实时数据处理监控等应用。历年来,大量用户使用英创主板进行CAN通信相关应用,英创也累积了丰富的工程经验。下面整理出了英创网站发表的相关技术文档供用户参考。虽然有一些方案文档中提到的英创主板是较老的型号,用户在新产品开发的时候未必会使用这些老主板产品,但是文中的软硬件使用技巧、编程技巧和方法等技术细节,是值得用户参考或者直接使用的。


  应用方案


WinCE系统双CAN构建方案低成本嵌入式Linux CAN应用方案


  使用方法与技巧


CAN接口COM组件在WinCE平台上的实现CAN接口COM组件在C#语言中的使用

基于SJA1000的CAN通讯接口函数使用说明EM9170嵌入式主板CAN通讯接口使用说明

SJA1000的CAN通讯接口函数扩展应用说明工控主板EM9170的CAN通讯应用说明

EM9287 Linux Socket CAN驱动简介C/C#开发基于WEC7的CAN通讯应用

EM335x工控主板多路CAN总线扩展方案介绍英创WinCE主板CAN接口数据接收性能测试

英创WinCE主板新CAN驱动使用说明英创新CAN驱动接口调用方法及说明

关于新CAN驱动的错误帧定义ESM6802 Android版支持双CAN通信
Go Top