汽车电子 -- CAN总线比特率计算方法

2023-11-23 20:20

本文主要是介绍汽车电子 -- CAN总线比特率计算方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇文章介绍 PCAN View 安装与使用 的时候,留下了两个问题,CAN总线比特率该怎么计算?
下图里的这些 Prescaler、tseg1、tseg2、sync Jump Width是什么意思?
在这里插入图片描述

CAN2.0协议中定义标称位速率为一理想的发送器在没有重新同步的情况下,每秒发送的位数量,也就是我们说的比特率。位时间标称位时间 = 1 /标称位速率。

一、CAN 位时间(CAN Bit Timing)

1个位时间包含4个功能段,分别是:

  • 同步段(SYNC_SEG)
  • 传播段(PROP_SEG)
  • 相位缓冲段 1(PHASE_SEG1)
  • 相位缓冲段 2(PHASE_SEG2)

为了方便与编程,有些时候会把传播段相位缓冲段1合并成一个时间段。位时间的数值相当于 1/比特率。
在这里插入图片描述
在这里插入图片描述
相关参数定义如下:

  • Prescaler: 分频。控制器的时钟频率进行分频后会得到CAN的时钟,CAN时钟的一个时间周期就是之前提到的最小时间段tscl,也称作时间份额,代表的是CAN控制器工作时的最小时间单位。

  • SYNC_SEG: 同步段。用于同步总线上各个节点,固定长度为1个tscl。其中应该有一个跳变沿。

  • PROP_SEG: 传播段。用于补偿信号通过网络和节点传播的物理延迟,长度应能保证2倍的信号在总线的延迟,长度为1到8个tscl。

  • PHASE_SEG: 相位缓冲段。用于补偿跳变沿的相位误差,相位缓冲段1的结尾是采样点位置。相位缓冲段1和2长度均为1到8个tscl。

  • sample point: 采样点。为读总线电平并解释各位的值的一个时间点。采样点位于相位缓冲段 1(PHASE_SEG1)之后。

    其中:
    TSEG1 = PROP_SEG + PHASE_SEG1。
    TSEG2 = PHASE_SEG2。
    位时间 = SYNC_SEG + TSEG1 + TSEG2,长度为8到25个tscl。
    采样点 = (SYNC_SEG + TSEG1)/ 位时间。

  • sync Jump Width: 同步跳转宽度 (SJW) 。定义了在重新同步时可以缩短或延长的最大时钟周期数。因为重新同步时,相位缓冲段1会延长或是相位缓冲段2缩短。同步跳转宽度取值为1到4,同时必须不大于PHASE_SEG1的时间份额数。

二、计算公式

同步段,固定长度为1个tscl。
比特率 = 时钟(总线时钟/外设时钟) / (比特率分频器值)*(时间段1 + 时间段2 + 1) // 这里的1是同步段
在这里插入图片描述

到此,下图就好理解了。
在这里插入图片描述

位时间 = (时间段1 + 时间段2 + 1)
即:
位时间 = (tseg1 + tesg2 + 1)

位时间 = (12+3+1)= 16

比特率 = 时钟(总线时钟/外设时钟) / (比特率分频器值)*(时间段1 + 时间段2 + 1)
即:
比特率 = clock Frequency / (Prescaler)*(tseg1 + tesg2 + 1)

比特率 = (80Mhz)/(10*(12+3+1)) = 500 kbit/s

采样点 = (SYNC_SEG + TSEG1)/ 位时间。
即:
采样点= (1 + tseg1 )/ (tseg1 + tesg2 + 1)

采样点 = (1+ 12)/ (12+3+1) = 81.25%

三、比特率计算工具

下载:BitRateCalculationTool

第一步:

打开Bit Rate Calculation Tool.exe软件后,选择不同的硬件,主要分为三种:

  • CAN bit Rate: 适用基于FPGA 的CAN 控制器硬件,比如 PCAN-miniPCIe。
  • CAN FD Bit Rate:适用基于FPGA的 CAN FD控制器硬件,比如 PCANUSB FD、PCANUSB X6、PCI Express FD等等。
  • SJA-1000 Bit Rate:适用于独立控制器SJA-1000的硬件,比如:PCANUSB。
    在这里插入图片描述

第二步

