CANoeCAN采样点测试方法及误差分析

原创 汽车ECU开发 2024-11-11 08:42

在车载控制器中,CAN采样点的测试是控制器的基本测试之一,那CAN总线的采样点一般怎么测试呢?今天一起来捋一捋。

首先CAN报文的位将分割为同步段(Sync Segment)、时间片段 1(TSEG1 Segment)和时间片段 2(TSEG2 Segment)。这些片段由不同数量的 TQ 组成, TQ 为该总线电平中最小的时间单位。预分频(Prescaler)值以及收发器使用的时钟频率直接影响了一个位长度的总 TQ 数量。采样点位置将由各个片段中 TQ 的数量计算得到。

1 个位中包含 8 或 16 个 TQ 的分段示意图

采样点的理论计算值可由下式得到:

𝑆𝑃 = (𝑆𝑦𝑛𝑐 + 𝑇𝑆𝐸𝐺1)/(𝑆𝑦𝑛𝑐 + 𝑇𝑆𝐸𝐺1 + 𝑇𝑆𝐸𝐺2)

在此必须知道所使用的 CAN 时钟频率,以此来计算一个标称位时间所使用的总 TQ 数量。

例如:若一个 TQ 的长度为 0.0625us,时钟频率是 16MHz(通常 CAN 所使用的时钟频率),预分频数为1。这就导致在 500kBaud 下一个位含有 32 个 TQ。若预分频数为 2,则一个位包含 16 个 TQ。

同步段(Sync Segment)在任何情况下均仅为 1 个 TQ 长度,剩余的 TQ 将会被分为 TSEG1 和 TSEG2。

例如:若一个位的总 TQ 数为 16,采样点位置为 75%,则 TSEG1 的 TQ 数为 11, TSEG2 的 TQ 数为 4。

CAN采样点测试的原理是节点判断信号逻辑电平的位置,对 CAN总线来说极其重要,尤其是在一个CAN网络里,多个节点要保持同一个采样点。如果其中一个偏差较大,有可能使整个网络出现故障,所以对 CAN节点进行采样点的测试显得尤为重要,采样点测试目的用于检查控制器的采样点设置是否遵守规范要求。

采样点的位置不受控制器所处的收发状态影响,故针对采样点测试既可以干扰控制器发送的指定报文的某个位,也可以通过测试工具发送特定干扰报文去检测控制器的行为。

下面以CANoe发送特定干扰报文的方法为例。VH6501 在检测到总线空闲时,发送较高优先级的特定干扰报文,完成一个干扰循环。每次干扰循环发送结束,微调 CRC Delimiter 位长度,使其逐次缩短,导致后一位 ACK Slot前移,并将 ACK Slot 长度增加,保证整帧报文的长度不变。当显性位电平由后往前,移至 DUT 采样点位置,会被 DUT 采到并判定 CRC Delimiter 位为高电平,出现格式错误,DUT 随即发送错误帧,并被 CANoe 采集到。另外每次干扰循环结束, VH6501 将发送 30 次控制器正常接收的任意一帧正常报文,从而使 DUT 始终保持 Error Active 状态,因其主动错误帧容易辨认。

那CANoe工程如何配置呢?首先打开软件后,选择CANoe的示例工程Disturbance SamplePoint Test (CAN)。进入工程后,将 VH6501 通道分配给软件通道 CAN1,在下图所示界面设置 Mode 为 CAN,并勾选 Activate 选项使能 VH6501 总线干扰功能。

VH6501 的采样点设置尽量靠前,确保优先干扰到控制器的采样点,此处BTL Cycles(指的是TQ数量,将一个位分为16个TQ) 和SJW(同步跳变宽度) 要选择数值较大的组合,可参考下图配置。

配置完成之后,就可以写capl测试脚本了。

