如何测量LIN网络波特率误差

本文是我基于LIN2.1规范得出的结论,暂且无法确认是否一定正确!如果描述有误,恳请大佬能指正!不胜感激。

前提:之前做项目的时候,遇到关于LIN波特率误差的测试!因为对相关概念了解的不全面,导致用例编写的不好!客户也一直提出疑问。今天恰好有时间,重新梳理了一遍LIN规范中关于波特率误差的部分。做一个总结

1*)主节点测试说明(Ftol_res_master)

是指主节点设定的波特率和实际发出来的波特率的误差。

这里设定需要分为两种情况,

1.1)当测试节点为主节点时:

(是可以在协议栈中配置的波特率的。是需要考虑,测量此误差范围的。如配置波特率为19200bit/s,实际测量(本人是使用示波器进行测量的)。误差范围要控制在±0.5之间。[19104-19296]之间。

但是,实际测试过程中,我们需要适当放宽标准。因为实际我们测试也存在部分误差。可以根据示波器的精度,适当放宽标准0.6%-1%之间。

2*)从节点误差说明(Ftol_res_Slave、Ftol_unsync、Ftol_sync)

当测试节点,也就是被测节点是从节点时。

也需要考虑Ftol_res_master参数,因为从节点需要主节点发送的调度表。才能正常正确填充数据。此时,我们需要使用测试工具来模拟主节点。测试从节点波特率误差的前提就是,主节点误差范围不超过±0.5%。实际测试适当放宽标准0.6%-1%之间,只有保证这个前提,才能执行从节点的各项误差参数的测试。

我们在这里提出一个新的概率:即协议栈中设置的波特率,叫做“协议栈波特率”

2.1:Ftol_res_slave当测试节点为从节点时

节点类型晶振类型是否需要通过同步段同步说明
从节点低精度时钟一般情况下是必需,同步段执行同步的

此情况下:误差有两种参数需要测量

1:同步前误差±14%,Ftol_unsync

2:同步后误差±2%,Ftol_sync

从节点高精度时钟

非强制,

1:响应主节点的同步段

2:不响应主节点同步段

1:以实测主节点波特率为基准,误差±2%。又因为主节点对比协议栈中配置的波特率,可以存在0.5%的误差,故测试中,从节点基于协议栈配置波特率误差最大为2%+0.5%=2.5%:,Ftol_sync

2:以从节点,基于协议栈配置波特率误差,±1.5%,Ftol_res_Slave

故;从节点测试需要分为3种情况

2.1.1):低精度时钟,测量同步前误差±14%,Ftol_unsync

需要测试 1:同步前误差±14%,Ftol_unsync。此测试项比较复杂,

测试方案为:通过改变主节点同步间隔段的长短,来测试从节点是否符合Ftol_unsync(±14%)的标准。

那么该如何改变主节点同步间隔段的长短,我们还需要知道两个概念

*概念1)主节点发送的同步间隔段至少>=13bit的显性位。从节点在﹢14和-14的时钟误差上,能识别为多少bit的显现位,设置此参数为X。

转态1):从节点时钟比主节点时钟快+14%。即从节点的位时间,比主节点快14%

(X-13)/13=0.14,X=14.82。故从节点肯定能识别这个,同步间隔段,从节点自身唤醒,同时执行初始化(100ms内完成初始化),一般情况下10ms内即可完成。

*状态2)从节点时钟比主节点时钟慢+14%,即从节点的位时间,比主节点慢14%。

(13-X)13=0.14,X=11.18。故此情况下,从节点最多只能识别11bit,故从节点在配置协议栈时。同步间隔段,最小识别阈值=11bit。也就是说只要从节点识别到11个显性位,就执行唤醒自身,并初始化。

*概念2) LIN帧中,不可能存在超过9个bit的相同位数据,(除了同步间隔段)

