以知 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 这个可以传输5公里远, RS485最多是1.2公里
文章评论(0条评论)
登录后参与讨论