CAN总线

局部错误,全局通知是CAN总线错误类型中较为典型的一种,如何通过错误报文及波形快速定位错误原因呢?本文结合现场实测案例简要分析。

一、CAN总线错误简介

在CAN总线中存在5种错误类型,如图1所示:它们互相并不排斥,下面简单介绍一下它们的区别、产生的原因。

CAN总线局部错误及全局通知分析
图1:5种错误类型

位发送错误:向总线送出一位的某个节点同时也在监视总线,当监视到总线位的电平和送出的电平不同时,则在该位时刻检测到一个位错误。但是在仲裁区的填充位流期间或应答间隙送出隐性位而检测到显性位时,不认为是错误位。

位填充错误:在使用位填充方法进行编码的报文中(帧起始到CR序列),出现了第6个连续相同的位电平时,将检 测出一个填充错误。

CRC错误:CRC序列是由发送器CRC计算的结果组成的。接收器以和发送器相同的方法计算CRC。如果计算的结果和接收到的CRC序列不同,则检测出一个CRC错误。

格式错误: 当固定格式的位区中(如CRC认可位、ACK认可位、帧结束位)出现一个或多个非法位时,则检测到一个形式错误。

应答错误:在应答间隙,每一个接收端都会向总线回一个显性位,如果发送端在ACK场检测不到显性位应答,将产生应答错误。

当出现5种错误类型之一时,发送或接收节点将发送错误帧。其中错误帧 又分主动错误帧和被动错误帧。

主动错误帧由处于主动错误状态的节点发送 ,帧格式由主动错误标志(6个连续显性位)+错误标志叠加(0~6个连续显性位)+错误界定符(8个连续的隐性位)组成。主动错误帧格式如图2所示:

CAN总线局部错误及全局通知分析
图2 主动错误帧格式

被动错误帧由被动错误状态的节点发送,帧格式由被动错误标志(6个连续隐性位)+错误标志叠加(0~6个连续显性位)+错误界定符(8个连续的隐性位)组成。被动错误标志能够部分或全部被其它节点的显性位覆盖。如下:

CAN总线局部错误及全局通知分析
图3被动错误帧格式

二、什么是局部错误?

在整个CAN网络中,由于干扰等原因引起总线局部错误(即某一个CAN节点出错,其他节点正常),CAN总线上的主动报错站点首先检测到错误,并立即主动向总线上发出错误标识,通知其他未发现错误的节点,如图4所示:

CAN总线局部错误及全局通知分析
图4 错误帧的发送(局部错误)

检测错误—发送错误帧—通知报文错误:首先,发送节点检测到总线错误,发出错误标识——六个连续的显性电平位,总线接收到错误标识后进行全局通知——0~6个连续的显性电平位+8个连续的隐性电平位,告知其他节点总线错误。

三、局部错误,全局通知案例分析

某纯电动公交车,在启动车辆未启动电机时,总线报文成功率很高,基本没有错误帧,但在启动电机后,特别是踩气泵刹车时,每踩一次踩气泵就会涌现出较多的错误帧。整车的简单拓扑如图5所示:

CAN总线局部错误及全局通知分析
图5 整车通信简易拓扑

使用ZLG致远电子总线分析仪CANscope连接方向盘下的OBD接口测试,通过踩气泵刹车,产生了较多的错误帧,主要为填充错误和格式错误,分析错误帧波形如图6:

CAN总线局部错误及全局通知分析
图6 错误帧的波形图

从蓝色标记可以看到,ACK应答后,先有一个低台阶,再二次抬高的错误帧。

CAN总线局部错误及全局通知分析
图7 错误标志分析

CAN网络波特率为250 Kbps,即每个位为4us,由图7知,错误标志为7个显性位(主动错误标志+错误标志叠加)组成,二次抬高的6个连续显性电平,是局部错误后全局通知,各节点错误标志叠加造成的。也就是说车网络上有某一CAN节点较容易受到干扰,出现局部错误。

如何快速分析局部错误,定位干扰源呢?

由于是局部错误,干扰源在不同的测试点幅值是不同的,使用致远电子CANScope接入车前端的OBD接口和车尾部的电机控制器分别测试,结果如图8所示:

