CAN通信(第一节:原理)

2025年4月16日|作者:小迈的学习笔记|分类:通信协议


CAN 是 Controller Area Network 的缩写(以下称为 CAN)。CAN 最初出现在80年代末的汽车工业中,由德国 Bosch 公司最先提出。CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10Km 时,CAN 仍可提供高达50Kbit/s 的数据传输速率。由于 CAN 总线具有很高的实时性能,现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。在本系列中,我们就从CAN通信原理开始,一步步带你实现CAN通信控制无刷电机。

一.通信中的分层思想

  • can通信分层(Controller Area Network)

    • 主要分为三层(物理信号层,链路传输层,应用数据层)
    • 物理信号层,规定了硬件电路的设计规则,用户使用的接线方式,线路上传输信号与电平格式对应关系,波特率比特率,数据同步异步传输,收发模式等内容
    • 链路传输层:规定了地址(CAN ID),冲突检测与避免(仲裁),误码校验,滤波器与掩码,该层的帧格式
    • 应用数据层是被传输的数据主题,链路层把应用层的数据拿来,加上相关地址,校验等信息封装。物理层把链路层的数据拿来,编码成物理信号传输出去
  • 物理信号层

    • 接线方式:总线接法
    • 每个设备引出两根线,一跟是CAN_H,一根是CAN_L(也有单线CAN但是速度低,不考虑使用),不同设备的CAN_H接到一起,CAN_L接到一起
    • CAN_H与CAN_L通过120欧姆电阻连接到一起,防止总线上传输的高频信号存在反射振铃效应导致信号不稳定,寄生电容导致信号响应速度变慢等情况。
    • 差分信号传输,长距离传输可保证信号质量
    • 码元1被编码成CAN_H和CAN_L电平相同,称为隐性电平,一般两根线电平均为2.5V
    • 码元0被编码成CAN_H和CAN_L电平不同,称为显性电平,一般H为3.5V,L为1.5V
    • 比特率,bit/s,bps:每秒钟传输二进制码元的数量
    • 波特率,symbols/s:每秒钟传输的有效码元的数量
    • can通信采用的是异步通信
      • 简单解释一下异步通信:异步通信:我说一句,你说一句,而同步通信:我们所有人只能在同一时间才能说话,其他时间管理员禁言。即需要在传输信息时,直接发出就行,没有严格的时间限定
      • 时间片:不同时间片做不同的事情,最小构成是bit,比特
      • 同步段对整条总线各个设备进行同步
      • 传播段是时间占用片,因为有些CAN总线可能比较长,要考虑物理信号在总线的传播时间以及CAN驱动器的处理时间。传播速度一般是光速的2/3,时间一般是信号在总线上传播时间的两倍
      • 采样缓冲段有两个,其中夹住的时间点就是采样时间点,硬件设备在这个时间点对点评采样获取当前bit状态
    • 收发模式
      • 常规模式
        • 向总线发送
        • 从总线接收
      • 回环模式
        • 向总线和本机发送
        • 不从总线接收,仅从本机接收
      • 静默模式
        • 不向总线发送,仅向本机发送
        • 从总线和本机接收
      • 回环静默模式
        • 不向总线发送
        • 不从总线接收
        • 自收自发
    • 地址(CAN ID)
      • can通信是广播性质的总线协议,由于总线一般要挂载多个设备,我们使用CAN ID来逐个区分
    • 仲裁
      • 仲裁的原因:信息传输过程中可能会发生冲突(比如一个设备准备传输数据的同时另一个设备也准备传输数据),需要仲裁来实现冲突处理
      • 冲突处理机制主要有两种,一种是冲突检测,一种是冲突避免,CAN采用的是冲突检测
      • 冲突检测可以简单理解为:我发现了一个冲突,然后我去解决它,有患去解决
      • 冲突避免可以简单理解为:我去避免所有可能实现的冲突,防患于未然
      • 当显性电平和隐形点评同时存在时,一般表现为显性,所以当链路上存在设备像发送0时同时又有设备发送1是,链路表现为0,因为0是显性电平。此时,想发送1的设备发现,链路怎么变成0了?原来是有人也要发消息,那我闭嘴
    • 误码校验
      • 除差分信号传输外,误码校验也是防止信号出错的一大利器
      • 差分信号在物理层上一定程度上解决了接口间信道上传输过程中环境噪声问题,而误码校验在链路层上减少了硬件偶然错误的信息编码被解析利用,以及仍可能存在的强干扰环境噪声导致信道电压波动很大改变电平的风险
      • 采用的是CRC算法(循环冗余校验Cyclic Redundancy Check)
    • 滤波器与掩码
      • 我们经常看到滤波这个名词,包括滤波电容,低通滤波等等(卡尔曼滤波另说,那个是基于目前状态实现预测)。这些名词中的滤波含义都是不一样的,但核心思想是一样的,都是滤去我们不想要的,留下我们想要的。
      • 滤波器用于配置接收设备,符合条件的报文会接收
      • 发送方发送的ID_received,传输到总线上其他设备的滤波器(要配置好掩码Mask和ID_fliter),计算(ID_received & Mask),若等于ID_fliter则继续处理并接收信息;若不相等,则不接受信息,也就是无事发生
        CAN滤波器示意图
  • 链路传输层

    • 帧分类:5种,数据帧,遥控帧,错误帧,过载帧,帧间隔。后三者不用担心,属于硬件设备自动发送的
    • 数据帧:顾名思义发送数据。细分两种,一种是标准数据帧,一种是拓展数据帧,区别在于他们的CAN ID长度不同
    • 遥控帧:该帧表明请求该ID对应设备的数据,也有标准遥控帧和拓展遥控帧的两种,区别也是在于他们的CAN ID长度不同
    • 错误帧,发送硬件错误回送数据,硬件设备自行生成与接收。一般无需主动发送
    • 过载帧,如果接收设备忙。无法处理较多数据,会自动发送该帧来提醒其他设备减缓数据发送速率
    • 帧间隔,分割主动发送帧之间的间隔,此时间内主动发送帧不可被发送,弹自动发送帧可以被发送,以便插入错误帧和过载帧
      各个帧的具体描述
  • 应用数据层

    • 其实就是我们要发送的数据,根据规定在(0~8)*8字节内都能实现

二.CAN通信的硬件实现简介

  • STM32,NXP S32,Microchip SAM E7,TI C2000等市面上运用于汽车应用和工业控制的MCU都自带CAN控制器,我们主讲STM32的硬件实现
  • STM32一般搭配的收发器型号为SN65HVD230
  • MCU控制CAN控制器,CAN控制器可同时控制多个CAN收发器,且这些CAN收发器可挂载在不同的CAN总线上
    can总线示意

后续会带着大家继续学习can协议,并教会大家如何实现使用CAN通信协议控制无刷电机
致谢:感谢中国科学技术大学麻神的教程
感兴趣可以去此链接进行深入了解https://www.bilibili.com/video/BV1HY411D7Ar/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=00dcd3c58f5429fcf0cd4ee96f68ce73

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值