只发CAN相关1 随时更新~~   

不知道能在车联网这做什么 ~ 先发了再说 ~ 说着也做车联网不知道后面什么情况~~

一、介绍CAN总线基础知识

1. CAN协议

1.1 CAN协议简介

    CAN是是国际上应用最广泛的现场总线之一。

    最终成为国际标准(ISO11519以及ISO11898),差异点如下:

嵌入式~CAN-专辑1_筛选器

1.2 CAN物理层

    CAN通讯不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和 CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。CAN 物理层的形式主要有两种:

  • 遵循ISO11898标准的高速、短距离闭环网络,总线最大长度为40m,通信速度最高为 1Mbps,总线的两端各要求有一个120欧的电阻
  • 是遵循ISO11519-2标准的低速、远距离开环网络,最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻

嵌入式~CAN-专辑1_寄存器_02

差分信号又称差模信号,差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1,CAN中显性电平(差值为正)对应逻辑0,隐性电平(差值小于或等于0)对应逻辑1,显性电平比隐性电平更强。 

嵌入式~CAN-专辑1_寄存器_03

1.3 CAN协议层

    CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,CAN使用位同步的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

    位时序分解:

    为了实现位同步,CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,一个完整的位由8~25个Tq组成。

嵌入式~CAN-专辑1_嵌入式硬件_04

 波特率:

    总线上的各个通讯节点只要约定好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率。

    例如,假设上图中的 1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据需要时间 T1bit=19us,从而每秒可以传输的数据位个数为:1x10次方/19 = 52631.6 (bps)。这个每秒可传输的数据位的个数即为通讯中的波特率。

    同步过程:

    波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,此时就要用到数据位内的SS、PTS、PBS1及PBS2段了。根据对段的应用方式差异, CAN的数据同步分为硬同步和重新同步。其中硬同步只是当存在帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题。

    硬同步:

    CAN节点通过总线发送数据时,会发送一个帧起始信号。而挂载到CAN总线上的节点在不发送数据时,会时刻检测总线上的信号。如下图,当总线出现帧起始信号时,节点检测到总线的帧起始信号不在节点内部时序的 SS 段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得的数据是不正确的。所以节点以硬同步的方式调整,把自己的位时序中的 SS 段平移至总线出现下降沿的部分,获得同步,同步后采样点就可以采集得正确数据了。

嵌入式~CAN-专辑1_寄存器_05

重新同步:

    前面的硬同步只是当存在帧起始信号时才起作用,如果在一帧很长的数据内,节点信号与总线信号相位有偏移时,这种同步方式就无能为力了。因而引入重新同步方式,它利用普通数据位的高至低电平的跳变沿来同步。与硬同步方式相似的是它们都使用 SS 段来进行检测,同步的目的都是使节点内的 SS 段把跳变沿包含起来。重新同步分为超前和滞后两种情况,以总线跳变沿与 SS 段的相对位置进行区分。

    -- 相位超前:

    节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步

    -- 相位滞后:

    节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度,获得同步

嵌入式~CAN-专辑1_寄存器_06

 报文种类及结构:

    对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文。CAN一共规定了5种类型的帧。

嵌入式~CAN-专辑1_筛选器_07

   其他报文结构: 

嵌入式~CAN-专辑1_寄存器_08

2. CAN控制器

    STM32 的芯片中具有bxCAN控制器,支持CAN协议2.0A和2.0B标准。该CAN控制器支持最高的通讯速率为1Mb/s;可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;外设中有3个发送邮箱,发送报文的优先级可以使用软件控制,还可记录发送的时间;有2个3级深度的接收FIFO,可使用过滤功能只接收或不接收某些ID号的报文;可配置成自动重发;不支持使用DMA进行数据收发。框架示意图如下:

嵌入式~CAN-专辑1_嵌入式硬件_09

STM32有两组CAN控制器,其中CAN1是主设备,框图中的存储访问控制器是由CAN1控制的,CAN2无法直接访问存储区域,所以使用CAN2的时候必须使能CAN1外设的时钟。框图中主要包含CAN控制内核、发送邮箱、接收FIFO以及验收筛选器,下面对框图中的各个部分进行介绍。