CAN总线局部错误及全局通知分析
图8 共模干扰对比

由上图所示,在OBD接口测试的共模幅值为700多mV,在电机控制器节点测试的共模幅值为1.3V左右,同时可看到周期性的干扰脉冲。通过对异常共模信号做FFT频谱分析,快速定位共模干扰频率,测试结果如图9所示:

CAN总线局部错误及全局通知分析
图9 共模干扰分析

测试出的干扰频率与电机驱动器频率吻合,推断为驱动器逆变产生的巨大电流形成强干扰,串扰到CAN总线上,导致距离其较近的节点出现局部错误。

局部错误,全局通知是一种常见的错误类型,如何快速定位到错误报文及其对应的波形是分析问题的关键,通过CANScope总线分析仪的报文接收和示波器,可将每一帧报文与波形做一一对应,快速分析报文及波形情况,实现CAN总线的快速故障定位和干扰排除。

来源: 快易购

围观 238

本文详细介绍了基于PIC单片机的CAN总线扩展技术,给出了CAN网关的硬件设计原理及软件设计框图,通过CAN网关增加了CAN总线的容量、提高了CAN总线的通信速率、扩展了CAN总线的传输距离。

CAN总线是一种串行多主站局域网总线,被广泛应用于汽车控制系统、自动控制、楼宇自动化、医学设备等各个领域。其传输距离远,最远可达10km,传输速率高,最高可达1Mb/s,容错性能好,可靠性能高。但是由于CAN驱动器的驱动能力有限,CAN总线能够驱动的节点数有限,一般在100个左右,同时会随着传输距离的增加,最高传输速率会下降,如果距离过长会引起信号丢失、反射等故障。在实验室条件下测得在5Kb/s的通信速率下最远通信距离能达到10km;在18Kb/s的通信速率下最远通信距离只能达到2km;而在42b/s的通信速率下,最远通信距离只能达到1km。测试条件:线缆采用线径为0.75mm2的屏蔽双绞线,线缆为盘装,室内测试。在实验中,发现随着随着通信距离的增加,通信速率迅速下降,而CAN总线的驱动节点数量也次第下降。而在通信距离远,通信节点多的大空间场所,比如矿井、电力监控等系统需要CAN总线来传输数据和监控信息的场所,CAN总线不能满足要求。

如果要实现通信距离远、通信速率高、总线节点数量多CAN总线系统,实现CAN总线的扩展,就需要一个CAN网关进行桥接,把CAN总线划分为几个子网,增加CAN总线通信节点,延长CAN总线的传输距离,提高CAN总线的传输速率。在研究基于PIC单片机的CAN网关设计和扩展的CAN总线网络拓扑结构。

1、CAN网关总体设计及总线拓扑结构

1.1 CAN网关总体设计

CAN网关作为一种转发设备,连接在两个不同的CAN网络中,能够实时接收来自两个子网中的信息,根据需要筛选或者无条件地把接收到的信息转发到另外一个网络中。CAN总线层次结构分为物理层、数据链路层和应用层,工作于ISO/OSI参考模式下。CAN网关在物理层和数据链路层完成两个CAN网的连接。CAN网关结构图如图1所示。

基于PIC单片机的CAN总线扩展技术

CAN网关可以作为透明网关和源路由网关。透明网关完全按照接收到的帧格式转发,不改变帧结构,对于用户,网关相当于透明的。而源路由网关由用户提供路由信息,网关按照路由信息对消息进行过滤和有选择性的转发。

1.2 CAN总线网络拓扑结构

带有网关的CAN网络拓扑结构如图2所示。在这个网路中,PC机为主节点,而CAN节点作为从节点。在网络的顶层,由PC机和网关构成一个主网,在这个主网中PC机和CAN网关作为CAN节点,总线驱动器驱动能力可以带100个cAN节点左右。主网中的CAN网关再作为下一个子网中的主节点,而其他CAN网关或是CAN节点作为从节点,构成一个子网。这样通过CAN网关可以逐环把网络扩展下去,直到最底层的CAN节点。而在应用层上,用户可以把网关配置成透明网关或是源路由网光。透明网关不影响网络结构,CAN拓展网络形成一个多节点,远距离的网络。源路由网关对消息具有过滤性,根据用户的配置信息把CAN网络在应用层上划分为几个小网。

