以下内容均整理自deepseek

1、波特率

        CAN控制器需要在采样点判决一次当前总线是 0 还是 1,波特率就是每秒有效判决出多少个比特
        波特率是整车网络设计阶段定下来的(比如动力CAN通常定500kbps,车身CAN定250kbps)。这个值取决于总线长度、节点数量和电磁兼容性要求,硬件起到使 “波特率稳定跑起来”的作用。

2、位时间

位时间:传输1个比特所占用的总时间

位时间(秒)= 1 ÷ 波特率

位时间又划分为以下几段(deepseek)

        Tq 的全称是 Time Quantum(时间份额)。可以理解为:Tq 是 CAN 控制器内部用来计量时间的“最小刻度”或“步长”,只是为了方便硬件计数。

位时间 = (1 + Prop_Seg + Phase_Seg1 + Phase_Seg2) × Tq

        一个位时间最多能容纳的Tq数量 = 1 + 16 + 8 = 25

3、BRP(波特率预分频器)

        以经典的STM32 bxCAN为例,位时间寄存器位宽限制了Tq总数最大为25(1+16+8),(“25”是举例,不是通用标准),该寄存器相当于一个计时器,CAN的采样点有一个最佳范围(通常为位时间的60%-85%处),通过将位时间划分为多个Tq时间段,使用位时间寄存器计时,在合适的时间对CAN总线进行采样。

        例如位时间长度刚好等于25个Tq时,可以在第19个Tq结束瞬间采样,19/25 = 76%,在最佳采样范围内。因此Tq时间不能过短,不然位时间 > 25*Tq,Tq数量会超过寄存器上限(如25),导致无法配置;同时Tq时间也不能过长,因为要在最佳范围采样,1个Tq时间过长,容易错过最佳采样点。而Tq时间,可以通过设置BPR(波特率预分频器)决定。

Tq(秒) = BRP ÷ 主时钟频率(Hz)= BRP × 主时钟周期(秒)

        通过设置BPR,得到合适的Tq,从而可以在合适的位置采样。

备注:

        在STM32的bxCAN等经典控制器中,位时间各段的寄存器位宽(如TS1为4位、TS2为3位)限制了Tq总数最大为25。但不同MCU的CAN控制器设计不同(如有些支持8~25,有些支持8~32),这个上限并非CAN协议的通用规定

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