五、CAN总线

目录

一、基础知识

1、can介绍

2、CAN硬件电路

3、CAN电平标准

4、CAN收发器芯片介绍

5、CAN帧格式

[① CAN帧种类](#① CAN帧种类)

[② CAN数据帧](#② CAN数据帧)

[③ CAN遥控帧​编辑](#③ CAN遥控帧编辑)

[④ 位填充](#④ 位填充)

[⑤ 波形实例](#⑤ 波形实例)

6、接收方数据采样

[① 接收方数据采样遇到的问题](#① 接收方数据采样遇到的问题)

[② 位时序](#② 位时序)

[③ 硬同步](#③ 硬同步)

[④ 再同步](#④ 再同步)

[⑤ 波特率计算](#⑤ 波特率计算)


一、基础知识

1、can介绍

CAN(Controller Area Network),是ISO国际标准化的串行通信协议

为了满足汽车产业的"减少线束的数量"、"通过多个LAN,进行大量数据的高速通信"的需求。

低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米。

高速CAN,经典CAN,(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米。

CAN FD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发。

主流通信协议对比

UART

IIC

SPI

2、CAN硬件电路

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
  • 低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻

终端电阻(120Ω),用于阻抗匹配,以减少回波反射。

CAN总线由两根线( CANL 和 CANH )组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。

3、CAN电平标准

  • CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
  • 高速CAN规定:

电压差为0V时表示逻辑1(隐性电平)

电压差为2V时表示逻辑0(显性电平)

  • 低速CAN规定:

电压差为-1.5V时表示逻辑1(隐性电平)

电压差为3V时表示逻辑0(显性电平)

  • 显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。

4、CAN收发器芯片介绍

CAN收发器芯片:TJA1050、TJA1042、SIT1050T。

战舰版开发板使用SIT1050T,支持高速CAN,传输速率可达1Mbps。

D : CAN发送引脚

R : CAN接收引脚

Vref : 参考电压输出,可以用

CANL : 低电位CAN电压输入输出端

CANH : 高电位CAN电压输入输出端

RS : 高速 / 静音模式选择(低电平为高速)

5、CAN帧格式

① CAN帧种类

CAN总线以**"帧"形式**进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。

|------------------------|--------------------------|
| 帧类型 | 帧作用 |
| 数据帧(Data Frame) | 用于发送单元向接收单元传输数据的帧 |
| 遥控帧(Remote Frame) | 用于接收单元向具有相同ID的发送单元请求数据的帧 |
| 错误帧(Error Frame) | 用于当检测出错误时向其他单元通知错误的帧 |
| 过载帧(Overload Frame) | 用于接收单元通知其尚未做好接收准备的帧 |
| 间隔帧(Inter Frame Space) | 用于将数据帧 及遥控帧与前面的帧分离开来的帧 |

② CAN数据帧

空闲状态:隐形1

**帧起始:**表示数据帧开始的段,显性信号。

**仲裁段:**表示该帧优先级的段,优先级。

其中ID,区分数据的功能。**RTR,**区分广播式、数据帧(只写),请求式、遥控帧(读取)。

**控制段:DLC,**数据段的字节数是可调的。

保留位:R0,R1(IDE),IDE表示区分标准格式和扩展格式。

**CRC段:**判断数据是否正确传输。发送方将前面,SOF到Data计算校验码,将校验码附在CRC中。接收方收到数据后,也会计算校验码,判断校验码是否一致。

CRC界定符:① 隔离CRC和ACK。② 在ACK槽之前,发送方释放总线(发生隐性1就是释放总线),将控制权给接收方发送应答信号。

**ACK段:**判断是否有接受方。

ACK界定符:接收方释放总线,交出控制权。

帧结束:表示数据帧结束的段,7个隐性信号。

**注意:**发送方每发送一位,接收方就立刻收到这一位。

③ CAN遥控帧

遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同。

当某个设备发送遥控帧时,代表它想请求这个数据。

请求方发出遥控帧,遥控帧的ID表示要请求的数据。

响应请求的一方,通过相同ID的数据帧反馈数据。

当请求和反馈数据同时发生时,数据帧拥有更高的优先级。

④ 位填充

位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位。

接收方检测到填充位时,会自动移除填充位,恢复原始数据。

例如:

即将发送: 100000110 10000011110 0111111111110

实际发送: 1000001110 1000001111100 011111011111010

实际接收: 1000001110 1000001111100 011111011111010

移除填充后: 100000110 10000011110 0111111111110

位填充作用:

增加波形的定时信息,利于接收方执行"再同步",防止波形长时间无变化,导致接收方不能精确掌握数据采样时机。

将正常数据流与"错误帧"和"过载帧"区分开,标志"错误帧"和"过载帧"的特异性。

保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲。

⑤ 波形实例

  • 标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA
  • 标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34
  • 扩展数据帧,报文ID为0x0789ABCD,数据长度1字节,数据内容为0x56
  • 标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容

6、接收方数据采样

  • CAN总线没有时钟线,总线上的所有设备通过约定波特率 的方式确定每一个数据位的时长

  • 发送方约定的位时长每隔固定时间输出一个数据位。

  • 接收方约定的位时长每隔固定时间采样总线的电平,输入一个数据位。

  • 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。

  • 数据位的位时长=1/波特率。

① 接收方数据采样遇到的问题

  • 接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近
  • 接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离

② 位时序

**为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,**分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。

  • SS = 1Tq
  • PTS = 1~8Tq
  • PBS1 = 1~8Tq
  • PBS2 = 2~8Tq

③ 硬同步

  • 每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。(接收方将自己的SS段与发送方调节为一致。)
  • 硬同步只在帧的第一个下降沿(SOF下降沿)有效。
  • 经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近。

位时序周期

④ 再同步

  • 若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PBS2段,以调整同步。
  • 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。
  • SJW=1~4Tq。SJW为最大值。

⑤ 波特率计算

波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)

相关推荐
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计5 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
夜间去看海5 小时前
基于51单片机的自动清洗系统(自动洗衣机)
嵌入式硬件·51单片机·proteus·洗衣机
yrx0203075 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
Archie_IT8 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计8 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器
wmkswd8 小时前
CAN总线-STM32上CAN外设
stm32·单片机·嵌入式硬件
努力看懂帖子8 小时前
关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)
嵌入式硬件
嵌入式大圣9 小时前
STM32 单片机最小系统全解析
stm32·单片机·嵌入式硬件