基于PIC单片机的CAN总线扩展技术

这样,解决了节点容量、通信距离、通信速率的问题。

2、网关的硬件设计

硬件电路开发采用集成电路,开发周期短,成本低。CPU采用Microchip公司的16位单片机dsPIC30F6011作为核心部件,其内部集成了两个CAN控制器,支持CAN2.0A/B协议,CPU的速度可以达到30 MIPS,程序存储器空间有132 KB,内部RAM有6144B,数据程序存储器有2048B,集成的功能强大,体积小,性价比比较高。物理层采用两个CAN驱动器PCA82C250。其中一组的PCA82C250的RXD,TXD引脚不是和CPUdsPIC30F6011直接连接,而在中间用光速光藕6N137隔离。

单片机dsPIC30F6011有两个通用的UART口,可以作为和PC机或其他上位机通信的接口来用。另外,dsPIC30F6011采用TQPF封装64引脚,利用通用I/O驱动LED灯作为指示灯,预留并行液晶显示器和 4×4行列式键盘的接口。

CAN控制器和驱动器部分采用了光电隔离器,因此电源设计部分要求有两个隔离的5V电源。考虑到可以会用到液晶显示器,因此一路电源设计采用输出容量1A的开关电源LM9076,而另外一路采用隔离DC/DC模块电源。这样CAN子网之间实现了电气隔离,如果一个网络出了问题并不影响另外一个网络的正常工作,提高了CAN网络的抗干扰性能。硬件电路设计外围电路少、设计简单、成本低。设计的CAN网关硬件设计系统框图如图3所示。

基于PIC单片机的CAN总线扩展技术

3、网关的软件设计

CAN网关作为消息的转发器,要准确、实时地接收两个CAN发送的信息,并且要实时发出去。对于不断发出信息的问题节点要及时屏蔽,避免错误信息蔓延到另一个CAN网络。如果CAN网关被设置成透明网关则直接把一个CAN网络的信息转发到另外一个网络中即可,如果CAN网关被设置成和某个区间ID相关,则要做一些信息过滤和屏蔽处理。当CAN网关检测到总线有错误时,要通过备用的UART口将错误信息上发到上位机或其他信息处理主机。

CAN网关的信息接收通过硬件中断来完成。当总线上有消息时,引起硬件中断,进入中断程序后根据中断标志位的区别把接收到的信息存放到相应的缓冲区中。缓冲区是一个FIFO的存储区。而主程序则一直检测两个CAN控制器对应的两个接收缓冲区,当检测到缓冲区不为空时则把缓冲区内的信息顺序发送到另一个网络中。从而形成一个具有一定的错误检测能力的双向通道,完成了两个CAN网络的信息转发。CAN网关的主程序框图如图4所示,中断程序框图如图5所示。

基于PIC单片机的CAN总线扩展技术

基于PIC单片机的CAN总线扩展技术

4、结语

本文详细介绍了CAN总线扩展技术的网络拓扑结构和系统构成,给出了CAN网关的硬件设计原理及软件设计框图。这样的CAN总线扩展网络,因为引入CAN网关而增加了消息的传递时间,但是这个增加的时间很小,是微秒级的,可以忽略不计。而带来的优势明显,因为把CAN网络在物理层上划分为几个网络,彼此之间不相互影响,因而增加了CAN网络的抗干扰性,同时,扩展灵活,只需要增加一个CAN网关来增加子网即可;通信速率可通过增加网关来提高,通信距离可以扩展到很远。通过CAN网关增加了CAN总线的容量、提高了CAN总线的通信速率、扩展了CAN总线的传输距离。

转自: eefocus

围观 363

CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。因此波特率设置准确对CAN总线的稳定通信来说非常重要。