2.1 CAN控制内核

    主控寄存器CAN_MCR:

    负责管理CAN的工作模式。

嵌入式~CAN-专辑1_嵌入式硬件_10

 INRQ位:用来控制初始化请求,在CAN初始化时,先设置该位为1,进行初始化,之后再设置该位为0,让CAN进入正常工作模式。

    位时序寄存器CAN_BTR:

    用于配置测试模式、波特率以及各种位内的段参数。

嵌入式~CAN-专辑1_筛选器_11

CAN波特率的计算公式:

    只需要知道BS1和BS2的设置,以及APB1的时钟频率,就可以方便的计算出波特率。比如设置TS1=9、TS2=5和BRP=6,在APB1频率为45Mhz的条件下,即可得到CAN通信的波特率=45000/6/(5+9+1)=500Kbps。

嵌入式~CAN-专辑1_嵌入式硬件_12

2.2 CAN发送邮箱

    CAN 共有3个发送邮箱,即最多可以缓存3个待发送的报文。每个发送邮箱中包含有标识符寄存器CAN_TIxR、数据长度控制寄存器CAN_TDTxR及2个数据寄存器CAN_TDLxR、CAN_TDHxR,如下图。

嵌入式~CAN-专辑1_筛选器_13

 当使用CAN外设发送报文时,需要把报文的各个段分解,按位置写入到这些寄存器中,并对标识符寄存器CAN_TIxR中的发送请求寄存器位TMIDxR_TXRQ置1,即可把数据发送出去。其中标识符寄存器CAN_TIxR中的STDID寄存器位比较特别。我们知道CAN的标准标识符的总位数为11位,而扩展标识符的总位数为29位的。当报文使用扩展标识符的时候,标识符寄存器CAN_TIxR中的STDID[10:0]等效于EXTID[18:28]位,它与EXTID[17:0]共同组成完整的29位扩展标识符。

    发送邮箱标识符寄存器CAN_TIxR:

嵌入式~CAN-专辑1_筛选器_14

嵌入式~CAN-专辑1_标识符_15

2.3 CAN接收FIFO

    CAN 共有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收到的报文。当接收到报文时,FIFO的报文计数器会自增,而STM32内部读取FIFO数据之后,报文计数器会自减,通过状态寄存器可获知报文计数器的值,而通过前面主控制寄存器的RFLM位,可设置锁定模式,锁定模式下FIFO溢出时会丢弃新报文,非锁定模式下FIFO溢出时新报文会覆盖旧报文。跟发送邮箱类似,每个接收FIFO中包含有标识符寄存器CAN_RIxR、数据长度控制寄存器CAN_RDTxR及2个数据寄存器CAN_RDLxR、CAN_RDHxR,它们的功能见下表。

嵌入式~CAN-专辑1_标识符_16

通过中断或状态寄存器知道接收FIFO有数据后,我们再读取这些寄存器的值即可把接收到的报文加载到STM32的内存中

    接收FIFO邮箱标识符寄存器CAN_RIxR:

嵌入式~CAN-专辑1_寄存器_17

 接收FIFO邮箱高字节数据寄存器CAN_RDHxR:

嵌入式~CAN-专辑1_寄存器_18

2.4 CAN验收筛选器

    AN 验收筛选器,共有28个筛选器组,每个筛选器组有2个寄存器,CAN1和CAN2 共用筛选器。CAN协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作,STM32的CAN外设接收报文前会先使用验收筛选器检查,只接收需要的报文到FIFO中。筛选器工作的时候,可以调整筛选ID的长度及过滤模式。

    根据筛选ID长度来分类有有以下两种:

  • 检查 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位,共 31 位
  • 检查 STDID[10:0]、RTR、IDE 和 EXTID[17:15],共 16 位

    根据过滤的方法分为以下两种模式:

  • 标识符列表模式,它把要接收报文的 ID 列成一个表,要求报文 ID 与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
  • 掩码模式,它把可接收报文 ID 的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码 (关键字) 相同,就符合要求,报文就会被保存到接收 FIFO

    通过配置筛选模式寄存器CAN_FM1R的FBMx位可以设置筛选器工作在哪个模式。通过配置筛选尺度寄存器CAN_FS1R的FSCx位可以设置筛选器工作在哪个尺度。不同的尺度和不同的过滤方法可使筛选器工作在图的 4 种状态。

