CAN总线几种正常的“异常”波形

[复制链接]

   
 
电梯直达

楼主

 
 hubaba 发表于 2016-3-28 14:00 | 只看该作者 
摘要

工程师们通常使用示波器观察CAN总线的信号质量,一般主要关注CAN总线差分信号的幅值、最小位宽、边沿情况等。相信不少工程师都看到过一条报文数据的波形上高高低低存在多个幅值,心里可能会变得忐忑不安,幅值不统一是不是波形出现畸变了呢?其实并非如此,今天就把CAN总线上的幅值“异常”归归类。

一、CAN-bus信号产生原理
众所周知,一个标准CAN节点由微处理器、控制器、收发器构成。多个节点成总线型架构挂在一起,两个端节点上并有终端电阻。其结构简图如下图所示。

图1 CAN-bus节点网络结构
可以看出,与总线直接相连的是CAN节点的收发器,起内部电路等效如下图所示,CAN-H、CAN-L直接由三极管驱动,近似可以看成电流型输出。结合上文所述网络架构中的终端电阻,节点发出信号时电流流过终端电阻产生电压信号,当同一时间多个节点同时发出信号时就会使总线上的电流高于单一节点发出的电流,使得我们观察电压信号时出现突增的现象。

图2 CAN收发器结构
CAN-bus是总线型结构,通常状态下一般只有一个节点占有总线。那么有几种情况会导致多个节点同时发出,进而导致幅值出现“异常”呢,下文通过致远电子CANScope分析仪的几个测试案例总结一下。
二、应答位上的幅值“异常”
最常见的,当CAN网络上存在3个以上的节点时,应答位上的幅值要明显高于同一报文的其他位置,如下图所示。可以看到报文在ID段、数据段、CRC校验段处的幅值均比较一致,但是到应答位处时幅值出现突增。这是为什么呢,大家都知道CAN-bus总线拥有自动应答机制,即当某一节点发送完一帧报文时,所有总线中的其余非只听节点均会在应答位处做出响应,如果报文被成功识别则发出一个显性位做为应答信号。
结合上文所述,应答位此时CAN总线上的电流是若干节点电流叠加的综合,所以应答位的幅值高就很容易讲通了。

图3 应答位上的幅值“异常”
三、ID段上的幅值“异常”
CAN-bus总线的一大特点就是多主结构,即网络中所有节点功能对等,没有主从机的概念,所有节点均可自由收发数据。保证多主结构得以实现的关键在于CAN总线的仲裁机制也称优先级机制。当网络中同时有多个节点同时发送数据时会在ID段处产生仲裁,优先级高的节点会最终占有总线。
如下图所示,可以看到在图中的标记处波形出现了“台阶”。正是由于在“台阶”出现前有两个节点同时发出数据,导致幅值增高,在“台阶”处某一节点由于优先级高占有总线,另一个节点暂时退出,使得幅值又回归平常。

图4 ID段上的幅值异常
四、错误帧上的幅值“异常”
再看看这个案例,可以看到在波形的后半部分也出现了台阶式的幅值增高,光标卡住的显性电平区间可以看到宽度明显超过了5个标准位宽,按照CAN总线的位填充规则(不能存在连续六个相同的显性位或隐性位)表明这是一条错误帧。但是不要误会,并不是因为这个幅值“异常”而导致的错误帧,我们知道CAN总线有错误重发机制,以保证总线传输数据的可靠性。这种可靠性正式通过错误帧的“一票否决制”实现的。
当网络中某一节点识别到一条认为是有问题的报文后会发送六个连续的显性位(即错误帧),投出这一否决票通知网络上所有其他节点,本条报文无效。此后其他节点会以“跟票”的形式全部发出六个显性位错误帧。所以此时多个节点重叠部分的错误帧的幅值就会高一些了。

图5 错误帧上的幅值异常

CAN总线几种正常的“异常”波形的更多相关文章

  1. java 常见的几种运行时异常RuntimeException

    常见的几种如下:   NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常.IllegalArgumentException - 传递 ...

  2. 5种处理Vue异常的方法

    原文: Handling Errors in Vue.js 译者: Fundebug 本文采用意译,版权归原作者所有 去年一整年,我都在使用最爱的-Vue.js- 来做项目.最近突然意识到,我竟然从来 ...

  3. 2019.12.11 java程序中几种常见的异常以及出现此异常的原因

    1.java.lang.NullpointerException(空指针异常) 原因:这个异常经常遇到,异常的原因是程序中有空指针,即程序中调用了未经初始化的对象或者是不存在的对象. 经常出现在创建对 ...

  4. selenium三种断言以及异常类型

    elenium提供了三种模式的断言:assert .verify.waitfor 1)Assert(断言) 失败时,该测试将终止. 2)Verify(验证) 失败时,该测试将继续执行,并将错误记入日志 ...

  5. 【刷题】java 常见的几种运行时异常RuntimeException

    常见的几种罗列如下: -NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常. IllegalArgumentException - ...

  6. selenium 三种断言以及异常类型

    selenium 提供了三种模式的断言:assert .verify.waitfor Assert 失败时,该测试将终止. Verify 失败时,该测试将继续执行,并将错误记入日显示屏 .也就是说允许 ...

  7. java中最常见的几种运行时异常,你get了吗?

    NullPointerException (空指针异常) ClassCastException (类型强制转换异常) NumberFormatException (数字格式异常) NegativeAr ...

  8. C++ Primer笔记2_四种类型转换_异常机制

    1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式运行的不论什么类型转 ...

  9. 网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

    第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前 ...

随机推荐

  1. 设计模式(20)--State(状态模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式 ...

  2. tar.xz文件的解压

    xz是绝大数linux默认就带的一个压缩工具. 压缩包xz格式的居然比7z还要小. 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压缩是一次性的,所以可以忽略. xz压缩文件方法 ...

  3. Python爬虫入门教程石家庄链家租房数据抓取

    1. 写在前面 这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材.我们需要爬取的网址为:https://sjz.lianjia.com/zufang/ 2. 分析网 ...

  4. AngularJS学习 之 创建项目

    1.本机搭建好AngularJS运行需要的环境 2.利用Yeoman来创建项目目录 以管理员身份打开cmd,输入 yo angular StockDog 然后按回车,安装进程开始会问几个问题,比如要不 ...

  5. input框中自动展示当前日期 yyyy/mm/dd

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  6. Python Django框架笔记(四):数据分页和CSRF跨站点请求伪造

    (一)数据分页  可以参考  https://docs.djangoproject.com/en/2.0/topics/pagination/ 模板:如果只要显示 1.2.3.4.5.6....的话, ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析

    机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...

  8. Git仓库初始化与推送到远端仓库

    以下命令为Git仓库初始化,添加远端代码托管仓库,以及推送到远端仓库的命令. 以 "github.com"为远端仓库做示例 # Git 库初始化 git init # 将文件添加到 ...

  9. AJAX四种跨域处理方法

    同源策略 同源策略 同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制. 具体定义是:一段脚本向后台请求数据,只能读取属于同一协议名. ...

  10. 如何从 Windows 虚拟机分离数据磁盘

    当不再需要附加到虚拟机的数据磁盘时,可以轻松地分离它. 这会从虚拟机中删除该磁盘,但不会从存储中删除它. Warning 如果用户分离磁盘,它不会自动删除. 如果订阅了高级存储,则将继续承担该磁盘的存 ...