设置目标比特率,以及是否“允许比特率偏差”。

如果选择了 “允许比特率偏差”,就会考虑指定的公差,结果中也会列出近似值。如果不选择,则只列出与给定值相匹配的无公差的比特率。
在这里插入图片描述

第三步

选择时钟频率,根据需求选择80Mhz-20Mhz。

可选特定范围的仲裁段采样点Norminal sample point,这个是一个比较实用的功能,因为汽车行业大部分采样点是在70%-87.5%之间。
在这里插入图片描述

第四步

可选数据段采样点的范围Data sample point,通常也会使能勾选。

Equal prescaler values表示只列出具有相同预分频器值的名义和数据比特率的结果。保持使能勾选。
在这里插入图片描述

第五步

计算结果显示与选择

从计算列表中选择需要的采样点配置,在下方分列具体显示仲裁段和数据段的比特率配置信息。
在这里插入图片描述
结果输出:选择某个计算结果后,鼠标右键copy to Clipboard,复制到剪贴板,结果可用于PCAN-Basic API二次开发的初始化设置。

f_clock=80000000,nom_brp=10,nom_tseg1=12,nom_tseg2=3,nom_sjw=3,data_brp=10,data_tseg1=2,data_tseg2=1,data_sjw=1
在这里插入图片描述
这个就是上图PCAN View里的配置。

第六步

生成的计算结果可用于PCANVIEW或者PCAN Explorer 6的比特率自定义功能使用。

四、程序验证

既然已经知道怎么计算CAN 总线的比特率了。那就看一下程序中是不是也是这么操作的。

参看:STM32开发 – CAN总线详解

在这里插入图片描述

CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);//CAN初始化环回模式,比特率500Kbps    
//CAN初始化
//tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq
//tbs2:时间段2的时间单元.   范围:CAN_BS2_1tq~CAN_BS2_8tq;
//tbs1:时间段1的时间单元.   范围:CAN_BS1_1tq ~CAN_BS1_16tq
//brp :比特率分频器.范围:1~1024;  tq=(brp)*tpclk1
//比特率=Fpclk1/((tsjw+tbs1+tbs2)*brp);
//mode:CAN_Mode_Normal,普通模式;CAN_Mode_LoopBack,回环模式;
//Fpclk1的时钟在初始化的时候设置为36M,如果设置CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);
//则比特率为:36M/((8+9+1)*4)=500Kbps
//返回值:0,初始化OK;
//    其他,初始化失败; 
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{ GPIO_InitTypeDef 		GPIO_InitStructure; CAN_InitTypeDef        	CAN_InitStructure;CAN_FilterInitTypeDef  	CAN_FilterInitStructure;
#if CAN_RX0_INT_ENABLE NVIC_InitTypeDef  		NVIC_InitStructure;
#endifRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA时钟	                   											 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟	//Configure CAN pin: TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽GPIO_Init(GPIOA, &GPIO_InitStructure);			//初始化IO//Configure CAN pin: RXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	//上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);			//初始化IO//最好先禁止中断//重新初始化默认值CAN_DeInit( CAN1 );CAN_StructInit( &CAN_InitStructure );//CAN单元设置CAN_InitStructure.CAN_TTCM=DISABLE;			//非时间触发通信模式  CAN_InitStructure.CAN_ABOM=DISABLE;			//软件自动离线管理	 CAN_InitStructure.CAN_AWUM=DISABLE;			//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)CAN_InitStructure.CAN_NART=ENABLE;			//禁止报文自动传送 CAN_InitStructure.CAN_RFLM=DISABLE;		 	//报文不锁定,新的覆盖旧的  CAN_InitStructure.CAN_TXFP=DISABLE;			//优先级由报文标识符决定 CAN_InitStructure.CAN_Mode= mode;	        //模式设置: mode:0,普通模式;1,回环模式; //设置比特率CAN_InitStructure.CAN_SJW=tsjw;				//重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位         CAN_SJW_1tq	 CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tqCAN_InitStructure.CAN_BS1=tbs1; 			//Tbs1=tbs1+1个时间单位CAN_BS1_1tq ~CAN_BS1_16tqCAN_InitStructure.CAN_BS2=tbs2;				//Tbs2=tbs2+1个时间单位CAN_BS2_1tq ~	CAN_BS2_8tqCAN_InitStructure.CAN_Prescaler=brp;        //分频系数(Fdiv)为brp+1	CAN_Init(CAN1, &CAN_InitStructure);        	//初始化CAN1 CAN_FilterInitStructure.CAN_FilterNumber=0;	//过滤器0CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 	//屏蔽位模式CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 	//32位宽 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;	//32位IDCAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0CAN_FilterInit(&CAN_FilterInitStructure);			//滤波器初始化#if CAN_RX0_INT_ENABLE CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);				//FIFO0消息挂号中断允许.		    NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
#endifreturn 0;
}   

