欢迎光临散文网 会员登陆 & 注册

can总线波特率参数调整

2021-12-06 17:30 作者:GXTon_阿通  | 我要投稿

位时序就是说的can波特率.

第一步:

查看单片机中参数取值的范围.

stm32单片机中包含一下要设置的参数:

BRP:预分频值.      (范围: 1-1024)

Ts1:包括TpsTpbs1.  (范围: 1-16)

Ts2:包括Tpbs2.       (范围: 1-8)

Sjw:用于设置Tpbs1Tpbs2可以调节的节拍数.  (范围: 1-4)

第二步:

首先看一个例子.如果要把can配置成500K波特率.

首先计算Q,它代表了一个位可以分成几个节拍,当然是越大越好.这样可以把节拍分的更细致一些.有个公式可以进行计算:


BRP=Fclk/(Q*Baudrate)

已知:  Fclk就是stm32的APB上时钟 已知是42M=42 000 000

已知: 上面公式中Baudrate=500K=500 000

未知:  BRP是分频系数,用于将APB的时钟分频到CAN时钟.

未知:  Q,一个位分成Q份.

 

通过这已知的两个数,可以推出很多Q和BRP的组合,BRP=84/Q

所以,

84*1   (Q是84,最大,但是Q超过了stm32的设定范围)

42*2   (Q是84,最大,但是Q超过了stm32的设定范围)

21*4   (可以用, 即Q为21  BRP为4)

14*6

 

但是要求Q尽可能的大,所以BRP取值为4.

Q取值得到最大,为21.

波特率是500k,则每个位耗时2000ns,因为Q是21,所以被分成了21份.

每份耗时2000/21耗时95.2ns.

 

Q的参数就是越大越好.(但是不能超过stm32的设定范围)

Q就是一个bit,一个位所被分成的节拍数.

Q是总的节拍数,要分给各个段.

Q=Tss+Tps+Tpbs1+Tpbs2

Tss通常占一拍;

Tps和Tpbs1相加构成stm32单片机中的Ts1;

Tpbs2是stm32单片机中的Ts2;

第三步:

进行计算

Q是21,所以1位数据时长可以分成21份.

Q又由4个部分:

Q=Tss+Tps+Tps1+Tps2  (其中,在stm32中Tps和Tps1合并为一个参数了)

Tss:其值一般为1份;

Tps:是有设备性能和总线长度决定,通常情况下总线延迟可以按照5.5ns/m计算.

单个节点的收发延迟,可以按75ns计算.加入有线长1m,则Tps=2*(1*5.5+75)ns=161ns.

 

传播段时长Tps:信号在总线上来回传输所消耗的时间.

设一次单向传输的延时为Tdelay,包括:

1.发送节点从生产信号到把信号发送到总线上,Td1.

2.信号在总线上传输的时间Tbus.

3.接收节点从总线获取信号的时间Td2.

Tps>=2Tdelay=2*(Td1+Tbus+Td2)

 

 根据Q的值,可以知道每个节拍耗时,然后用Tps除以每个节拍的时间,就知道Tps包含几个节拍了.(161/95.2约1.69个节拍,按2个计)

 

Tps1:一个位被分成Q个,Tss已知,Tps已知,那么剩下的个数被Tps1和Tps2瓜分.如果是奇数个,则Tps1比Tps2少1个. (21-1-2)/2=9  所以Tps1=9;Tps2=9;

 

SJW:它的值要取(Ts2-1)和4两个数小的那个.所以SJW=4.

第四步:

进行数据的分析

BRP=4;           预分频值.                       (取值范围:1-1024)

Ts1=2+9=11;       包TpsTpbs1.                  (取值范围:1-16)

Ts2=9;            包Tpbs2.                       (取值范围:1-8)

Sjw=4;            Tpbs1Tpbs2可以调节的节拍数.  (取值范围:1-4)

 

然后判断一下,是否符合采样点规则:

 



BS1=Tps+Tpbs1

BS2=Tpbs2

(11+1)/(1+11+9)=12/21=57% 不太符合推荐值.

 

进行调整:

(16+1)/(1+16+4)=17/21=80.0% 还是不太符合.

 

继续调整:

(18+1)/(1+18+2)=17/21=85.7% 勉强符合,但会超出stm32范围Ts1>16了.所以选择上面的取值.

 

所以,最终定值为:

BRP=4;           预分频值.        (1-1024)

Ts1=16;           包TpsTpbs1.  (1-16)

Ts2=4;            包Tpbs2.        (1-8)

Sjw=4;            Tpbs1Tpbs2可以调节的节拍数.  (1-4)

 

程序中:

 

然后用500k的波特率,就可以接收:

 

 


最后放一个stm32手册上的图:


can总线波特率参数调整的评论 (共 条)

分享到微博请遵守国家法律