FlexCAN一致性测试方案

描述

一直关注我们灵动微课堂的朋友们,想必通过前面的介绍已经掌握了 FlexCAN 的基本使用方法,也能够在自己的方案中运用自如了。今天小编想和大家借助 ZLG 的CAN Scope工具了解我们这颗 MCU 的 CAN 的特性,看看在汽车 ECU 应用上它是如何保证通讯的鲁棒性。

在整车网络调试中,各节点遵循 CAN 一致性测试是保证总线的稳定运行的重要前提, 当前CAN一致性测试已经电动汽车行业的必然趋势!

据了解,应用到 CAN 的 ECU 在实际装车之前都需要经历一系列的一致性测试方能保证整车通讯的稳定,每家车厂除了遵循 ISO 标准,他们也都有自己的规约和检测流程,但测试项目不外乎都包含在以下表中:

CAN

以上测试项中的被测内容,有些是属于板级设计阶段需要重点关注的,有些是与 MCU 本身功能和性能密切相关的,接下来我们分层剖析。

 

 

物理层一致性测试

 

该项测试主要针对各个节点 ECU 板级层面的电阻、电容特性,节点自身差分电阻以及总线终端电阻和CAN 通信物理电平做出充分评测,以验证 CAN 节点与系统网络在电路设计、物理电平等方面的性能。

 

1.1  终端电阻测试

 

在高速 CAN 通讯应用中,我们时常会看到信号出现反射、过冲、振铃等异常的现象,根据电磁场和微波理论分析,高频电路中负载阻抗需与传输线缆的特性阻抗一致,否则电信号在线束终端容易遭遇阻抗突变,发生反射现象,造成波形震荡,这将造成信号串扰、总线紊乱以及消息丢失等诸多通讯故障。下图为典型的信号振铃波形图:

CAN

所以在差分 CAN 网络中,终端匹配电阻是必不可少的器件,它一般安装在双绞线缆的 2 端,依照总线的拓扑结构而准确定位,需选择线束最远距离的 2 个节点处。

终端电阻的作用:

1.加快放电,使总线快速进入隐性状态,提高抗干扰能力。

2.消除阻抗不连续和不匹配,提高信号质量。

终端电阻的存在,一方面能提高总线抗干扰能力,让高频低能量的信号迅速泄放,一方面能确保总线快速进入隐性状态,让寄生电容的能量更快泄放,另一方面还能提高信号质量,降低了线缆上的反射能量。

终端电阻过小会造成信号幅值偏小,信号在采样时无法辨别高低电平,导致整个网络数据混乱,有时可以通讯,但极不稳定。

终端电阻过大会造成信号幅值偏大,驱动力过大,信号出现过冲现象,信号下降沿过缓,下降沿时间过长,严重的情况直接导致总线错误。

一般终端电阻的实际阻值选择需要根据实测得到,因为它受任何一根线缆的特征阻抗(这里包括系统的容抗+感抗)所影响。

CAN

有个粗犷的测试手法:采用两根汽车使用的典型线缆扭制成双绞线,线缆的一端接方波发生器,另一端接可调电阻,并通过示波器观察电阻上的波形,调整电阻阻值的大小,直到电阻上的信号是一个良好的无振铃的方波,此时的电阻值可以认为与线缆的特征阻抗一致从而得到匹配电阻的阻值数据。另外也可以直接找到车上的通讯线缆用万用表实测。终端电阻阻值和功率的选择在 ISO 11898-2 标准里面也有定义,可以作为首选参考。

CAN  

1.2  显、隐性输出电压测试

 

CAN 总线设计规范对于 CAN 节点的输出电压有着严格的规定, 单个节点的输出电压如果不符合规范,则在现场组网后容易出现信号电平不可靠的情况,导致错误帧的出现,各节点间无法进行通信。

差分电压值决定了 CAN 的显、隐性位(显性电平的差分电平为高,TTL 逻辑电平为低;隐性电平的差分电平为低,TTL 逻辑电平为高),而 CAN_H / CAN_L 电压情况又由收发器芯片的质量决定。

