历史上的今天
返回首页

历史上的今天

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

正在发生

2021年04月02日 | 飞思卡尔MC9S12XEP100 CAN学习总结(二) 波特率配置

2021-04-02 来源:eefocus

波特率设置相关参数

在这里插入图片描述

在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:

A. 位同步时间(Tsync) 占用1个Tscl;


B. 时间段1(Tseg1)占用(Tseg1+1)个Tscl;


C. 时间段2(Tseg2)占用(Tseg2+1)个Tscl,


所以CAN控制器的位时间(TBit)就是:


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


那么CAN的波特率 (CANbps)就是:


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为微处理器的外设时钟。


举例说明

例子1

总线时钟:fbus=32M,波特率 :CANbps=250K


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


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


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


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


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


Tscl=4us/16=250ns


Tscl=(BRP+1)/fbus


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


250ns=(BRP+1)/32M


计算之后BRP=7即CAN0BTR0_BRP = 7


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


BTR0×BTR1 = fbus/CANbps


BTR0*BTR1=32M/250K=128


BRP=7,其作为BTR0的组成部分,表示预分频值为8,则BTR1的预分频值为


BTR1 = 128/预分频值=128/8=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))


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


在这里,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,即CAN0BTR1 = 0x1c;


例子2

总线时钟:fbus=32M,波特率 :CANbps=100K


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


比如,总线时钟fbus=32M,准备设定的波特率 CANbps=100k,则


位时间TBit=1/100k=10us.


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


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


Tscl=10us/20=500ns


Tscl=(BRP+1)/fbus


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


500ns=(BRP+1)/32M


计算之后BRP=15即CAN0BTR0_BRP = 0x0f


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


BTR0×BTR1 = fbus/CANbps


BTR0*BTR1=32M/100K=32


BRP=15,其作为BTR0的组成部分,表示预分频值为16,则BTR1的预分频值为


BTR1 = 320/预分频值=320/16=20

(CAN规范中规定其取值在8~25之间)满足要求。


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


75% when 波特率 > 800K

80% when 波特率 > 500K

87.5% when 波特率 <= 500K


CiA计算方式:


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


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


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


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


此处令CAN_BS1取15,CAN_BS2取2, 采样率=(1+15)/(1+15+2)=87.5% BTR1=0010 1111B


则CANBTR1的值为0x2f,即CAN0BTR1 = 0x2f;


总之,BRP(BTR0的值)和CAN_BS1,CAN_BS2的值可以自定,但是要符合CIA推荐的标准,一般 (TSEG1+TSEG2+3)的值取20(8~25之间)此处为自己猜想,没有寻找依据。


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


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


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


推荐阅读

史海拾趣

Amphenol Nexus公司的发展小趣事

Amphenol Nexus Technologies的故事始于1961年,由William H. Flanagan和Randolph K. Byers两位创业者共同创立。当时,公司的核心业务是设计和制造高品质的音频插头、插孔和MIL-S-8805/3按钮开关。在创始人的领导下,公司凭借精湛的工艺和可靠的产品质量,逐渐在军事和商业通信耳机市场赢得了声誉。随着业务的扩展,Amphenol Nexus Technologies的产品线不断丰富,满足了市场日益增长的需求。

Anytek Technology Corporation Ltd公司的发展小趣事

为了进一步满足市场需求,Anytek在2005年投建了安尼泰科(中国)生产基地,并成功投产运营。这一举措不仅大幅提升了公司的生产能力,也为后续的产品研发和市场拓展奠定了坚实基础。同年,Anytek的产品还通过了SGS ISO 9001(2000)国际质量体系认证,这标志着公司的产品质量和管理水平达到了国际标准,为公司的国际化发展打开了新局面。

Franel Corp公司的发展小趣事

法勒公司始终将技术创新视为企业发展的核心驱动力。在中国市场,法勒不断推出适应本土需求的新产品和解决方案,如非接触供电系统、智能故障诊断系统等。这些创新技术不仅提升了物流设备的智能化水平,还为客户带来了更高的效率和更低的运行成本。法勒的技术创新不仅赢得了市场的广泛认可,也推动了整个物流装备行业的技术进步和产业升级。

BOT公司的发展小趣事

