0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FlexCAN 的基本使用方法及特性

灵动MM32MCU 来源:灵动MM32MCU 作者:灵动MM32MCU 2022-07-22 11:28 次阅读

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

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

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

450ead42-08cf-11ed-ba43-dac502259ad0.png

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

物理层一致性测试

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

1.1 终端电阻测试

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

452c1044-08cf-11ed-ba43-dac502259ad0.png

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

终端电阻的作用:

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

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

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

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

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

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

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

45725e6e-08cf-11ed-ba43-dac502259ad0.png

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 标准,如下表描述:

4592dcb6-08cf-11ed-ba43-dac502259ad0.png

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

45bcb766-08cf-11ed-ba43-dac502259ad0.png

1.3 跳变沿时间测试

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

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

45e721e0-08cf-11ed-ba43-dac502259ad0.png

MM32F0140 实测通信质量:

46156046-08cf-11ed-ba43-dac502259ad0.png

数据链路层一致性测试

该项测试覆盖的内容主要用于保证各个节点的通讯参数能够保持一致性,所组成的网络能够正常有效的工作,除了评估板级使用到的元器件参数,更多的还涉及到 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 的位时间精度功能实测,可以得出以下结果:

4623cd98-08cf-11ed-ba43-dac502259ad0.png

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

2.2 采样点测试

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

464977a0-08cf-11ed-ba43-dac502259ad0.png

46732b0e-08cf-11ed-ba43-dac502259ad0.png

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

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

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

4685e848-08cf-11ed-ba43-dac502259ad0.png

更改后,其它按照默认配置,则采样点设置成了 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% :

46b7eb54-08cf-11ed-ba43-dac502259ad0.png

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

46e4d164-08cf-11ed-ba43-dac502259ad0.png

470d8a3c-08cf-11ed-ba43-dac502259ad0.png

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

TSEG1 +1 = phaseSeg1 + propSeg

TSEG2 + 1 = phaseSeg2

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

2.3 其它测试

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

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343676
  • 示波器
    +关注

    关注

    111

    文章

    5661

    浏览量

    181790
  • CAN网络
    +关注

    关注

    1

    文章

    42

    浏览量

    16777

原文标题:灵动微课堂 (第223讲) | MM32F0140 FlexCAN一致性测试 (1)

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    转:第9章 IAR中的FreeRTOS插件使用方法

    ,STM32F407和STM32F429来说,设置方法都是一样的。9.2IAR中FreeRTOS插件的使用方法 使能IAR的FreeRTOS特性比较简单,通过下面三个步骤就可以完成:u 第1步:使能
    发表于 08-23 09:51

    SPC560Dxx FlexCAN传输错误

    我正在使用SPC560D-DIS Discovery板进行开发和SPC5工作室。 我已经为FlexCAN测试导入了测试应用程序'SPC560Dxx OS-Less CAN Test
    发表于 11-22 10:36

    高压开关动特性测试仪使用方法是怎么样的?

    不管在选择任何一种检测仪器时肯定都需要提前了解一下它的具体使用方法是怎样的,然后在使用时才能够凸显出它的高价值,而对于选择高压开关动特性测试仪来说也是如此。很多人都了解高压开关动特性测试仪,对整个
    发表于 08-20 14:50

    磁性传感器有什么特性,特征和使用方法

    以磁性开关传感器IC(AS系列)为例,来分析磁性传感器有什么特性,特征和使用方法
    发表于 04-07 06:21

    STM32H7系列单片机IO的功能特性使用方法

    本篇主要介绍STM32H7系列单片机IO的功能特性使用方法,本篇博客分为功能介绍、cubemx界面介绍、hal库函数功能说明、例程Demo四部分。
    发表于 08-16 08:49

    了解集成稳压电路的特性使用方法

    参数测试仿真图图 2图15.2仿真图图 3图15.3仿真图图 4 图15.4仿真图图 5图15.5仿真图一、实验目的1.了解集成稳压电路的特性使用方法。2.掌握直流稳压电源主要参数测试方法。二、实验仪器1.示波器2.数字万用表
    发表于 11-12 09:23

    Gowin DDR Memory Interface IP特性使用方法

    Gowin DDR Memory Interface IP用户指南主要内容包括 IP 的结构与功能描述、端口说明、配置调用、参考设计等。主要用于帮助用户快速了解 GowinDDR Memory Interface IP 的产品特性使用方法
    发表于 10-08 08:03

    示波器的使用方法

    示波器的使用方法 1 示波器使用        本节介绍示波器的使用方法。示波器种类、型号很多,功能也不同。
    发表于 01-14 13:06 1.8w次阅读

    示波器的使用方法

    数字万用表使用方法和示波器的使用方法详解。
    发表于 03-14 10:38 31次下载

    xilinx 原语使用方法

    xilinx 原语使用方法
    发表于 10-17 08:57 11次下载
    xilinx 原语<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 2484次阅读

    FlexCAN一致性测试方案

    一直关注我们灵动微课堂的朋友们,想必通过前面的介绍已经掌握了 FlexCAN 的基本使用方法,也能够在自己的方案中运用自如了。今天小编想和大家借助 ZLG 的CAN Scope工具了解我们这颗 MCU 的 CAN 的特性,看看在
    的头像 发表于 07-22 11:24 1025次阅读

    一文浅谈FlexCAN OTA

    FlexCAN OTA
    的头像 发表于 09-27 16:17 553次阅读
    一文浅谈<b class='flag-5'>FlexCAN</b> OTA

    MM32F0140 FlexCAN一致性测试 (2)

    MM32F0140 FlexCAN一致性测试 (2)
    的头像 发表于 11-10 18:23 384次阅读
    MM32F0140 <b class='flag-5'>FlexCAN</b>一致性测试 (2)

    MM32F0140 FlexCAN一致性测试(1)

    MM32F0140 FlexCAN一致性测试 (1)
    的头像 发表于 11-10 17:50 273次阅读
    MM32F0140 <b class='flag-5'>FlexCAN</b>一致性测试(1)