CAN总线里我们可以通过对CAN 节点里的位定时寄存器的控制来实现不同波特率的通信。CAN协议里将一个位时间分为同步段、传播段、相位缓冲段1和相位缓冲段2。每个段的时间长度都可以用一个整数的基本时间单位表示,该基本时间单位由系统的时钟振荡器分频得到。

同步段位于一个位的起始位置,CAN-bus规定跳变沿为同步信号,但是发送节点发送一个位跟接收节点接收到这个位之间存在网络传播延迟,传播段则是为了补偿这段传播延迟,由于采样点位置在相位缓冲段1跟相位缓冲段2之间,通过设置相位缓冲段1和相位缓冲段2的值,可以调整采样点位置,保证每个位采样点一致。缓冲段的长度调节范围则是由同步跳转宽度(SJW)决定。

CAN总线中特殊波特率如何计算?
图 1 CAN位时间结构图

简单的了解了CAN总线位时间的分段后,我们来看看一个节点的波特率到底要如何设置。如图2是某ARM内核的CAN位时间特性寄存器 (CAN_BTR)。

CAN总线中特殊波特率如何计算?
图 2 某ARM内核位时间特性寄存器结构图

SILM(静默模式)跟LBKM(回环模式)用于调试
SJW:同步跳转宽度
TS2/TS1:位时间里两个时间段的分配
BRP:波特率分频器,该区域定义了基本时间单元的长度
例如某著名车厂CAN通信标准里规定,通信速率为125 kbps时,应该采用单次采样,采样点位置设置在70%~77%之间。其位定时参数取值可见表1与表2。

CAN总线中特殊波特率如何计算?
表 1 LS_CAN通信速率与采样点参数

CAN总线中特殊波特率如何计算?
表 2 LS_CAN可选时间份额与同步跳转带宽

采样点:采样点不能太靠前也不能太靠后,否则如果刚好处于一个位的上升沿或者下降沿区间,会造成识别错误,所以根据CIA105的规范,采样点在87.5%左右比较合适。但是一般我们可根据实际情况选取75%~85%之间

同步跳转宽度(SJW):SJW的值直接影响到重同步时相位缓冲段的可调节的范围,SJW的值可以在1~4之间选择,我们选择3、4可以使总线获得更宽的波特率容忍度

采样次数:分为单次采样跟三次采样,三次采样在设计之初虽然是为了过滤掉总线上毛刺,但是采用三次采样经常会影响SJW的跳转,所以实际应用中我们一般都会采用单次采样。

了解设置波特率的原则后,我们采用ZLG的波特率计算软件,对25kbps波特率的设置参数进行计算,计算结果如图3。

CAN总线中特殊波特率如何计算?
图 3 25kbps波特率计算参数

根据上面提到的原则,我们选取采样点为75%,SJW为4,时间份额为14的一组参数,采用ZLG的CAN卡做验证。
l自动波特率识别:采用CANScope自动侦测波特率的功能,对CAN卡的波特率进行识别,识别结果为25k

CAN总线中特殊波特率如何计算?
图 4 自动侦测波特率

l采样点测试:采用CANScope对当前波特率下CAN卡的采样点进行测试,测试结果为75%

CAN总线中特殊波特率如何计算?
图 5 采样点测试

l位宽容忍度测试:采用CANScope对当前波特率下CAN卡进行位宽容忍度测试,测试其对波特率的容忍度情况,测试结果为24kbps~26kbps,容忍度情况较好

CAN总线中特殊波特率如何计算?
图 6 位宽容忍度测试

l位时间测试:用CANScope的眼图功能对当前波特率下CAN卡进行位时间测试,位时间为40us,与25kbps波特率的位时间相符。

CAN总线中特殊波特率如何计算?
图 7 眼图测试位时间

通过对波特率计算器计算出来的波特率寄存器设置参数进行验证,发现测试结果跟我们的预期结果一致,因此在使用特殊波特率时,我们可以借助波特率计算器来快速计算出位定时寄存器的参数值。下面我们给出一些可参考的特殊波特率的参数:
CAN总线中特殊波特率如何计算?

来源: nxp社区

围观 577

页面

订阅 RSS - CAN总线