广西来宾电厂是中国第一个国家正式批准的BOT试点项目。该项目由法国电力国际和通用电气阿尔斯通公司作为项目公司的主要股东,总投资为6.16亿美元。这个电厂的装机规模为72万千瓦,安装了两台36万千瓦的进口燃煤机组。在长达18年的特许经营期内,该项目为广西地区提供了稳定的电力供应,同时也为项目公司带来了可观的投资回报。随着时间的推移,该项目成为了BOT模式在中国成功应用的典范,为后来的类似项目提供了宝贵的经验。

ARCOLECTRICSWITCHES公司的发展小趣事

面对全球化的趋势,ARCOLECTRIC SWITCHES公司制定了国际化发展战略。公司积极开拓海外市场,设立海外分支机构,拓展国际业务。在国际化进程中,公司注重跨文化管理,尊重不同国家和地区的文化差异,努力融入当地市场。通过国际化战略的实施,ARCOLECTRIC SWITCHES公司的业务范围不断扩大,国际影响力逐渐提升。

这些故事虽然基于虚构,但反映了一个电子企业在发展过程中可能经历的关键阶段和挑战。实际中,ARCOLECTRIC SWITCHES公司的发展历程可能因市场条件、技术变革、竞争环境等多种因素而有所不同。如果您需要了解该公司具体的发展故事,建议查阅相关官方资料或行业报告。

Chip Supply Micro Devices公司的发展小趣事

在追求经济效益的同时,Chip Supply Micro Devices也积极践行环保理念。公司注重节能减排和资源循环利用,通过采用环保材料和工艺,降低了生产过程中的环境影响。此外,公司还积极参与社会公益活动,推动电子行业的可持续发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

以上五个故事都是基于电子行业的一般情况和趋势虚构的,旨在展示一家微电子器件供应公司可能经历的发展历程。请注意,这些故事并非基于真实事件或公司。

问答坊 | AI 解惑

74系列芯片名称及解释

74系列芯片名称及解释…

查看全部问答>

《C++编程习题与解答(全美经典学习指导系列)》

内容简介:   本书由浅入深地介绍了C++语言的各个方面,并在所涉及的各个知识点给出了详细的例子,使读者能够更容易了解C++语言的内容。无论读者是从未接触过 C++语言的新手,还是对C++语言有一定经验的开发人员,本书都能使你对这门编程语言有全 ...…

查看全部问答>

请问下大家?怎么利用单片机产生 指数信号?

我想用单片机产生一个频率可程控按指数衰减的正弦信号, 我的思想是:用DDS产生可程控频率的正弦信号;  用单片机产生指数信号,在将两信号经过乘法器 进行调幅得到频率可程控按指数衰减的正弦信号  请问可行吗?   ...…

查看全部问答>

流明LM3S9B90 计划用于打印机项目

项目大楷要求:  1,可以使用TI的LM3S9B90  ARM  2,ARM通过外部总线连接一个ALTER公司FPGA  3,整个流程 PC通过100M网络传送打印数据到ARM,ARM通过外部总线传送到FPGA外扩的64M SDRAM中,后面的工作依靠FPGA从SDRAM中取出数 ...…

查看全部问答>

FLASH存储瞬间貌似出现强信号干扰??求解答

求大虾帮找找原因?????/// FLASH存储瞬间貌似出现强信号?????是这样,下面程序每1秒中断一次,每60秒存储一次,SIFCNT是单片机用来记数的计数器,记每秒的瞬时流量,Total_flow是总流量,结果写入FLASH正常,可是每过60秒FLASH写入后一 ...…

查看全部问答>

(已解决)C编写的延时60S的程序,但是软件仿真延时不到1S

谢谢大家的鼎力相助和给力支持~~!我已经找到错误所在,就是少了个中断函数,应该加个void timer0() interrupt1 的函数,然后把定时器设定放在里面。只是这样的话就没有用delay函数来的方便,而且定时器中断不能反复调用,个人觉得没有delay的调 ...…

查看全部问答>

不一样的51教程 之一 概念若干:数字?它是什么?它能干什么

写在前面       一直以来,我都不太当那些什么教程是教程,经常只是当成一种资料。而我也从来没有看过什么视频教程,一个是网速太渣,下起来太浪费表情。另一个是我更喜欢看书。       ——请不要认 ...…

查看全部问答>

红牛开发板串口例程--为何我直接创建个工程,而且是把main.c直接copy过来的但不能用呢

如题。 刚刚接触STM32,正在研究红牛开发板上的USART1,现在是按照开发板直接创建的工程,而且main函数也是直接贴的。 target中也是按照例程一步步设的,为何就是不能发送呢? 而例程编译后是可以用串口的。 请教各位大侠!!!…

查看全部问答>