0


五、CAN总线

一、基础知识

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)

标签: 嵌入式硬件

本文转载自: https://blog.csdn.net/qq_39240700/article/details/142122845
版权归原作者 2021.09 所有, 如有侵权,请联系我们删除。

“五、CAN总线”的评论:

还没有评论