三坐标垂直度计算:STM32 CAN 标称位时间计算

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 10:01:32
STM32 CAN 标称位时间计算2011-08-09 16:48 

已知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公里。