嵌入式~CAN-专辑1_寄存器_19

  每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码,各个寄存器位代表的意义与图中两个寄存器下面“映射”的一栏一致,各个模式的说明见表。 

嵌入式~CAN-专辑1_嵌入式硬件_20

  例如下面的表格所示,在掩码模式时,第一个寄存器存储要筛选的ID,第二个寄存器存储掩码,掩码为1的部分表示该位必须与ID中的内容一致,筛选的结果为表中第三行的ID值,它是一组包含多个的ID值,其中x表示该位可以为1可以为0。

嵌入式~CAN-专辑1_标识符_21

而工作在标识符模式时,2个寄存器存储的都是要筛选的ID,它只包含2个要筛选的ID值 (32位模式时)。如果使能了筛选器,且报文的ID与所有筛选器的配置都不匹配,CAN外设会丢弃该报文,不存入接收FIFO。

    过滤器模式寄存器CAN_FM1R:

嵌入式~CAN-专辑1_嵌入式硬件_22

    过滤器激活寄存器CAN_FA1R:

嵌入式~CAN-专辑1_嵌入式硬件_23

二、CAN总线不加终端电阻,会出现什么后果

在进行CAN总线通信前,应保证正确的总线配置,比如终端电阻。它是影响总线通信的重要组件,下面我们不考虑信号的完整性,只从信号幅度和时间常数方面分析不加终端电阻时的影响。

终端电阻添加要求

根据ISO11898-2对终端电阻的取值规定,必须在总线的首尾两端各挂一个120Ω的终端电阻,即总线上加60Ω的终端电阻,而中间节点则不需要挂终端电阻,如图1所示。

嵌入式~CAN-专辑1_标识符_24

图1  终端电阻

不加终端电阻时的影响

如图2所示,假如我们按照ISO11898标准要求,使用CANScope测试时,加上60Ω的终端电阻,然后以250Kbps的波特率自发自收数据,可以看到报文可以正常发送,且关联的波形也正常。

嵌入式~CAN-专辑1_标识符_25

图2 加终端电阻CANScope自发自收现象假如CANScope在不加终端电阻的时候,以250Kbps的波特率自发自收数据,如图3所示,发送的数据都是帧ID错误,且关联的波形也出现异常。

嵌入式~CAN-专辑1_筛选器_26

图3 未加终端电阻CANScope自发自收现象

对于报文数据,从关联的波形数据可以看到,上升沿没有任何问题,但是下降沿相对于加终端电阻的波形缓慢很多,一直未达到隐性状态,这些是为什么呢?下面我们对其进行一一的解析。

1、为什么影响下降沿?

众所周知,CAN总线的传输方式是差分传输方式,而总线电平的判断,就是CAN收发器根据CANH和CANL线缆之间的差分电压(CANH-CANL)来判断的,总线上传输的电平信号只有两种可能,一是显性电平,二是隐性电平,其中显性电平代表逻辑0,隐性电平代表逻辑1。

首先我们看一下CAN收发器的内部结构,如图4所示:

嵌入式~CAN-专辑1_寄存器_27

图4 CAN收发器内部结构

当总线电平为显性时,收发器内部的Q1、Q2处于导通状态,此时CANH、CANL之间会产生压差;当总线电平为隐性时,收发器内部的Q1、Q2处于截止状态,此时CANH、CANL处于无源状态,压差为0。

所以当隐性状态变为显性状态(上升沿)时,主要由收发器中的驱动模块作用,当显性状态变为隐性状态(下降沿)时,是通过整条总线与终端电阻放电产生的,所以总线的终端电阻是影响下降沿缓慢程度的主要物理因素。

