历史上的今天
返回首页

历史上的今天

今天是:2025年04月02日(星期三)

正在发生

2021年04月02日 | 飞思卡尔s12系列CAN波特率计算

2021-04-02 来源:eefocus

最近在看飞思卡尔s12系列CAN部分,发现波特率计算这块没有一个讲的详细的,在数据手册里也没有详细说明。


经过仔细研究,特将CAN部分波特率计算总结出来。


引用部分CAN波特率计算资料如下:


简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:

A. 位同步时间(Tsync)

B. 时间段1(Tseg1)

C. 时间段2(Tseg2)

其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是:TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率 (CANbps)就是1/TBit。


但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw)

CAN有波特率的值四以下几个元素决定:

A. 最小时间段Tscl;

B. 时间段1 TSEG1;

C. 时间段2 TSEG2;

D. 同步跳转宽度 SJW

那么Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用场,Tscl=(BRP+1)/FVBP。FVBP为微处理器的外设时钟。


下面用一个例子来举例说明。


注:本例中时钟使用总线时钟,若选择外设时钟,则外设时钟=晶振频率/2


比如,总线时钟fbus=16M,准备设定的波特率 CANbps=250K,则


(1)位时间TBit=1/250k=4us.


同时,


(2)TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,


一般 (TSEG1+TSEG2+3)的值取16(8~25之间),则


Tscl=4us/16=250ns


而同时(3)Tscl=(BRP+1)/fbus


fbus为微处理器的总线时钟。则


250ns=(BRP+1)/16M,


计算之后BRP=3;


假设我们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:


    BTR0×BTR1=fbus/CANbps   (4)


此例中,BTR0*BTR1=16M/250K=64. 

此例中,BRP=3,其作为BTR0的组成部分,表示预分频值为4,则BTR1的预分频值为


(5)64/4=16;


(CAN规范中规定其取值在8~25之间)


 

TSEG1和TESG2的值(TSEG1+TSEG2+3)=16,而根据CIA推荐:


75%     when 波特率 > 800K

80%     when 波特率 > 500K

87.5%   when 波特率 <= 500K


CiA计算方式:


sample =(1+(TSEG1+1))/(1+(TSEG1+1)+(TSEG2+1))               (6)


sample = ( 1 +  CAN_BS1) /  (1 +  CAN_BS1 +  CAN_BS2)        (6)


在这里,CAN_BS1=TSEG1+1,CAN_BS2=TSEG2+1;


则CAN_BS1和CAN_BS2的取值要符合要求。


此处令CAN_BS1取13,CAN_BS2取2, 采样率=(1+13)/(1+13+2)=87.5%    BTR1=0001 1100B


则CANBTR1的值为0x1c;


 


 其实,用一个公式总结则为


CANbps = fbus/( (BRP+1) * (CAN_BS1+CAN_BS2+1))


 


本例中 250K=16M/(3+1)*(13+2+1)=16M/64;


总之,BRP(BTR0的值)和CAN_BS1,CAN_BS2的值可以自定,但是要符合(CAN_BS1+CAN_BS2)=15,且符合CIA推荐的标准。


总体配置保持CAN_BS1>=CAN_BS2 , CAN_BS1>=1个CAN时钟周期 ,CAN_BS2>=2SJW ,


本例中,CAN_BS2=2,则SJW=1;即BRT0的bit7和bit6均为0


SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。


 


 


总结:


BTR0:  SJW和CAN_BS2有关,CAN_BS2>=2SJW 


BTR1:  SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。


 


CANbps = fbus/( (BRP+1) * (CAN_BS1+CAN_BS2+1))    最重要的公式


CANbps为要设定的CAN波特率;


fbus为总线时钟频率,若采用外部时钟时,则外部时钟=晶振时钟/2;


BRP为BTR0的低6位值;


CAN_BS1为BTR1的bit0~bit3的值-1;


CAN_BS2为BTR1的bit4~bit6的值-1;


推荐阅读

史海拾趣

CONTTEK Group GmbH公司的发展小趣事

CONTTEK Group GmbH公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等每一个环节都进行严格把控。这种对品质的执着追求,使得公司的产品赢得了客户的广泛信赖和好评。许多知名电子企业都选择与CONTTEK Group GmbH公司建立长期合作关系,共同推动电子行业的发展。

