原创 STM32 CAN 标称位时间计算

2009-8-25 23:09 5734 14 14 分类: MCU/ 嵌入式

以知 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公里
 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
14
关闭 站长推荐上一条 /3 下一条