2、下降沿为什么迟迟达不到隐性状态?

前面提到,下降沿缓慢程度,受终端电阻的影响,是如何影响的,那这就和时间常数τ有关系了。我们知道,时间常数可由电容(C)和负载电阻(R)确定,即τ=RC,所以当总线上无终端电阻时,CANH和CANL之间的阻值很大,例如CANScope,在未加终端电阻时,测量的电阻值,约91KΩ左右,所以根据时间常数的公式,τ值会很大,所以无法快速消耗掉总线上寄生电容上的电能,从而导致下降沿缓慢,迟迟达不到隐性状态。

嵌入式~CAN-专辑1_寄存器_28

图5 RC电路

3、为什么会产生错误帧?

如图6所示,是图3对应的示波器截图,从图中看出,当光标区域的ΔX为一个位,即4us时,差分信号在光标B处的电压YB为3.341V,远高于CAN规范中的隐性电平判断上限值0.5V,显性电平判断下限值0.9V,所以此时的位被判断为显性位,而又由于时间常数远大于250Kbps波特率下的位时间,所以会有超过5个位被判断为显性位,从而破坏了CAN规范中的填充规则,出现了帧ID填充错误。

嵌入式~CAN-专辑1_寄存器_29

图6 250Kbps波特率波形细节

为了加深对错误帧产生原因的了解,我们举一个反例,看位时间远大于无终端电阻情况下的时间常数时,会出现什么样的现象。

下面以CANScope不加终端电阻,波特率为10Kbps进行自发自收为例,如图7所示,CANScope报文列表中,无错误帧产生。

通过观察同步的示波器截图,如图8所示,光标区域ΔX为45.6us时,差分信号在光标B处的电压YB为0.4813V,又由于CANScope默认的采样点是75%在光标区域之后,所以此时可正常判断该位为隐性,从而不会导致错误帧的产生。

嵌入式~CAN-专辑1_嵌入式硬件_30

 图7 10Kbps波特率发送报文

嵌入式~CAN-专辑1_筛选器_31

图8 10Kbps波特率波形细节

终端电阻添加的方法

在使用CANScope作为测量设备时,除了用户自己外部添加终端电阻的方法外,还可以通过软件配置给被测节点或网络添加终端电阻,其添加的方法,会根据不同的PORT头配件,选择不同的配置方法。

当使用标配件P8251T、P1040T时,勾选图9中的启用终端电阻,即可在总线上添加120Ω的终端电阻;当选配件使用StressZ时,如图10中的RHL,可根据需要设置对应的终端电阻。

嵌入式~CAN-专辑1_标识符_32

 图9 标配件P8251T、P1040T终端电阻设置

嵌入式~CAN-专辑1_筛选器_33

 图10 选配件StressZ终端电阻设置

信号反射 

在电路中,信号反射是指信号在传输线或电路中遇到阻抗不匹配导致部分信号被反射回去的现象。这种反射会引起信号的失真和干扰,对电路的性能和可靠性产生负面影响。

至于为什么会反射,这里引用《信号完整性与电源完整性分析第三版》原文(有省略)的分析:

“为什么信号遇到阻抗突变时会发生反射?答案是:产生反射信号时为了满足两个重要的边界条件。

必须记住,信号到达瞬时阻抗不同的两个区域(区域1,区域2)的交界面时,在信号-返回路径的导体中仅存在一个电压和一个电流回路。在交界面处,无论时从区域1还是从区域2看过去,在交界面两侧的电压和电流都必须相等。边界处不可能出现电压不连续,否则此处会有一个无限大的电场;交界面处也不可能出现电流不连续,否则会在此处产生静电荷。

假如没有产生返回源端的反射电压,同时又要维持交界面两侧的电压和电流相等,就需要关系式V1=V2,I1=I2。但是,又有I1=V1/Z1,I2=V2/Z2。当两个区域的阻抗不同时,这4个关系式绝对不可能同时成立。”

