can的波特率/比特率

2023-10-13 17:52
文章标签 波特率 比特率

本文主要是介绍can的波特率/比特率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

can控制器只需要进行少量的设置就可以进行通信,就像RS232那样。其中较难设置的部分就是通信波特率的计算。can总线能够在一定范围内容忍总线上can节点的通信波特率的偏差,这种技能使得can总线有很强的容错性,同时也降低了对每个节点的振荡器精度。

实际上,can总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200-300KB/S(具体取决于寄存器的设置)。

简单介绍一下波特率的计算,在can的底层协议里将can数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:位同步时间Tsync,时间段1Tseg1,时间段2Tseg2.

其中位同步时间占用1个Tscl;,时间段1占用(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波特率的值由以下几个元素决定:

  1. 最小时间段Tscl

  2. 时间段1 Tseg1

  3. 时间段2 Tseg2

  4. 同步跳转宽度 SJW

那么Tscl是怎么计算的呢?

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

tscl = pclk。

Tseg1和Tseg2又是怎么划分的呢?

Tseg1和Tseg2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中Tseg1用来调整数据传输延迟时间造成的误差,而Tseg2则用来调整不同点节点晶体频率的误差。

但是他们由于过于灵活,而使初次接触CAN的人有点无所适从。TSEG1与TSEG2的是分大体遵循以下规则: Tseg2≥Tscl2,Tseg2≥2TSJW,Tseg1≥Tseg2

总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为: BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)

最后,我们来说说如何计算波特率。

can总线有两个总线时钟寄存器BTR0、BTR1。

can系统时钟公式:

tscl = 2tclk(32BRP.5 + 16BRP.4 + 8BRP.3 + 4BRP.2 + 2*BRP.1 +BRP.0 + 1)

其中tclk=1/晶振频率=pclk。

同步跳转宽度:

Tsjw = “tscl”(2SJW.1 + SJW.0 + 1)

位周期T

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

Tseg1 = tscl*(8TSEG1.3 + 4TSEG1.2 +2*TSEG1.1 + TSEG1.0 + 1)

Tseg2 = tscl*(4TSEG2.2 +2TSEG2.1 + TSEG2.0 + 1)

CAN波特率=APB总线频率/BRP分频器/(1+tBS1+tBS2)。

比如:

总线时钟寄存器BTR0:0x2,;总线时钟寄存器BTR1:0x14。

TBit = tscl(1+5+2)=8tscl

tscl = 2tclk*(3) = 6tclk

TBit =48tclk

tclk = 1/48000000

TBit = 1/1000000

即can的波特率canbps就是1/TBit=1MHz。

这篇关于can的波特率/比特率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204920

相关文章

linux下非标准波特率的设置和使用

通常,在linux下面,设置串口使用终端IO的相关函数设置,如tcsetattr等函数,linux内部有一个对常用波特率列表的索引,根据设置的波特率用底层驱动来设置异步通信芯片的寄存器 对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和ioctl(fd, TIOCSSERIAL, p)的配合,ioctl的最后一个参数是struct serial_struct *

关于示波器测波特率的方法

转载于:https://blog.csdn.net/lianxue1986/article/details/50385384 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送0x55或0xAA(因为这两个值都是0和1相间的,容易看波形占用的时间值),本例是发送的0xAA。 3.打开示波

CAN通信之波特率相关配置

由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯。 首先我们要明确几个概念: 波特率:can 1s传输的位数,其单位为bps。 Time-quantum(简称TQ):意思是一个时钟周期(1/时钟周期),1位数据由若干个TQ组成。 波特率的计算公式为,CAN波特率 = APB总线频率/BR

谁说串口通信波特率越高越好?

在电子世界里,串口通信就像是电子设备之间的“悄悄话”,它们通过串行数据传输来交换信息。但你知道吗?串口通信的波特率并不是越高越好,这事儿得好好聊聊。 1.什么是串口通信? 串口通信,就像它的名字一样,是一种串行的数据传输方式。它允许设备通过一根线(或几根线)来传递信息。想象一下,你通过一根绳子传递小纸条给朋友,这就是串口通信的基本概念。 2.串口通信波特率是什么?

STM32F207 USART2 波特率设置9600以下,4800、2400发送报文乱码

最近有一个老项目有新的需求,需要对串口进行一下改造,波特率从原来的9600改到了2400,结果奇葩的事情发生了,之前一直好好的串口,发送出来的报文竟然变成了乱码,代码也就修改了一下波特率,其他的什么都没有修改。百思不得其解,网上查阅资料说是时钟频率的问题,降低一点就解决了。但是我仔细检查过代码确认不是这个原因导致的,而且另外一个串口USART3 波特率设置成2400是能够正常收发报文的。两

Arduino-ESP32的CAN波特率设置为1M代码,不用改底层。

前面调CAN的时候,发现CAN的实际的波特率是设置的波特率的一半。然后还去看手册,推公式,改底层库的代码。后面发现不用这么麻烦,换一下使用的库和配置函数就行。使用CAN.h头文件的配置函数就会出现CAN的实际的波特率是设置的波特率的一半这个问题。 使用CAN.h头文件包含的库的函数配置,CAN实际波特率是配置波特率的一半 #include <CAN.h>#define CAN_TX

【i.MX6UL开发常见问题】如何添加其他的串口波特率?

4.10 如何添加其他的串口波特率? 答:添加路径内核源代码/driver/tty/serial/serial_core.c。 参考如下: ……… static const struct baud_rates baud_rates[] = {     { 921600, B921600 },     { 460800, B460800 },     { 230400, B230400 },

【INTEL(ALTERA)】为什么 F-Tile DisplayPort FPGA IP 设计示例无法通过高比特率 3 (HBR3) 的 RX 链路调训?

目录 说明 解决方法 说明 由于 Quartus® Prime Pro Edition 软件版本 v23.3 和 v23.4 生成的 F-Tile DisplayPort FPGA IP 设计示例中存在问题,您可能会在 HBR3 上观察到 RX 链路训练失败。 解决方法 要在这些软件版本中变通解决此问题,请使用以下 RxEQ 参数编辑项目 Quartus 设置文件 (.qsf)

串口波特率选择

波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。MCS-51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。      在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。

stm32支持的波特率的问题

原来学习stm32,关于串口波特率这个问题没有怎么关注,一般也就习惯用9600或者115200,今天被问到:stm32支持的最大波特率为多少?我自己也语塞了...   为此我好好看了下相关资料。   首先查看了stm32f10x参考手册.pdf,其中关于USART部分提到了USART的最高传输速度为4.5Mbit/s,图片(图1)如下:   在找到了最大的传输速度后,就要考虑为什