Part 1. CAN 模块特性
带有20 组硬件滤波器,滤波模式采用掩码位屏蔽模式
注意:掩码中“1”表示不相关,“0”表示相关
数据接收和发送采用的是FIFO机制,接收缓冲器FIFO深度为64字节
CAN从BUS OFF恢复时,错误计数及相关状态不会清除,需要通过软件复位CAN的方式完成总线恢复,恢复时间在1ms内(在不监控总线状态的情况下)
Part 2. 硬件设计上的注意事项
CAN对频率偏差的容忍度较低,需要使用外部晶振作为系统时钟和CAN的时钟源,注意外部晶振匹配电路需要预留并联和串联匹配电阻
需要预留CAN 收发器的终端匹配电阻,以及常规防护器件
需要注意3.3V 和5V 系统的信号匹配问题,建议CAN 收发器芯片与MCU 使用同样的VDD电压
条件允许的话使用抗干扰性更强的双绞带屏蔽RVVP线作为总线连接线和电源线
Part 3.1 软件设计上的注意事项
需要在程序循环中根据当前CAN状态进行异常处理,在错误计数较多、总线关闭、FIFO 溢出以及其它一些状态时适当做CAN复位和清除FIFO,即复位CAN时钟和重新初始化CAN控制器
注意使用同一ID发出数据时可能会致使总线仲裁存在竞争,造成发送数据失败
可以在发送数据前判断所有与发送相关的CAN状态位 , 直到判断为没有发送任务占用总线时再去发送
CAN_Peli_TransmitRepeat接口函数具有硬件重传功能
尽量使用高主频、低CAN波特率,并将CAN中断优先级设置最高,在中断处理程序中快速缓存数据而不占用过多时间处理数据
条件允许的话使用CAN Scope等专业软件测试实际的位时间以及采样点百分比,在系统层面尽量保证每个节点的位时间以及采样点一致性
影响CAN总线稳定的因素有很多,其中波特率是一项非常重要的指标。
因为CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。因此波特率设置准确对CAN总线的稳定通信来说非常重要
理论波特率计算公式: CAN 波特率 = APB1 /(2*(BRP + 1)*(TSEG1+ 1+ TSEG2+ 1+ 1 ))
在设计中选择波特率及配置相关的参数需要注意,CAN波特率与采样点配置要求
名义上的每位的时间可以分为 3 段:
对应用户手册中的说明是:
1) 同步时段 (tSYNCSEG):通常期望位的变化发生在该时间段内。其值固定为 1 个时间单元 (1 x tQ)。
2) 第一时间段( tTSEG1):定义采样点的位置。它包含 CAN 标准里的 PROP_SEG 和PHASE_SEG1。 其值可以编程为 1 到 16 个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。
3) 第二时间段(tTESG2) 定义发送点的位置。它代表 CAN 标准里的 PHASE_SEG2。 其值可以编程为 1 到 8 个时间单元,但也可以被自动缩短以补偿相位的负向漂移。
4) CAN 系统时钟 tSCL 的周期是可编程的,而且决定了相应的位时序。
同步段(SYNC_SEG):多个连接在总线上的单元通过此段实现时序调整,同步进行接收和发送工作,边沿包含在此段中;
传播时间段(Prop_SEG):用于补偿网络上所有的物理延迟:当信号边沿不能被包含于(SYNC_SEG)段中时,可在此段进行补偿;
相位缓冲段1(PHASE_SEG1)和相位缓冲段2(PHASE_SEG2);
采样点:读取并解释总线上各位值的一个时间点 采样点位置如图所示,它是读取总线电平,并将读到的电平作为位值的点,所以从一个位的开始到采样点的时间占一个完整位的总时间的百分比就是所求的采样点的值: sample =(1+TSEG1)/(1+TSEG1+TSEG2)
CAN时序与波特率计算公式
波特率的计算 fTq = APB1CLK = HCLK/APB1DIV
CAN_BitRate = fTq / CAN_Time_Quanta =APB1/(2*(BRP+1)*(TSEG1+1+ TSEG2+ 1+1)
Part 4 CAN 波特率与采样点配置注意事项
CAN 通信标准是对采样点有严格要求的,根据标准得出:波特率采样点是CAN节点判断位逻辑值的判断点,可配置为单次采样与三次采样
采样点位置比例的计算公式如下:
Sample-point rate = (SYNCSEG + TIME1SEG) / (SYNCSEG + TIME1SEG + TIME2SEG) * 100%
采样点对CAN总线来说非常重要,在组网的时候,多个节点应尽量保持同一个采样点
建议尽可能的把采样点设置为 CIA 推荐的值:
(1)一般配置在75-80%的位置
(2)选择采样点位置在85%左右为佳
当波特率 > 800K采样点75%
当波特率 > 500K采样点80%
当波特率 <= 500K采样点87.5%
根据参数列出支持的采样点
Part 5. 同步跳转位宽时间设置的注意事项
CAN总线通信的各节点通信时会产生相位差,所以要进行位同步,两个节点保持步调一致
CAN_SJW:重新同步跳跃宽度(SJW) 。
SJW定义了在每位中可以延长或缩短多少个时间单元的上限。
标准定义其值可以编程为1到4个时间单元
现有底层驱动库中默认同步跳转位宽时间SJW 设置为 0 ,应用层面有需要容忍更大位时间误差时需增大该寄存器值,范围是 0 – 3 (1 – 4 tTq)
Part 6. 发送时启动自动重传及发送完成检测,如有需要可添加配置TIMEOUT检查与退出机制
————————————————
版权声明:本文为CSDN博主「Open歌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Open_The_World/article/details/121283950
|