上诉文章论述中,原作者是借用了反证法与数学推论说明,当瞬时阻抗突变时会不合理,从而只有反射才能使得两个边界条件成立。当然以上分析方法是基于集总电路理论分析的,所以显得物理世界有些拟人化了。作者在本段最后也说:“没有人知道到底是什么产生了反射电压,只是知道这样产生之后,交界面两侧的电压才能相等,交界面处的电压才是连续的。”实际上,我在深入了解后发现,如果使用电磁学理论来研究反射问题会有更合理的解释,也就是搞清楚为什么电磁波会在波导体内发生反射。但是这又是另一个话题了。

《信号完整性与电源完整性分析第三版》上述文段中的分析并不妨碍我们计算反射系数等等反射规律,文段的结论是:在阻抗突变的地方会发生反射,这意味着我们为了避免这种情况的发生能有以下措施:

1. 使用可控阻抗互联;

2. 传输线两端至少有一个端接匹配;

3. 选择布线拓扑结构,使分支的影响最小化;

4. 让几何结构的任何突变都最小化。

2. 阻抗匹配

所以在信号线上我们一般会加端接匹配电阻用来避免信号反射同时增强抗干扰能力,CAN总线也不例外。在CAN总线上我们常常端接120欧姆电阻用以阻抗匹配。

如果阻抗不匹配会发生什么?下面我们建立一个模型分析:

嵌入式~CAN-专辑1_筛选器_34

图1 传输线模型

如图1所示,信号源内阻120Ω,源端端接120Ω电阻,接收端开路因此反射系数为1。探针1为源端电压V1,探针2为接收端电压V2。我们假设传输延迟1ns,信号源电压幅值5V。

那么下面V1和V2随时间变化的理想曲线如图2:

嵌入式~CAN-专辑1_寄存器_35

图2 反射电压

可以看到,从第0秒开始,发射端给出一个5V的信号电压,经过1ns之后到达接收端,由于此时接收端处于全反射状态因此与源端信号叠加在1ns时刻V2变成10V,反射信号由于全反射并没有被消耗于是又经过1ns返回发射端使V1在2ns时刻变成10V。以上是在理想情况下的反射情况,实际电路中并不存在全反射,因此实际的反射曲线会是一个幅值逐渐减小的振铃形式的信号。例如图3:

嵌入式~CAN-专辑1_嵌入式硬件_36

图3 V2电压

综上所述,信号反射是电路中常见的问题,会对信号质量和电路性能产生不良影响。采取适当的阻抗匹配和降低反射的方法可以减少信号反射并提高电路的稳定性和可靠性。

三、经典的CAN总线现场故障

1 CAN总线的常见故障

嵌入式~CAN-专辑1_标识符_37

   当CAN总线出现故障或数据传输异常时,往往会出现多种奇怪的故障现象,如仪表板显示异常,车辆无法启动,启动后无法熄灭,车辆动力性能下降,某些电控系统功能失等。这是因为相关数据或信息是通过CAN总线传输的,如果传输失败,那么会产生多种连带故障,甚至造成整个网络系统瘫痪。    最为常见的故障症状是仪表板的显示异常,如下图所示。

嵌入式~CAN-专辑1_寄存器_38

在检修过程中,首先应查看具体的故障症状,根据故障症状和网络结构图来初步分析有可能是哪些原因造成的,然后使用相关的诊断仪器进行诊断,根据诊断结果制订相关检修方案,做到心中有数,目标明确。

    接着查找具体的故障部位和原因,同时结合相应的检测方法和测量结果找到故障点,从而彻底排除故障。

    由于CAN网络采用多种协议,每个控制模块的端口在正常的情况下都有标准电压,因此电压测量法可用于判断线路是否有对地或电源短路、相线间短路等问题。

    为了确定CAN H 或CAN L 导线是否损坏或信号是否正常,可以测量其对地电压(平均电压)。测量点通常在OBD诊断接口处,如下图所示。

