跳转至

CAN

控制器局域网

实现分布式实时控制的串行通信网络

CAN总线标准

只规定了物理层数据链路层,需要用户自定义应用层不同CAN标准仅物理层不同

  • CAN收发器:逻辑电平和物理信号之间的转换

  • CAN标准:ISO11898ISO11519(两者差分特性不同)

  • 高低电平幅度低,对应的传输速度快

物理层

  • 多个节点连接,只要有一个低电平,总线为低电平,只有所有节点都是高电平时,才是高电平。所谓“线与”
  • CAN总线有5个连续相同位之后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差
  • CAN传输速度与距离成反比

​ 为什么是120Ω?因为电缆特性阻抗为120Ω,为了模拟无限远的传输线

数据链路层

通信帧:

  • 数据帧:节点之间收发数据;根据仲裁长度不同分为标准帧和扩展帧
  • 远程帧:接收节点向发送节点接收数据(接收)
  • 6个段
  • 分为标准帧和扩展帧
  • RTR:1(隐性)
  • 错误帧:某节点发现错误时,用来向其他节点通知的帧
  • 点击跳转
  • 过载帧:接收节点向发送节点告知自己接受能力的帧
  • 当某节点没有做好接收的"准备"时,将发送过载帧,以通知发送节点
  • 帧间隔:用于将数据帧、远程帧与前面帧隔离的帧
  • 错误帧hhee1过载帧前面不加帧间隔

帧起始

  • 组成:一个显性位(低电平)发送节点发送帧起始,其他节点同步于帧起始

帧结束

  • 组成:7个隐性位(高电平)

仲裁段

解决多点竞争

  • CAN总线控制器发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件

  • 帧ID越小,优先级越高
  • 数据帧的RTR位为显性电平,远程帧RTR为隐性电平
  • 帧ID和帧格式相同的情况下,数据帧优先于远程帧(RTR)
  • 标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高(IDE)

控制段

  • 6位

  • 标准帧控制段

数据段

  • 0~8字节,短帧结构

CRC

  • 组成:15位CRC值、CRC界定符

ACK

接收节点接受到起始帧的CRC段没有错误时,接收节点将在ACK段发送一个显性电平,发送节点在ACK段发送隐性电平,线与结果为显性

CAN错误

  • CRC错误:发送与接收的CRC值不同
  • 格式错误:帧格式不合法
  • 应答错误:发送节点在ACK阶段没有收到应答信息
  • 位发送错误:发送节点在发送信息时发现总线电平与发送电平不符
  • 位填充错误:通信线缆上违反通信规则

当发生这几种错误的时候,发送节点或者接收节点将发送错误帧

为防止某些节点自身出错一直发送错误帧,干扰其他节点通信,CAN协议规定了节点的三种和行为

构建CAN节点

  • 自底向上:CAN节点电路、CAN控制器驱动、CAN应用层协议、CAN节点应用程序
  • 虽然不同节点完成的功能不同,但是都有相同的硬件和软件结构

  • CAN收发器和控制器:对应CAN物理层和数据链路层,完成CAN报文的收发

  • 功能电路:完成特定的功能,比如信号采集

  • 主控制器与应用软件按照CAN报文格式解析报文,完成相应控制

  • CAN硬件驱动是运行在主控制器(如P89V51)上的程序,它主要完成以下工作:基于寄存器的操作,初始化CAN控制器、发送CAN报文、接收CAN报文(如果直接使用CAN硬件驱动,当更换控制器时,需要修改上层应用程序,移植性差)

  • 在应用层和硬件驱动层加入虚拟驱动层,能够屏蔽不同CAN控制器的差异

  • 一个CAN节点除了完成通信的功能,还包括一些特定的硬件功能电路,功能电路驱动向下直接控制功能电路,向上为应用层提供控制功能电路函数接口。特定功能包括信号采集、人机显示等

  • CAN收发器是实现CAN控制器逻辑电平与CAN总线上差分电平的互换。实现CAN收发器的方案有两种,一是使用CAN收发IC(需要加电源隔离和电气隔离),另一种是使用CAN隔离收发模块。推荐使用第二种

  • CAN控制器是CAN的核心元件,它实现了CAN协议中数据链路层的全部功能,能够自动完成CAN协议的解析。CAN控制器一般有两种,一种是控制器IC(SJA1000),另一种是集成CAN控制器的MCU(LPC11C00)

  • MCU负责实现对功能电路和CAN控制器的控制在节点启动时,初始化CAN控制器参数;通过CAN控制器读取和发送CAN帧;在CAN控制器发生中断时,处理CAN控制器的中断异常;根据接收到的数据输出控制信号

  • 接口管理逻辑:解释MCU指令,寻址CAN控制器中的各功能模块的寄存器单元,向主控制器提供中断信息和状态信息
  • 发送缓冲区和接收缓冲区能够存储CAN总线网络上的完整信息
  • 验收滤波是将存储的验证码与CAN报文识别码进行比较,跟验证码匹配的CAN帧才会存储到接收缓冲区
  • CAN内核实现了数据链路的全部协议


CAN应用层协议

CAN总线只提供可靠的传输服务

所以节点接收报文时,要通过应用层协议来判断是谁发来的数据,以及数据代表了什么含义

常见的CAN协议:iCAN、CANOpen

CAN应用层协议驱动是运行在主控制器(如P89V51)上的程序

我们将帧ID用来表示节点地址,当接收到的帧ID与自身节点ID不通过时,就直接丢弃,否则交给上层处理;发送时,将帧ID设置为接收节点的地址

CAN收发器

收发器按照通信速度分为高速CAN收发器和容错CAN收发器

同一网络中要使用相同的CAN收发器。

CAN连接线上会有很多干扰信号,需要在硬件上添加滤波器和抗干扰电路

也可以使用CAN隔离收发器(集成滤波器和抗干扰电路)