网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

在车载控制器中,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-

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
工人坠亡赔偿约100万,因瞒报等被罚175万,老板抵押父亲房产证贷款缴罚金5年后被发现,不服处罚起诉被驳回

工人坠亡赔偿约100万,因瞒报等被罚175万,老板抵押父亲房产证贷款缴罚金5年后被发现,不服处罚起诉被驳回

大风新闻
2026-05-24 17:34:04
这次小米YU7不再神话了?现车销售,都没人买了?

这次小米YU7不再神话了?现车销售,都没人买了?

互联网.乱侃秀
2026-05-23 10:37:31
A股:紧急提醒2.5亿股民!从5月25日起,明天A股或将历史再次重演?

A股:紧急提醒2.5亿股民!从5月25日起,明天A股或将历史再次重演?

趋势清风侠
2026-05-24 10:45:06
活久见!因女生投诉男子光膀健身不雅,浙江一健身房禁止女性入店

活久见!因女生投诉男子光膀健身不雅,浙江一健身房禁止女性入店

火山詩话
2026-05-24 12:20:45
里克尔梅:老佛爷是皇马历史最好的主席,但皇马需开启新周期

里克尔梅:老佛爷是皇马历史最好的主席,但皇马需开启新周期

懂球帝
2026-05-24 20:40:46
【中超】克雷桑卡迪斯梅开二度 泰山3比3被三镇绝平

【中超】克雷桑卡迪斯梅开二度 泰山3比3被三镇绝平

体坛周报
2026-05-24 21:51:13
伊朗总统:准备向世界保证,伊朗不寻求拥有核武器

伊朗总统:准备向世界保证,伊朗不寻求拥有核武器

新华社
2026-05-24 20:20:19
2-1!王欣瑜拒绝爆冷,晋级法网次轮,奖金102万,中国金花开门红

2-1!王欣瑜拒绝爆冷,晋级法网次轮,奖金102万,中国金花开门红

体育就你秀
2026-05-24 19:40:43
“再不认罪命就没了”,5次审讯打断一条胳膊,报案人是杀人凶手

“再不认罪命就没了”,5次审讯打断一条胳膊,报案人是杀人凶手

易玄
2026-05-23 11:39:45
汶川地震中,丢了学生逃跑的老师“范跑跑”,18年后竟成了大赢家

汶川地震中,丢了学生逃跑的老师“范跑跑”,18年后竟成了大赢家

芳芳历史烩
2026-05-24 01:06:29
抢单了!中俄天然气谈崩

抢单了!中俄天然气谈崩

安安说
2026-05-24 15:18:06
科学证实:女人真正着迷的,不是身高和肌肉

科学证实:女人真正着迷的,不是身高和肌肉

月亮打烊了发
2026-05-24 00:20:54
新希望负债800亿,一头猪亏280元,低消费+高投资让实业内卷至死

新希望负债800亿,一头猪亏280元,低消费+高投资让实业内卷至死

知识圈
2026-05-24 20:40:19
全球100个最热城市,印度占98个!鲁比奥访印被热懵:太热了,我长话短说

全球100个最热城市,印度占98个!鲁比奥访印被热懵:太热了,我长话短说

红星新闻
2026-05-24 17:24:27
借账户炒股19年,不赚反亏476万!财达证券从业人员迟伟收25万元罚单

借账户炒股19年,不赚反亏476万!财达证券从业人员迟伟收25万元罚单

红星新闻
2026-05-24 13:54:45
太揪心了!山西煤矿矿难,有博主灵魂拷问:你们是干什么吃的!

太揪心了!山西煤矿矿难,有博主灵魂拷问:你们是干什么吃的!

丫头舫
2026-05-24 10:13:49
智胜特朗普?美媒酸了:中国这招,真“高”!

智胜特朗普?美媒酸了:中国这招,真“高”!

观察者网
2026-05-24 16:22:27
王鹤棣全网掉粉超20万!代言和作品遭抵制,路人缘崩塌难以挽回

王鹤棣全网掉粉超20万!代言和作品遭抵制,路人缘崩塌难以挽回

萌神木木
2026-05-24 11:50:12
邢台一别墅小区被举报有大量违建 官方:正梳理违建执法程序丨封面深镜

邢台一别墅小区被举报有大量违建 官方:正梳理违建执法程序丨封面深镜

封面新闻
2026-05-24 21:24:29
留神峪煤矿工人:连一双手套都没发过

留神峪煤矿工人:连一双手套都没发过

极目新闻
2026-05-24 20:08:34
2026-05-24 22:11:00
新能源自动驾驶 incentive-icons
新能源自动驾驶
专注于半导体行业资讯
982文章数 348关注度
往期回顾 全部

汽车要闻

2027款星途瑶光上市 把"全球车"标准卷进13万级市场

头条要闻

女子将2万多克黄金存珠宝店起纠纷:老板猥亵我和女儿

头条要闻

女子将2万多克黄金存珠宝店起纠纷:老板猥亵我和女儿

体育要闻

唐斯发牌,大头逆袭:骑士跌向残忍夏季

娱乐要闻

王鹤棣掉粉超20万!代言和作品遭抵制

财经要闻

什么情况下,本轮AI大行情会结束?

科技要闻

我戴着摄像头上班,正在帮AI抢走我饭碗

态度原创

亲子
教育
手机
本地
公开课

亲子要闻

优可丝的面料,像奶皮子一样软,长短也很合适。 杨雪呀

教育要闻

不是“双一流”,却深嵌产业链:这4所大学就业底气很足

手机要闻

5年持久流畅!vivo Y600 Turbo预热:支持30应用后台保活

本地新闻

用云锦的方式,打开江苏南京

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版