三坐标垂直度计算:STM32 CAN 标称位时间计算
已知CAN总线每秒发送的位数,即最大传输比特率是 1Mb/s( 1 兆位每秒),这样 CAN 总线的【最小标称位时间】就是 1 μs,简单的说就是发送1位数据要1μs时间。
根据ISO11898 标准对【最小标称位时间】的定义如下:
标称位时间 = TQ * (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)
其中
- 时间单元/份额 (TQ)
- 同步段 (Sync_Seg) 固定为 1TQ
- 传播时间段 (Prop_Seg) 1TQ 至 8TQ
- 相位缓冲段1 (Phase_Seg1) 1TQ 至 8TQ
- 相位缓冲段2 (Phase_Seg2) 2TQ 至 8TQ
而 STM32 CAN 对【最小标称位时间】的定义如下:
● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1 x tCAN)。
● 时间段1(BS1):定义采样点的位置。它包含CAN 标准里的 PROP_SEG 和 PHASE_SEG1。其值可以编程为1 到16 个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。
● 时间段2(BS2) : 定义发送点的位置。它代表CAN 标准里的 PHASE_SEG2。其值可以编程为1~8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。
就是说 STM32 CAN 把 Prop_Seg和Phase_Seg1合起称为 BS1 ,这样可以知道最大值:
【标称位时间】 = TQ * (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)
【最小标称位时间】1 μs=TQ * (Sync_Seg + Prop_Seg +Phase_Seg1 + Phase_Seg2)
而且规定: 8 TQ <= 【标称位时间】 <= 25 TQ
STM32 CAN TQ 的计算:
时钟 PCLK1=36MHZ
公式:
tq(TQ) = (BRP[9:0]+1) x tPCLK
BRP[9:0]: 波特率分频器,该位域定义了时间单元(tq)的时间长度。
如何确定【相位缓冲段】的时间单位
如果按平均方法 【标称位时间】=(8 TQ + 25 TQ)/2 = 16 TQ
即:1+1+7+7=16 TQ
或 1+1+4+4=10 TQ
18 TQ=1+1+8+8
13 TQ=1+1+5+6
例子:
如果要求:标称比特率 = 1 Mb/s (1 μs) 标称位时间=16 TQ
可知:TQ=1/16 μs
由公式:tq(TQ) = (BRP[9:0]+1) x tPCLK( 1s/36MZ )
TQ=(BRP[9:0]+1)*1s/36 MHZ
1/16 μs=(BRP[9:0]+1)* 1s / 36 MHZ
1/16μs=(BRP[9:0]+1)* 1000000μs / 36 MHZ
1/16μs=(BRP[9:0]+1)* 1000000μs / 36 000000
1/16=(BRP[9:0]+1)/36
(BRP[9:0]+1)=36/16*1
这样如果要1μs ,标称位时间定为 18 TQ 或 12 TQ 比较合适。因 (BRP[9:0]+1)=36/18 或36/12,可方便地设置 BRP[9:0]=1 或 2。
常用的波特率设置:(标称位时间定为 12 TQ 时算出的BRP[9:0]+1值)
1000 Kb/s 1 Mb/s (1 μs) =3
800 Kb/s 1.25 μs 36/9 * 10/8=5 9TQ
666 Kb/s 1.5 μs 36/18 * 1.5=3 18TQ
500 Kb/s 2 μs 36/12*2=6
250 Kb/s 4 μs 36/12*4=12
125 Kb/s 8 μs 36/12*8=24
100 Kb/s 10 μs 36/12*10=30
50 Kb/s 20 μs 36/12*20=60
20 Kb/s 50 μs 36/12*50=150
10 Kb/s 100 μs 36/12*100=300
波特率为10Kb/s时,CAN可以传输5公里远, RS485最多是1.2公里。