GSG公司的发展小趣事
检查通信接口是否连接正确,通信协议是否匹配,以及通信线路是否受到干扰或损坏。
Abbatron公司的发展小趣事

在电子行业的激烈竞争中,Abbatron公司以其创新的技术赢得了市场的认可。某年,公司研发团队成功开发出了一款新型的高效能芯片,这款芯片不仅性能卓越,而且功耗极低,引起了业界的广泛关注。通过这一技术突破,Abbatron公司在市场上占据了有利地位,并逐渐成为了行业内的佼佼者。

百事通科技(BUDDIES)公司的发展小趣事

随着技术的不断成熟,百事通科技(BUDDIES)开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,通过参加国际电子展、与海外企业建立合作关系等方式,逐步打开了国际市场。同时,公司还注重品牌建设,通过精心设计的品牌形象和广告宣传,提升了品牌知名度和美誉度。

FARNELL公司的发展小趣事

近年来,随着电子行业的不断发展壮大,FARNELL公司也开始向多元化方向发展。除了电子元器件分销业务外,公司还涉足了工业自动化、智能制造等领域。这种多元化的发展战略使FARNELL公司的业务范围更加广泛,也为公司带来了新的发展机遇。

以上五个故事概述了FARNELL公司在电子行业中的发展历程和主要成就。这些故事展示了FARNELL公司不断创新、积极应对市场挑战的精神以及其在电子行业中的重要地位。

Corstat Containers公司的发展小趣事

Corstat Containers公司始终坚持以品质为核心的发展理念。在生产过程中,公司严格把控原材料采购、生产工艺和产品质量检测等环节,确保每一件产品都符合客户的要求。这种对品质的坚持赢得了客户的信任和好评,也为公司赢得了更多的合作机会。

问答坊 | AI 解惑

从哪开始学单片机与ARM7

公司现在有2个产品一个是ARM7的还有个是SyncMOS sm8958A的板子上还有个Atmel ATF1508AS,现在要我接手,我该从哪学起呢?我以前是做Windows下软件开发的会Java和C#,C也会,但很久没用了,重新上手的话,估计时间不长。还望各位解答,谢谢。…

查看全部问答>

C8051 FO20 SPI口怎么配置

C8051 FO20 SPI口怎么配置 最好有源代码 …

查看全部问答>

现在有一份作51单片机的工作机会,不知该不该去做?

我目前是作java 企业计算方面的软件开发,现在有一份作51单片机的工作机会,不知该不该去做?我想往嵌入式方向转,我的定位是linux+arm,  看网上讲51和arm相差很大,不知我从51开始接近嵌入式开发有没有什么问题?有没有走弯路?   ...…

查看全部问答>

USB键盘驱动的问题

在Windows XP下,我插入USB键盘后看到系统在设备管理器中变化了两个,一个是键盘下的KeyBoard Device,一个是人体输入设备下的USB人体输入设备,请问这两个相互之间是怎样联系的啊?? 再者:我在写一个键盘的驱动程序,要求是读取USB键盘数据 ...…

查看全部问答>

tffs问题.

在shell中,调用tffsshow报告说"通信失败". 问题出在调用i28f128Identify函数卡在flmap上. 什么原因啊?…

查看全部问答>

端口P1使用问题

我把P1端口的P1.7作为中断用,下降沿有效,并且检测到P1IFG置 0x80, 但是while(P1IFG&0X80)或while((P1IN&0X80)==0)就不能用,进入不了循环 换成while(!(P1IN&BIT0))就可以,,这是为什么…

查看全部问答>

求教

请大家指点一下小弟,我想学arm,但对于此却真的不知从何抓起,我不知道选哪本书,选哪个型,希望得到指点。 我学的是51.…

查看全部问答>

要做PFC程序了,发篇文章和大家一起学习

[ 本帖最后由 dontium 于 2012-3-24 11:26 编辑 ]…

查看全部问答>

【求助】一堆元件和工具怎么收纳整理

这个帖子也不知道发哪里合适。请问大家的工具和元件是怎么整理收纳的?现在我是有很多大小不一的箱子,电子元件用小袋子装好分类在不同的小箱子里。各种工具扔在2个略大箱子里。用起来找起来挺不方便的,想有没有一个大的收纳箱,里面有大小不一的 ...…

查看全部问答>

分享一本射频书,非常不成

射频电路设计-理论与应用 其实射频不难,不信看看这本书,肯定你看懂。…

查看全部问答>