/*@!Encoding:936*/includes{ 
}variables{ CanDisturbanceFrameTrigger frameTrigger; CanDisturbanceFrameSequence frameSequence; CanDisturbanceSequence sequence; CanDisturbanceTriggerRepetitions repetitions; const int repetition_times_in_one_cycle = 10; //Number of disturbance repetitions in a cycle long result; long errfrmcount; //The error frame count in one cycle long first_err_bit_length,first_error_occur, ten_error_occur; long validityMask; long cycleFlag; message 0x100 triggerMessage; //The trigger message.(ID is not important.) message 0x0 spTestMsg; //The disturbance frame sequence which CRC DEL need to be shorten. message 0x1 Keep_DUT_ErrorActive; const long CountMsgKeepErrorActive = 30; long MsgCntKeepErrorActive = 0; char spTestDone[33] = "SPDone";}on errorFrame{ if(this.msgChannel == @sysvar::CANDisturbanceInterface1::ChannelNo) { errfrmcount++; if((errfrmcount == 1) && (first_error_occur == 0)) {      first_err_bit_length = frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]; first_error_occur = 1; write("+++++++++First error frame occurs+++++++++++."); } if(errfrmcount == repetition_times_in_one_cycle) { ten_error_occur = 1; testSupplyTextEvent(spTestDone); } }}
on message 0x1{ if(MsgCntKeepErrorActive <= CountMsgKeepErrorActive) { ++MsgCntKeepErrorActive; output(Keep_DUT_ErrorActive); } else { ActivateTriggerAgain(); }}
void ActivateTriggerAgain(){ if(ten_error_occur == 0) { errfrmcount = 0; //CRC Delimiter is shorten with 6.25ns per cycle.    --frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]; ++frameSequence.AckSlot.BitSequence[0].segmentLength[0]; result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger, frameSequence, repetitions); if(result == 1) { write("Trigger is enabled, frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] = %d", frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]); } else { write("Enable trigger error Result = %d", result); } }}
on sysvar sysvar::CANDisturbanceInterface1::Trigger::State{ //6501 is Idle after repetition_times_in_one_cycle finish if(@sysvar::CANDisturbanceInterface1::Trigger::State == 0) {    //At the end of each disturbance cycle, the VH6501 need to outputsome normal message to prevent the DUT from being in a passive error state    //because the passive error frame is not easily to be observed and //identified. MsgCntKeepErrorActive = 0; output(Keep_DUT_ErrorActive); }}
testcase SamplePointTest_forVH6501(){ first_error_occur = 0; ten_error_occur = 0; errfrmcount = 0; cycleFlag = 1;  frameSequence.SetMessage(@sysvar::CANDisturbanceInterface1::DeviceNo,spTestMsg); validityMask = 0; //trigger on any CAN messages frameTrigger.SetMessage(triggerMessage, @sysvar::CANDisturbanceInterface1::DeviceNo, validityMask); frameTrigger.TriggerFieldType = @sysvar::CanDisturbance::Enums::FieldType::EndOfFrame;  frameTrigger.TriggerFieldOffset = 9//Trigger position is the thirdbit of IFS. write("CRC Delimiter Bit Length = %d",  frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]); repetitions.Cycles = 1; repetitions.HoldOffCycles = 0; repetitions.HoldOffRepetitions = 0; repetitions.Repetitions = repetition_times_in_one_cycle;  result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger,frameSequence,repetitions);
if(result == 1)  { write("Trigger is enabled.");  } else { write("Enable trigger error Result = %d", result); } result = testWaitForTextEvent(spTestDone, 10000); if(result == 1) { write("frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] = %d , sample point lies in %f%%~%f%%", frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0], (frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] * 100.00) / frameSequence.DLC.BitSequence[1].segmentLength[0], (first_err_bit_length * 100.00) / frameSequence.DLC.BitSequence[1].segmentLength[0]); }}
void maintest(){ SamplePointTest_forVH6501();}

那采样点的测试结果一般受什么影响呢?一般来说受3个因素影响。

在总线信号和 RxD 引脚信号上影响采样点测试结果的因素示意图

∆𝑡𝑀𝑒𝑠𝐻𝑤指VH6501每次缩短或增长的步进长度。

∆𝑡𝑇𝑄指控制器的CAN参数配置中一个TQ的时间长度。

∆𝑡𝑅𝑒𝑐指总线上一个位的电平长度与控制器内部主控芯片 RxD 引脚上的一个位电平长度的时间差。∆𝑡𝑅𝑒𝑐 = 𝑡𝐵𝑖𝑡(𝑅𝑥𝐷) - 𝑡𝐵𝑖𝑡(𝐵𝑢𝑠)

如果一个 CAN 的设备使用的时钟对应的最小 TQ 时间长度在∆𝑡𝑅𝑒𝑐的范围内,并且实际 TQ 配置在此范围内,则∆𝑡𝑅𝑒𝑐所带来的误差需要考虑在采样点测试的结果中 。ISO11898-2: 2015规定了在2MBaud下,规定了∆𝑡𝑅𝑒𝑐的允许范围为-65ns 到+40ns。而对于 2MBaud下,一个位时间长度为500ns, 这意味着在RxD引脚上的为时间长度将会比在总线上的为时间长度短13%或长 8%。而 TQ 时间长度的计算公式为:∆𝑡𝑇𝑄 =𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟/𝐶𝐴𝑁 𝐶𝑙𝑜𝑐𝑘

如果在 2MBaud 下, 一个 TQ 的时间长度小于一个位的 13%, 则∆𝑡𝑅𝑒𝑐将会被考虑进采样点测试的结果当中。具体的误差将取决于 CAN 发送器和使用的波特率。

假设 CAN 时钟频率为 80MHz, ∆𝑡𝑅𝑒𝑐为 25ns,预分频(Prescaler) 为 1, ∆𝑡𝑇𝑄为 12.5ns, ∆𝑡𝑀𝑒𝑠𝐻𝑤为6.25ns。仲裁相为 500kBaud,数据相为 2MBaud。

这意味着∆𝑡𝑅𝑒𝑐所带来的误差在仲裁相为 1.25%,在数据相则会上升到 5%(由于单个位时间长度缩短了) 。这几乎相当于 2 个 TQ 的时间长度。测试工具 VH6501 步进长度∆𝑡𝑀𝑒𝑠𝐻𝑤所带来的误差分别为0.3125%和 1.25%。

由于 CAN 协议 11898 中并未规定重同步后跳变沿一定要在同步段(Sync Segment) 的哪个位置,从同步段(Sync Segment) 的开始到结束均可以,因此这会带来 1 个 TQ 的误差。在仲裁相和数据相中带来的误差分别为 0.625%和 2.5%。

因此综上所述,在仲裁相中总的最大误差为 2.1875%(1.25% + 0.3125% + 0.625%) ,在数据相中总的最大误差为 8.75%(5% + 1.25% + 2.5%)。

由上可知, 由 VH6501 所带来的误差所占比例是很小的。而大部分是由于 CAN 协议本身所带来的误差。

-end-


分享不易,恳请点个【👍】和【在看】

汽车ECU开发 专注于汽车电子ECU软件开发,技术分享。
评论
  • 如同任何对我们工作方式的改变,新的工作方式必然会遇到许多必须面对的挑战。如果不解决组织在实施精益六西格玛过程中面临的障碍以及如何克服它们的问题,那么关于精益六西格玛的讨论就不算完整。以下列举了组织在成功实施精益六西格玛时常见的几个障碍,以及克服它们的方法:1)对精益六西格玛方法论缺乏理解。抵触情绪通常源于对精益六西格玛方法论的不了解,以及不相信它能真正发挥作用。这种情况在所有层级的人员中都会出现,包括管理层。虽然教育培训可以帮助改善这一问题,但成功的项目往往是打消疑虑的最佳方式。归根结底,这是一
    优思学院 2025-03-20 12:35 128浏览
  • 故障现象 一辆2024款路虎发现运动版车,搭载2.0 L发动机,累计行驶里程约为5 000 km。车主反映,使用遥控器无法解锁车门,随后使用机械钥匙打开车门,踩下制动踏板,按压起动按钮,仪表盘提示“将智能钥匙放在图示位置,然后按下起动按钮”(图1)。 图1 故障车的仪表盘提示采用上述应急起动方法,发动机能够起动着机。上述故障现象已出现过多次,过一段时间又会恢复正常,这次故障出现要求将车辆拖入店内进行彻底检修。 故障诊断 车辆进店后进行试车,车辆一切功能又恢复正常。经过反复测试
    虹科Pico汽车示波器 2025-03-20 10:17 101浏览
  • 4月8-11日,第91届中国国际医疗器械博览会(CMEF)将在国家会展中心(上海)举办。这场全球瞩目的医疗科技盛宴以“创新科技,智领未来”为主题,旨在全方位展示医疗科技的最新成果,与来自全球的行业同仁一道,为全球医疗健康领域带来一场科技与商贸交融的产业“盛宴”。飞凌嵌入式作为专业的嵌入式技术解决方案提供商,一直致力于为医疗器械行业提供丰富的、高可靠性的嵌入式硬件主控解决方案。届时,飞凌嵌入式将为来自全球的观众带来适用于IVD、医疗影像、生命体征监测等医疗设备的嵌入式板卡、显控一体屏产品以及多款动
    飞凌嵌入式 2025-03-20 11:46 42浏览
  • 家电“以旧换新”政策的覆盖范围已从传统的八大类家电(冰箱、洗衣机、电视、空调、电脑、热水器、家用灶具、吸油烟机)扩展至各地根据本地特色和需求定制的“8+N”新品类。这一政策的补贴再叠加各大电商平台的优惠,家电销售规模显著增长,消费潜力得到进一步释放。晶尊微方案为升级换代的智能家电提供了高效且稳定的触摸感应和水位检测功能,使得操作更加便捷和可靠!主要体现在:水位检测1健康家电:养生壶、温奶器、加湿器的缺水保护安全2清洁电器:洗地机、扫地机器人的低液位和溢液提醒3宠物家电:宠物饮水机的缺水提醒/满水
    ICMAN 2025-03-20 15:23 186浏览
  • 流感季急诊室外彻夜排起的长队,手机屏幕里不断闪烁的重症数据,深夜此起彼伏的剧烈咳嗽声——当病毒以更狡猾的姿态席卷全球,守护健康的战争早已从医院前移到每个人的身上。在医学界公认的「72小时黄金预警期」里,可穿戴设备闪烁的光芒正穿透皮肤组织,持续捕捉血氧浓度、心率变异性和体温波动数据。这不是科幻电影的末日警报,而是光电传感器发出的生命预警,当体温监测精度精确到±0.0℃,当动态血氧检测突破运动伪影干扰……科技正在重新定义健康监护的时空边界。从智能手表到耳机,再到智能戒指和智能衣物,这些小巧的设备通过
    艾迈斯欧司朗 2025-03-20 15:45 215浏览
  • 在电子制造领域,PCB(印刷电路板)的使用寿命直接决定了产品的长期稳定性和可靠性。捷多邦作为全球领先的PCB制造商,始终将质量放在首位,致力于为客户提供高可靠性、高性能的PCB解决方案。以下是捷多邦如何确保PCB使用寿命超过20年的核心技术与优势。 1. ​高品质原材料:从源头保障耐用性捷多邦采用国际认证的优质基材,如FR4、高频材料和高TG板材,确保PCB在高温、高湿等极端环境下的稳定性。通过严格的原材料筛选和入库检验,捷多邦从源头控制质量,避免因材料缺陷导致的失效问题。 
    捷多邦 2025-03-20 11:22 110浏览
  •         在当今电子设备高度集成的时代,电路保护显得尤为重要。TVS管(瞬态电压抑制二极管)和压敏电阻作为一种高效的电路保护器件,被广泛应用于各种电子设备中,用以吸收突波,抑制瞬态过电压,从而保护后续电路免受损坏。而箝位电压,作为TVS管和压敏电阻的核心参数之一,直接关系到其保护性能的优劣。箝位电压的定义        箝位电压指瞬态保护器件(如TVS二极管、压敏电阻)在遭遇过压时,将电路电压限制在安全范围内的
    广电计量 2025-03-20 14:05 116浏览
  • 本文内容来自微信公众号【工程师进阶笔记】,以工程师的第一视角分析了飞凌嵌入式OK3506J-S开发板的产品优势,感谢原作者温老师的专业分享。前两周,有一位老朋友联系我,他想找人开发一款数据采集器,用来采集工业现场的设备数据,并且可以根据不同的业务场景,通过不同的接口把这些数据分发出去。我把他提的需求总结了一下,这款产品方案大概有以下功能接口,妥妥地一款工业网关,在网上也能找到很多类似的产品方案,为啥他不直接买来用?再跟朋友深入地聊了一下,他之所以联系我,是因为看到我在公众号介绍过一款由飞凌嵌入式
    飞凌嵌入式 2025-03-20 11:51 139浏览
  • 为有效降低人为疏失导致交通事故发生的发生率,各大汽车制造厂及系统厂近年来持续开发「先进驾驶辅助系统」ADAS, Advanced Driver Assistance Systems。在众多车辆安全辅助系统之中,「紧急刹车辅助系统」功能(AEB, Autonomous Emergency Braking)对于行车安全性的提升便有着相当大的帮助。AEB透过镜头影像模块与毫米波雷达感测前方目标,可在发生碰撞前警示或自动刹车以降低车辆损伤以及乘员伤害。面临的挑战以本次分享的客户个案为例,该车厂客户预计在
    百佳泰测试实验室 2025-03-20 15:07 139浏览
  • 全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,凭借AS1163独立智能驱动器(SAID)成为中国领先的智能集成系统产品汽车制造商宁波福尔达智能科技股份有限公司(“福尔达”)环境动态照明应用的关键供应商。此次合作标志着汽车技术发展的一个重要时刻,充分展现了AS1163在优化动态照明应用系统成本方面的多功能性和先进性能。该产品支持传感器集成,拥有专为车顶照明设计的超薄外形,并能提升车内照明系统的性能。AS1163是一款先进的智能LED驱动器,能够与开放系统协议(OSP)网络无缝
    艾迈斯欧司朗 2025-03-20 14:26 131浏览
  • 这是一个很有意思的话题,在职场人士之间争论不休。证书到底有没有用?有人支持,也有人反对。不过,在正式聊这个话题之前,我想先分享一个我亲身经历的真实故事。那时,我和同学们正在读管理学的研究生课程。有一次,我们的教授要求大家穿正装上课。这时,有个同学问了个很有趣的问题:“教授,某某的董事长可以穿得五颜六色,我们这些职场新人为什么非得穿正装?”教授听后,停顿了一下,然后淡定地回了句:“你当然也可以穿得五颜六色,但前提是——先成为某某的董事长那样的人。”这句话点出了一个事实:同一套规则,并不适用于所有人
    优思学院 2025-03-19 12:02 113浏览
  • PCIe 5.0应用环境逐步成形,潜在风险却蠢蠢欲动?随着人工智能、云端运算蓬勃发展,系统对于高速数据传输的需求不断上升,PCI Express(PCIe)成为服务器应用最广的传输技术,尤其在高效能运算HPC(High Performance Computing)及AI服务器几乎皆导入了最新的PCIe 5.0规格,使得数据传输的双向吞吐量达到了128GB/s,让这两类的服务器能够发挥最大的效能。不过随着PCIe 5.0的频率达到16GHz,PCB板因为高频而导致讯号衰减加剧的特性,使得厂商面临很
    百佳泰测试实验室 2025-03-20 13:47 133浏览
  • 贞光科技代理的品牌-光颉科技高精密薄膜电阻凭借0.01%的超高精度,在AI服务器电源模块中实现了精确电压分配、优化功率因数和减少热损耗,显著提升系统能效和可靠性。在当今的数字时代,人工智能(AI)服务器已成为数据中心的核心。随着AI应用的激增,服务器的性能和能效需求也在不断提高。电源模块作为服务器的关键组件,其性能直接影响整个系统的效率和可靠性。本文将探讨光颉科技高精密薄膜电阻,特别是其0.01%的精度,如何在AI服务器电源模块中提升能效。电源模块在AI服务器中的重要性电源模块负责将输入电源转换
    贞光科技 2025-03-20 16:55 186浏览
  • 在人工智能与物联网技术深度融合的今天,离线语音识别技术凭借其隐私安全、即时响应等优势,正在智能家居、工业控制等领域快速普及。广州唯创电子推出的WTK6900系列语音识别芯片,凭借其创新的离线命令词自学习功能,为用户提供了灵活高效的语音交互解决方案。本文将深入解析这一核心技术的工作原理及操作流程。一、智能自学习功能概述WTK6900系列芯片支持多模态学习方式,用户可通过物理按键、串口指令、语音命令或专用APP启动学习流程。其核心技术突破在于:全离线运行:所有学习过程均在本地完成,无需网络传输动态模
    广州唯创电子 2025-03-20 08:54 194浏览
  • 近日,保定飞凌嵌入式技术有限公司(以下简称“飞凌嵌入式”)携手瑞芯微电子股份有限公司(以下简称“瑞芯微”)正式加入2025年全国大学生嵌入式芯片与系统设计竞赛(以下简称“嵌入式大赛”),并在应用赛道中设立专属赛题。本次嵌入式大赛,双方选用基于瑞芯微RK3588芯片设计的ELF 2开发板作为参赛平台,旨在通过此次合作,促进产教融合,共同推动嵌入式系统创新人才的培养。全国大学生嵌入式芯片与系统设计竞赛是一项A类电子设计竞赛,同时也是被教育部列入白名单的赛事,由中国电子学会主办,是学生保研、求职的公认
    飞凌嵌入式 2025-03-20 11:53 109浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