嵌入式~CAN-专辑1_寄存器_39


    诊断接口的6号针脚连接CAN H 导线,14号针脚连接CAN L 导线。如果诊断接口上连接有两组CAN总线,那么动力CAN总线使用6号和14号针脚,舒适总线使用3号和11号针脚。诊断接口的针脚含义如下图所示。 

嵌入式~CAN-专辑1_标识符_40

    正常情况下,当CAN总线唤醒后,CAN H 对地电压约为2.656V,CAN L 对地电压约为2.319V,而且两者相加为4.975V  ▼ 

嵌入式~CAN-专辑1_筛选器_41

CAN故障通常的原因有CAN线短路、对电源短路、对地短路、相互接反。

2 CAN H与 CAN L短路

    当CAN H 与CAN L 短路时,CAN网络会关闭,无法再进行通信。会有相应的网络故障码。CAN H 与CAN L 短路的总线波形如下图所示。

嵌入式~CAN-专辑1_筛选器_42

    当两者相互短路之后,CAN电压电位置于隐性电压值(约2.5V)。实际测量两条CAN导线的电压,会发现始终在2.5V左右,基本不变化,如下所示。

嵌入式~CAN-专辑1_寄存器_43

 故障排除方法:通过插拔CAN总线上的控制模块(节点),可以判断是由节点引起的短路还是导线连接引起的短路。

    逐个断开节点,若电压恢复正常,则说明该节点有问题。若断开所有节点后电压还没有变化,则说明线路短路。

3 CAN H对电源(正极)短路

    当出现CAN H 对电源(正极)短路这种故障时,根据CAN总线的容错特性,可能出现整个CAN网络无法通信的情况或产生相关故障码。

    以对12V电源短路为例,此时CAN H 电压电位被置于12V,CAN L 线的隐性电压被置于大约12V。CAN H 对电源短路的总线波形如下图所示。

嵌入式~CAN-专辑1_筛选器_44

    实际测量电压,若CAN H 电压为12V,CAN L 电压被置于约为11V,则说明出现此类故障。CAN H 对电源短路的CAN H 电压如下图所示。

嵌入式~CAN-专辑1_标识符_45

  故障原因:如果不是CAN H 导线对外部电源短路引起的,那么这种故障就有可能是控制模块内部的CAN收发器损坏造成的。故障查找方法同上。

4 CAN H对地短路 

    当出现CAN H 对地短路这种故障时,根据CAN总线的容错特性,可能出现整个CAN网络无法通信的情况或产生相关故障码。

    CAN H 的电压位于0V,CAN L 电压也位于0V,可是在CAN L 导线上还能够看到一小部分的电压变化。CAN H 对地短路的总线波形如下图所示。

嵌入式~CAN-专辑1_嵌入式硬件_46

    实际测量电压,若CAN H 和CAN L 电压均约为0V,且无断路问题,则说明出现此类故障。CAN H 对地短路的CAN H 电压如下图所示。

嵌入式~CAN-专辑1_寄存器_47


 故障原因:如果不是CAN H 导线对外部地线短路引起的,那么这种故障就可能是控制模块内部的CAN收发器损坏造成的。故障查找方法同上。

5 CAN L对地短路

    当出现CAN L 对地短路这种故障时,根据CAN总线的容错特性,可能出现整个CAN网络无法通信的情况或产生相关故障码。

    但是对于某些车系,如海马车系,其CAN L 对地短路的容错特性较好,车辆基本能够正常使用,即在客户体验层面上没有明显的异常现象,但从诊断方面来讲,会影响网络传输速度。

    此时CAN L 电压约为0V。CAN H 线的隐性电压被降至0V,但显性电压基本不变,因此波形被拉长,依然可以传输数据,由此可说明CAN L 对地短路的容错特性较好原因。CAN L 对地短路的总线波形如下图所示。

嵌入式~CAN-专辑1_筛选器_48

    实际测量CAN导线电压,若CAN L 电压为0V,CAN H 为1V左右,则说明出现此类故障。CAN L 对地短路的CAN L 电压如下图所示。