在数据传输的空闲期间 CAN 总线差分电压为 0v,CAN_H / CAN_L 对地电压为 2.5v ,这个电压标准也不是绝对的,但一般 CAN_H高于 2.5v,CAN_L 低于 2.5v,两者加起来约为 5v 即算作正常。对于 CAN 信号电平有两套不同标准做了界定, ISO 11898 高速 CAN 标准和 ISO11519-2 低速容错 CAN 标准,如下表描述:

CAN

需要使用示波器多次测量 CAN 总线空闲时期以及通讯时期的显性位的 CAN_H 和 CAN_L 电压值,来分析电平情况是否满足标准要求,同时也可检测出收发器芯片是否存在故障,下图为实际抓取的测试图:

CAN

 

 

1.3  跳变沿时间测试

 

主要为测试 ECU 的差分电平在隐性电平到显性电平、显性电平到隐性电平变化的时间,需要在指定的波特率条件下进行测试,接线长度需小于1米,波特率为 250k 的情况下进行通信,且将差分电平的上升、下降时间的起始点定为电压值的 20%~80% 的区间处,即从隐性到显性状态过渡的上升时间起始点为差分电压的 20% 处,终止点为差分电压的 80% 处;从显性向隐性状态过渡的下降时间起始点为差分电压的 80% 处,终止点为差分电压的 20% 处。

简单测量时可以选用示波器直接抓取波形测试,但一般需要每个边沿至少测量 1000 次,以确定边缘上升/下降时间的最小值和最大值,数据才更为可靠,这就需要使用专业的 CAN 测试仪器了,比如 CAN Scope、PICO Scope 等等。跳变沿的时间需要遵循 GMW3122 信号边沿标准:

CAN

MM32F0140 实测通信质量:

CAN

 

 

数据链路层一致性测试

 

该项测试覆盖的内容主要用于保证各个节点的通讯参数能够保持一致性,所组成的网络能够正常有效的工作,除了评估板级使用到的元器件参数,更多的还涉及到 FlexCAN底层驱动库的调试,不同寄存器配置所带来的影响是非常直观的。

 

2.1  位时间测试

 

汽车 CAN 总线设计规范对于 CAN 节点的差分信号位时间(即波特率)有着严格的规定,同一总线上每个节点的信号位时间必须保持较高的一致性,否则节点组合到一起后,会导致错误帧的出现,各节点间无法进行通信。

位时间偏差主要发生在如下情况:使用了非整数值的晶振(比如 11.0592MHZ)、极端温度导致晶振偏差、CAN 控制器内部波特率发生器偏差。针对MCU的晶振器件选型包括晶振电路的调试在我们另外的文档中进行介绍,本次位时间测试是在已经调试好晶振电路的电路上进行验证测试。

MM32F0140 系列的 FlexCAN控制器将一个位时间分为同步段、传播时间段、相位段1、相位段2等若干个 Tq 时间序列,每个段所占的 Tq 数可根据对应寄存器所配置,合理配置位时序的 Tq 数极为重要,具体可以参照 UM 手册中 23.3.10.4 协议时序章节描述去理解每个段和 Tq 配置。

官方驱动例程中,选取的系统时钟源为 HSI 倍频到 72M,再经过 2 分频后得到 CAN 系统时钟(CHI) 36M,也就是 FlexCAN通信时钟源中的同步时钟(MM32F0140 系列只能选择该时钟源,而不能选择外部晶振作为时钟源,即 PE 时钟等于 CHI 时钟),由于内部时钟精度要比外部晶振低,所以在测试位时间时需要将 RCC 时钟外设改写配置,选择 HSE 倍频到 72M 其它不变。其它按照默认配置,得到的波特计算公式为:

Baud = Fsclock / (CAN_CTRL1.PSEG1+ CAN_CTRL1.PSEG2 + CAN_CTRL1.PROPSEG+ 4) 

Fsclock = Fcanclk / (CAN_CTRL1.PRESDIV+1)

