最近在研究使用VH6501进行CAN节点测试,主要是采样点和Busoff测试,期间踩了不少坑,下面详细分享下踩坑和环境搭建经历,CAN测试这块我也是最近刚起步,如果有说的不对的地方欢迎各位大佬指正
- 进行采样点测试
- 测试原理
采样点是节点判断信号逻辑电平的位置,对 CAN/CAN FD 总线来说极其重要,尤其是在组网的时候,多个节点要尽量保持同一个采样点。若网络中节点采样点不一致可能会导致同样的采样频率出现采样错误,进而使整个网络出现故障,所以对 CAN/CAN FD 节点进行采样点的测试显得尤为重要,采样点测试目的用于检查DUT(Device Under Test)的采样点设置是否遵守规范要求。本文以 CANoe 自带的采样点测试工程为例介绍如何基于 VH6501(CAN/CAN FD 总线干扰仪)进行CAN/CAN FD 采样点测试
采样点的位置不受DUT 所处的收发状态影响,故针对采样点测试既可以干扰 DUT发送的指定报文的某个位,也可以通过测试工具发送特定干扰报文去检测 DUT的行为。
本文描述的采样点测试案例中被测节点扮演的是接收节点的角色。以 CAN 采样点测试为例,VH6501 在检测到总线空闲时,发送较高优先级的特定干扰报文,完成一个干扰循环。每次干扰循环发送结束,微调 CRC Delimiter 位(隐性位)长度,使其逐次缩短,导致后一位 ACK Slot(显性位)前移,并将 ACK Slot 长度增加,保证整帧报文的长度不变。当显性位电平由后往前,移至 DUT 采样点位置,会被 DUT 采到并判定 CRC Delimiter 位为高电平,出现格式错误,DUT 随即发送错误帧,并被 CANoe 采集到。
- 测试环境搭建
测试期间VH6501需要和VH1630,PICOScope共同搭配使用,测试环境搭建图如下:
此处需要注意的是,由于我们ECU的硬件是带有高阻抗终端电阻,而VH6501是120欧终端电阻,两者阻抗不等效,需要在CAN线上再串联一个终端电阻,详细见下图
- 软件配置
打开软件后,选择CANoe的示例工程Disturbance Sample Point Test (CAN FD)
进入工程后,将 VH6501 通道分配给软件通道 CAN1,在下图所示界面设置 Mode 为 CAN,并勾选 Activate 选项使能 VH6501 总线干扰功能
VH6501 的采样点设置尽量靠前,确保优先干扰到 DUT 的采样点,此处BTL Cycles(指的是TQ数量,将一个位分为16个TQ) 和SJW(同步跳变宽度) 要选择数值较大的组合,可参考下图配置:
回到主界面,在Panel中点击Activate Sample Point Test就会得到测试结果
此时注意这时会出现两个测试结果,左图的测试结果69.09%是VH6501 逐步缩短 CRC Delimiter 位至该位宽度为224ticks(500K 通讯速率下标称位宽度为 320ticks)时 DUT 报错,即表明干扰到DUT 采样点,计算 224/320 得出的
但是这个结果并不是我们最终要获取的结果,我们还要加入1个TQ的同步段,按照我的理解解释下为什么要加入一个TQ?
根据CAN规范,每一个CAN位时间 (Nominal Bit Time,NBT)被分成4个时间段:同步段(Sync_Seg)、传播时间段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2),如下图所示:
一般为了编程方便会将传播段和相对缓冲段1合为时间段1,相对缓冲段2为时间段2,我们当前计算的69.09%只是只是时间段1/(时间段1+时间段2)的结果,此处程序会将ticks换算成TQ,再加入同步段的1个TQ,使用以下公式重新计算得到得到81.25%
采样点公式sample = ( 1 + CAN_BS1) / (1 + CAN_BS1 + CAN_BS2)
所有我认为81.25%才是我们要的结果
2.Busoff测试
测试原理
关于使用干扰仪制造Busoff故障,可以针对于某一帧进行干扰,也可以针对于某一位进行干扰,还可以将某一位分为若干个片,对某一片进行干扰,在采样点的测试中主要使用的是最后一种方法,此处我们将介绍一下如何对某一帧和某一位进行干扰
- .测试环境搭建
测试环境可以参考采样点测试环境,不过发报文的设备如果用CANoe的话,需要用CAPL在后台加一句on busoff {resetcan();},不然制造出Busoff故障虽然Trace会有错误帧出现,但是移除Busoff故障错误帧不会恢复,或者直接使用Kvaser代替canoe发出报文也可以测试此项
- .对特定的帧进行干扰
打开CANoe,选择另一个示例工程,Disturbance(CAN)
首先介绍对特定报文的干扰,选择FrameTrigger控件,该控件干扰的是 ack 位,触发 ID 默认是 100,用于产生 Bussoff, 修改 CAPL 中的触发 ID 的方法可以在 CAPL 脚本里面改
比如我们要对1F1报文进行干扰,就需要如下在CAPL中更改报文,更改后再使用Kavaser+Busmaster发送1F1报文,当Trace有报文出现时,点击干扰会出现错误帧
- 对某一帧中的位进行干扰
一般的位干扰可采用如下 MainConfigPanel 中的控件,点击Trigger Configuration进行触发条件配置
在打开的配置Panle中,选择干扰的触发域,这里选择干扰ACKslot举例
可在 CurrtriggerField 快捷设置触发的位信息,然后填入 0 或 1 为该位的触发条件(比如:上图将 CRCDEL 和 ACKSLOT 分别设置为 1 和 0,可用于产生错误帧的触发条件,进而影响错误计数器)
接下来设置干扰循环次数,每次循环干扰重复次数等信息(比如 Repetition 设置为100以上可以被正确采样并且Busoff_count+1,当Busoff_count>15时会设置DTC
之后按照如下配置序列参数
最后点击enable on device就会成功触发