嵌入式~CAN-专辑1_嵌入式硬件_49

故障原因:如果不是CAN-L导线对外部地线短路引起的,那么这种故障是控制模块内部的CAN收发器损坏造成的。故障查找方法同上。

6 CAN L对带电源(正极)短路

    当出现CAN L 对电源(正极)短路这种故障时,根据CAN总线的容错特性,可能出现整个CAN网络无法通信的情况或产生相关故障码。

    由于CAN L 对电源短路,因此CAN H 电压也被置于12V。CAN L 对电源短路的总线波形如下图所示。

嵌入式~CAN-专辑1_寄存器_50


    实际测量CAN导线的电压,若CAN L 和CAN H 导线电压都约为12V,则说明出现此类故障。CAN L 对电源短路的CAN L 电压如下图所示。 

嵌入式~CAN-专辑1_寄存器_51

故障原因:如果不是CAN L 导线对外部电源短路引起的,那么这种故障就有可能是控制模块内部的CAN收发器损坏造成的。故障查找方法同上。

7 CAN H断路

    当某个控制模块CAN H 导线断路时,会导致该控制模块无法实现通信,但其他控制模块的通信还是有的。在其他的控制模块可能读到此故障模块的故障码。如果多个控制模块的CAN H 导线出现断路。那么这些控制模块的通信功能都会受到影响。CAN H 断路的总线波形如下图所示。

嵌入式~CAN-专辑1_筛选器_52

 如果出现故障的控制模块带有终端电阻,可以用电阻测量法来判断。测量诊断接口的CAN H 与CAN L 之间的电阻,若变为120Ω,则说明有一个终端电阻断路。如果出现故障的控制模块不带终端电阻,那么需要测量该控制模块的CAN导线的导通性。

    替换有故障码内容涉及的控制模块,可以快速判断故障是否由该控制模块本身造成的。此外,要结合网络图来查找断点,因为在整个网络中会设置相应的总线集线器,断点部位不同,受影响的部件也不同,同时也会决定诊断仪能够进行诊断的控制模块。CAN网络与集线器分布如下图所示。

嵌入式~CAN-专辑1_标识符_53

8 CAN L 断路

    当某个控制模块CAN L 导线断路时,会导致该控制模块无法实现通信,但其他控制模块的通信还是有的。在其他控制模块可能读到此故障模块的故障码。如果多个控制模块的CAN L 导线出现断路,那么这些控制模块的通信功能都会受到影响。

    如果出现故障的控制模块带有终端电阻,可以用电阻测量法来判断。测量诊断接口的CAN H 与CAN L 之间的电阻,若变为120Ω,则说明有一个终端电阻断路。如果出现故障的控制模块不带终端电阻,那么需要测量该控制模块的CAN导线的导通性。CAN L 断路的总线波形如下图所示。

嵌入式~CAN-专辑1_嵌入式硬件_54

    替换有故障码内容涉及的控制模块,可以快速判断故障是否是由该控制模块本身造成的。此外,要结合网络图来查找断点,从而准确找到原因,排除故障。

9 CAN L 与 CAN H导线相互反接

    当出现CAN L 与CAN H 导线互相接反这种故障时,一般情况下,接错的那个控制模块将无法通信,其他控制模块的通信则正常。CAN L 与CAN H 导线互相接反的示意图如下图所示。

嵌入式~CAN-专辑1_标识符_55

 

    在怀疑有问题的控制模块的CAN导线针脚处测量其电压,验证电压是否正常。结合CAN网络图核对线路连接情况进行检查,判断是否存在这种故障。若存在,则对CAN网络进行修复。替换有故障码内容涉及的控制模块,判断故障是否是由该控制模块造成的。 

四、为什么CAN总线最高速度为1Mbps

CAN总线可谓是非常常用的总线了,但是你有想过为什么其最高速速率只有1Mbps嘛,而不是2Mbps,或者是更高?下面就来理一理。

物理定律限制 

保证CAN通信安全最大的特点是它的发送错误自监测要求:发送器将要发送的位电平与总线上检测到的位电平进行比较。如下图绿色字。

