本部分将根据Infineon的芯片手册对位时间如何计算和如何配置位时间的寄存器进行说明。
假设我们有一条需求:设置CAN通讯的波特率为500KBaud。
1 计算
Infineon芯片手册提供的CAN总线位时间标准格式定义如下图,后面根据该定义进行求解。
**设:**晶振时钟周期频率为40MHz,转换为时间表示则为T=1/40MHz=25ns
NBT=16(即一个位有16个tq,time quantum),
因为要设置的波特率为500KBaud,换算时间表示则为1/500KBaud =2000ns,即传输一个位的时间要2000ns。那意味着16个tq就等于2000ns,即tq=125ns。
又因为有:
所以:tq/T=125ns/25ns=5,因为BRP只能为整数,这时取DIV8=0, BRP=4。
我们已经NBT=16,假设我们采样点取在50%处,即有:
50%=Tseg2/NBT=[(TSEG2+1)tq]/16*tq**=**(TSEG2+1)/16
即有:TSEG2=7。
那么Tseg1= NBT-Tseg2-Tsync=7tq,所以TSEG1=6。
再根据下式计算SJW, 这里直接假设TSJW=3*tq能保证下式两个不等式成立(不在此处展开Tprope的讨论),那么SJW=2。
综上有:DIV8=0, BRP=4,TSEG1=6,TSEG2=7,SJW=2。
2 寄存器配置
根据上节的计算结果进行位时间寄存器的配置,关于该寄存器的内容以及配置信息见下图。
经过上述配置,我们成功设置了CAN通讯的波特率为500KBaud。
3 补充:传输延迟时间tPTS
CAN报文在CAN总线上的传输时,物理延迟包含两个部分:
- 在CAN-BUS上传输造成的延迟
- 在节点上传输造成延迟
按照CAN通信协议的规定,补偿给传播延迟的时间长度要至少等于实际实际传播延迟时长的2倍,即:tPTS≥2×tdel=2×(tdel+tBus)
注意:在CAN总线通信系统中是以时间量子Tq来度量时间的,所以如果延迟补偿时间tPTS = 3.1Tq,那么这个时候要取:tPTS = 4Tq。
can总线的精彩博文链接