也就是说帧中最多同时出现 9bit显性位,或最多同时出现9bit的隐形位,如果在同步间隔段之外检测到>9bit显性位信号,该LIN总线即将该段信号识别为同步间隔段。

于是:(X-9)/9=14,X=10.28,即从节点时钟比标准的主节点时钟,快14时,从节点最大可以将主节点发送的9bit显性位,识别为10.28bit显性位。

  于是,从节点误差为:14%时,识别阈值最小为11bit显性位。

总结:从节点允许的误差范围内,必须满足两个条件

1)主节点发送13bit的显性位时,必须识别为同步间隔段

2)不能将帧头,或数据段识别为同步间隔段(同步段固定格式+不可能被识别为同步间隔段,PID段的奇偶校验不能全为0,或全为1,实际上也不可能被识别为同步间隔),(实际上只有数据段可能出点连续9bit的显性位,数据=0x00,不能识别为同步间隔段)

测试从节点是否满足,协议栈配置波特率的14%误差。

1:首先查询开发文档,确定从节点时钟为低精度时钟

2:确定配置识别同步间隔段的阈值为11bit的显性位

2:使用测试工具模拟主节点(必须保证主节点与配置波特率的误差±0.5%),发送11bit显性位,,如果能够识别,说明波特率误差0%。如果发送14.82才能识别,那么波特率误差为+14%。如果发送9.6位,从节点识别为同步间隔段,则从节点比标准波特率快+14%。

计算公式:11=(X)*1.14

如果发送12.79bit,位的显性位,从节点才能识别为同步间隔段,则从节点比标准波特率慢14%,也就是误差-14%。

计算公式:11=(X)*0.86

总结:测试同步前误差±14%,Ftol_unsync,必须知道从节点的识别阈值,然后根据上述方法,测试出从节点识别出同步间隔段时的阈值,如果该阈值<9.6,如为9.2则,从节点同步前波特率误差>14%,如果识别阈值>12.79。则波特率误差比标准波特率小14%。

2.1.2):低精度时钟,测量同步后误差±2%,Ftol_sync

使用示波器,测量主节点发出的帧头部分的,(同步段 从起始位下降沿-第7bit位的下降沿)/8

从节点,填充的数据段比较难测量,最好选取数据段为00,因为没有合适的作图工具,我把00的波形图,红线画出来,因为起始位下降沿和停止位上升沿,比较好找,所以

[T2(2处时刻)-T1(1处时刻)]/9=从节点的位时间

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
stm32 lin自动波特率是指在LIN通信中,STM32微控制器能够自动识别和适应不同的波特率LIN(Local Interconnect Network)是一种针对车辆电子系统的通信协议,用于连接车载仪表、电动窗、车身控制等各种电子设备。 传统上,在LIN通信中,波特率需要手动设置为特定的数值。但是,STM32微控制器的LIN接口具有自动波特率检测和调整的功能。具体而言,当STM32与LIN总线上的设备进行通信时,它会通过扫描LIN总线上的数据来检测波特率。然后,它会自动调整自身的波特率以与所连接设备的波特率相匹配。 STM32微控制器的LIN自动波特率功能带来了一些优势。首先,它节省了手动设置波特率所需的时间和工作量,提高了开发的效率。其次,它可以适应不同设备的波特率,从而增强了系统的兼容性和可扩展性。此外,它还提高了通信的稳定性和可靠性,确保了数据的准确传输。 要使用STM32的LIN自动波特率功能,开发者需要在代码中正确配置LIN外设,并使用相应的函数来启用自动波特率检测和调整。在通信开始前,STM32会自动检测波特率并设置合适的通信参数。然后,开发者可以通过读取和写入LIN数据来实现与LIN总线上的设备进行通信。 总而言之,STM32的LIN自动波特率功能使得LIN通信更加方便、高效和可靠。它大大简化了开发过程,并提供了更好的兼容性和稳定性,为车辆电子系统的设计和开发带来了便利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值