CAN总线波特率配置与计算实例

4星 · 超过85%的资源 需积分: 21 1 下载量 70 浏览量 更新于2024-09-11 收藏 17KB DOCX 举报
"CAN总线的波特率计算涉及到多个参数,包括CAN控制器的晶振频率、总线传输延迟、接收延迟、同步段、传播段、相位缓冲段1和2,以及同步跳跃宽度(SJW)。计算过程需确保满足CAN协议的要求,以确保通信的准确性和稳定性。" 在CAN总线通信中,波特率是衡量数据传输速率的一个关键指标,它定义了每秒传输的位数。CAN总线的波特率计算通常基于以下几个步骤: 1. **确定CAN控制器的晶振频率(fcan_clk)**: 在示例中,fcan_clk为10MHz,这意味着每个时钟周期为100ns。 2. **计算最小时间量子(tq)**: tq等于1除以fcan_clk,即tq = 1/10MHz = 100ns。 3. **评估总线传输延迟**: 包括总线的最长距离(40m)与光速的关系,以及节点的总线输出延迟(50ns)和接收延迟(30ns)。总线最大传输延迟 = 最长距离 / 光速 ≈ 133ns。 4. **计算传播段(Prop_Seg)**: Prop_Seg = 2 * (总线输入延迟 + 总线输出延迟 + 总线最大传输延迟) = 426ns。由于需要冗余预留,Prop_Seg设置为600ns = 6tq。 5. **设定同步段(Sync_Seg)**: Sync_Seg通常为1tq。 6. **设置相位缓冲段1(Phase_Seg1)和2(Phase_Seg2)**: 采样发生在Phase_Seg1和Phase_Seg2之间,因此Phase_Seg2应包含至少1tq的处理时间。所以,Phase_Seg1设为1tq,Phase_Seg2设为2tq。 7. **确定同步跳跃宽度(SJW)**: SJW是最小的调整量,这里为1tq。 8. **计算位时间(Bit_time)**: Bit_time = Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2 = 10tq,这对应于1Mbps的波特率。 9. **计算晶振漂移容许值**: 漂移容许值(min(Phase_Seg1,Phase_Seg2) / 2 * (13 * Bit_time - Phase_Seg2)) = 0.39%。 10. **配置寄存器**: 根据计算结果配置CAN控制器的波特率寄存器,如例子中所示的0x1600。 此外,示例还提供了宏定义BTR来简化波特率配置,如kBTR_1Mbps和kBTR_500kbps分别用于设置1Mbps和500kbps的波特率。`void set_bitrate(unsigned int btr)`函数用于设置CAN总线的波特率。 CAN波特率的计算是一个精确的过程,涉及到多个参数的调整,以适应不同的通信需求和环境条件,确保CAN总线网络的高效、可靠运行。