嵌入式~CAN-专辑1_标识符_56

这使得所有发送回路必须是带反馈功能的。即发送节点发出一个数据位,传播到最远的接收节点,等待接收节点应答一个数据位,再传播到发送端。电信号在这个回路上传播是有时间的。物理学研究结果,铜线中的电信号传播速度大约为2.310(8次方)m/s。 

嵌入式~CAN-专辑1_筛选器_57

那么,对于40米长的电缆,来回有5ns/m × 40m × 2 = 400ns*的延迟,加上***1.25倍***的设计余量,就是**400ns1.25=500ns***,

也就是最大2Mbps。如果是20米长的电缆,最大4Mbps。但是电缆太短,通信系统的空间规模就越小。考虑CAN的使用环境,最大按40ms设计。 

嵌入式~CAN-专辑1_标识符_58

时钟源振荡器频率限制 

按设计tbit=8Tq,最小的PSEG1=2, PSEG2=2, PTS=4tbit计算,如果最大波特率1MHz, 振荡器频率≥8×1MHz= 8MHz。如果最大波特率2MHz, 振荡器频率≥8×2MHz=16MHz。可见,波特率要求越高,时钟源振荡器频率也要越高。

 时钟源振荡器频率误差的限制 

一项新技术能否普及,成本是很关键的因素。为了节省线缆成本,CAN通信采用异步传输方式,时钟信号由网络上每个ECU自己承担。为了保证收发时序的同步,所有时钟信号的频率误差必须在一定范围内。理论上,通信速率越高,每个位的时间越短,则时钟频率也要越高,且误差越小。首先,CAN在设计之初就排除了频率误差较大的RC振荡器(误差在1%以上)。剩下的有陶瓷谐振器和晶体谐振器(俗称晶振),晶振的频率误差更低但是价格也贵。

“石英晶体振荡器的核心元件是石英晶体谐振器。陶瓷振荡器的核心元件是陶瓷谐振器。石英晶体谐振器的频率稳定度高达百万分之几(ppm),做成振荡器其频率稳定度可达-6量级。如果是温补振荡器也可达-7量级。如果是恒温振荡器可做到-8~-9量级,多层恒温振荡器更可达到-9量级。做为系统时钟,可以达到几百年不差一秒。用作导弹或航天中,可做到飞行上万公里,误差不到一米。而陶瓷谐振器频率稳定度只有千分之几。与石英晶体谐振器比显然差了很多。但陶瓷谐振器的特点是起振容易,且价格低廉。用在对时钟要求不太高的电路中比石英晶体谐振器在性价比上有优势。”

根据ISO11898-1-2003标准描述,选用N位填充时,频率误差df公式如下,

式1),分母中的13意思是选择5位填充,2*(N+1)+1=2*(5+1)+1。

可见填充位的位数N越大,对振荡器的精度要求越高。

分析一下:

设计tbit=8Tq,最小的PSEG1=2, PSEG2=2, PTS=4,

带入公式1,df≤2/(2*(13*8-2)=0.98%=9800ppm。

可见,对于这个误差陶瓷谐振器完全满足。

嵌入式~CAN-专辑1_嵌入式硬件_59

总线传输延迟的考虑 

在第一个原因里只考虑了总线上信号的传播延迟,事实上发送单元,接收单元的芯片处理信号本身也要时间。则按照单程
5ns/m × 40m = 200ns的时间还不够。按照传播延迟通常有2个Tq考虑,tbit=8Tq,最小的PSEG1=2, PSEG2=2, PTS=4,
对于1Mbps, Tq=125us, 2Tq=250us
对于2Mbps, Tq=62.5us,2Tq=125us
显然,1MHz的波特率能覆盖住这个传输延迟时间。

以下,ISO11898-5-2007标准限制了这个最大时间是255ns。

嵌入式~CAN-专辑1_筛选器_60

弄明白了嘛,以上四个原因说明了,CAN2.0 最大波特率是1Mbps。