Fsclock 为 FlexCAN串行时钟频率, Fcanclk 为 PE 时钟频率,即为 CHI 时钟频率 Fsys

通过以上公式计算得出波特率为 500KHz,与实际程序配置是相符合的。位时间计算公式为:

Tcanbit = 1 / Baud

通过以上公式计算得出位时间为 2us,FlexCAN最小时间单元 Tq 个数为 canTiming[0].timeQuanta = 8(即为 canTiming[0] 中的 PROPSEG/PSEG1/PSEG2 之和再加1),Tq 时长计算公式为:

Tq = Tcanbit / Tq num

Tq = (CAN_CTRL1.PRESDIV+1) / Fsys

通过以上 2 公式都可以计算得 Tq 时间为 0.25us。经过理论计算后,需要实际使用示波器抓取一个位波形来测量位时间宽度,一般需要多次测量一帧数据中的位宽波形直至超过 100 次,或者截取一串数据帧中偏差最大的那一帧总时长再除以位数即可得出位时间,再或者就是直接使用 CAN Scope 的位时间精度功能实测,可以得出以下结果:

CAN

官方驱动中的 SJW 默认设置为 1 ,在实际允许的容忍偏差范围内,可以自行调整该参数,一般建议设置为 2~3 个 Tq 。

 

2.2  采样点测试

 

除了精准的波特率,采样点位置的匹配同样是要求即为严苛的,在不同的标准中对采样点要求各不相同,而且不同车厂对采样点的设置、时钟源的需求以及每个段所占的 Tq 数也都是不尽相同的。下图展示了 CiA 推荐的数据场采样点位置范围:

CANCAN

在汽车工程师协会 SAE  class C 标准中将高速总线波特率定为 125K ~ 1 M 范围,中、低速总线波特率定为 125K 以下范围,高速总线推荐使用单次采样模式,而中低速总线推荐 3 倍采样模式。

网络中节点采样点的不一致会导致同样的采样频率出现采样错误,进而使整车网络出现故障问题,影响整车环境稳定。

官方例程中默认使用的 3 倍采样,且 CAN Scope 仅支持单次采样模式,所以需要按照以下方式修改采样点模式:

CAN

更改后,其它按照默认配置,则采样点设置成了 75% ,采样点计算公式如下:

Sample-Point = (1 + (canTiming[0].propSeg + canTiming[0].phaseSeg1)) / (1 + (canTiming[0].propSeg + canTiming[0].phaseSeg1) + (canTiming[0].phaseSeg2))

Sample-Point = (1 + (CAN_CTRL1.PROPSEG + CAN_CTRL1.PSEG1+2)) /

(1 +(CAN_CTRL1.PROPSEG+CAN_CTRL1.PSEG1+2) + (CAN_CTRL1.PSEG2+1))

清楚采样点计算公式后,实际使用 CAN Scope 的采样点计算功能测试真实采样点,需要注意,在上位机设置中需要将终端电阻选择为 60Ω ,且在采样点设置向导中需要勾选输入 TQS 并且设置 ABT TQS 总个数(这里与默认配置一致,即为 8),实际测试得出真实采样点精度偏差小于 0.5% :

CAN

由于例程中不能涵盖所有需要的采样点,这里推荐使用 ARM 波特率计算器来计算出实际需要填写的各个寄存器参数,按照下图中的配置可以得出实测的采样点为 83%,落在设置的要求范围内:

CANCAN

计算器中的参数与程序中位时序配置的对应关系如下:

TSEG1 +1 = phaseSeg1 + propSeg

TSEG2 + 1 = phaseSeg2 

系统时钟 9M = PE 时钟 / preDivider

 

2.3  其它测试

 

报文 DLC 测试实际上可以通过具有数据解析功能的 CAN 工具来进行测试,主要评估 ECU 发送和接收报文的正确性。关于负载监测和压力测试,可以评估 ECU 处理紧急包的能力,理论上 CAN 是可以满负载运行工作的,这也是 CAN 的优势所在,但一般情况下会需要保证运行在 30% 以下的负载率。

  审核编辑:汤梓红


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分