AUV,这之前总结的已经很详细了。 这又总结了一遍,也算加深印象了。

这篇关于汽车电子 -- CAN总线比特率计算方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

Spring Boot集成PDFBox实现电子签章

概述 随着无纸化办公的普及,电子文档的使用越来越广泛。电子签章作为一种有效的身份验证方式,在很多场景下替代了传统的纸质文件签名。Apache PDFBox 是一个开源的Java库,可以用来渲染、生成、填写PDF文档等操作。本文将介绍如何使用Spring Boot框架结合PDFBox来实现电子签章功能。 准备工作 环境搭建:确保你的开发环境中安装了JDK 8或更高版本,并且配置好了Maven或

【电子通识】半导体工艺——保护晶圆表面的氧化工艺

在文章【电子通识】半导体工艺——晶圆制造中我们讲到晶圆的一些基础术语和晶圆制造主要步骤:制造锭(Ingot)、锭切割(Wafer Slicing)、晶圆表面抛光(Lapping&Polishing)。         那么其实当晶圆暴露在大气中或化学物质中的氧气时就会形成氧化膜。这与铁(Fe)暴露在大气时会氧化生锈是一样的道理。 氧化膜的作用         在半导体晶圆

IBS和IBD的区别和计算方法介绍

大家好,我是邓飞。 今天介绍一下IBS和IBD的区别: IBS(肠易激综合症)和IBD(炎症性肠病)是两种不同的消化系统疾病,主要区别如下: IBS(Irritable Bowel Syndrome):是一种功能性肠道疾病,主要表现为腹痛、腹胀、腹泻或便秘,症状通常与饮食、压力和心理因素相关,没有明显的器质性病变。 IBD(Inflammatory Bowel Disease):是一组

组合c(m,n)的计算方法

问题:求解组合数C(n,m),即从n个相同物品中取出m个的方案数,由于结果可能非常大,对结果模10007即可。       共四种方案。ps:注意使用限制。 方案1: 暴力求解,C(n,m)=n*(n-1)*...*(n-m+1)/m!,n<=15 ; int Combination(int n, int m) { const int M = 10007; int

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

电子发射与气体导电

物理电磁学练习题:电子发射与气体导电 说明: 以下题目考察对电子发射和气体导电基本概念的理解和应用。 1. 解释以下概念:      (a) 热电子发射      (b) 光电效应      © 逸出功      (d) 等离子体 2. 比较并对比热电子发射和光电效应的异同。 3. 钨的逸出功为 4.5 eV。      (a) 计算能够从钨表面发射电子的最长波长光。      (b) 如

【电子通识】洁净度等级划分及等级标准

洁净度常用于评估半导体、生物制药、医疗、实验室及科研院所、新能源等领域的洁净室、无尘室或者无菌室等环境。         一般来说,晶圆光刻、制造、测试等级为100级或1000级的洁净间,百级洁净间要求空气中0.5微米的尘埃粒子数不得超过每立方米3520个;等级为1000级的洁净间要求0.5微米的尘埃粒子数不得超过每立方米35200个。         晶圆切割或封装工序一

提升汽车制造质量:矫平技术在车门平整化中的应用

汽车制造业对每一个部件的精细度都有着极高的要求,尤其是车门这样的关键组件。车门不仅需要提供良好的密封性,还要在外观上展现出车辆的高端品质。然而,生产过程中的不平整问题往往成为提升制造质量的障碍。矫平技术的应用,为解决这一问题提供了有效的手段。 车门平整度的重要性 车门的平整度对于车辆的整体性能和美观至关重要。不平整的车门可能导致密封不良、噪音增大,甚至影响车门的正常开启和关闭。因此,确保车门的