最近在研究CAN总线,发现CAN总线的CANH和CANL上的波形有好有坏,如图1所示红框中所示,有的波形有明显的过冲,想弄清楚原因,请教了一些前辈,自己也查阅了一些资料,但由于孔丙火(微信公众号:孔丙火)自身愚钝,总是感觉不能完全理解。

图1

根据孔丙火(微信公众号:孔丙火)的理解,CAN波形中的冲击是由于电平陡然变化,在传输双绞线上电波反射造成的,回波反射的原理应该是很复杂的,查阅了相关文献,理论公式一大堆,什么基尔霍夫定律等等,总之,对于我们这些搞应用研究的人来说,一句话,看不懂,但有没有其他方法可以简单理解这种现象呢,我想是有的,下面列举几种比较通俗的解释,有的用自然现象解释,有的用人性解释,反应了CAN总线作为自然界的一部分,就会遵循自然规律,有的“道法自然”意思。

(1)用光的反射来解释

孔丙火(微信公众号:孔丙火)看过周立功关于CAN总线的一本书,书中用光的反射原理解释了CAN信号的回波反射,很形象。他说,电波在双绞线中传输,跟光波在空气中传输具有相同的道理,当光从空气射向水面时,一部分被反射,另一部分折射进入水中。电信号在均匀的双绞线中传播时,是不会有反射的,但在双绞线的末端,线缆的特征阻抗突然变化,信号就会发生反射,反射信号与源信号叠加,就会形成向上的冲击。

图2

(2)用水流解释

这是一个前辈打的比喻,也比较形象。在河流中,如果水流比较缓慢,是看不到回波的,如果水流突然变大,就会看到有反方向的回波。在CAN总线中,低电平突然变到高电平时,就会像水流一样出现回波,从这个角度讲,总线信号电平应该缓慢变化比较好,回波反射小,但太缓慢会影响通信速率,要取个择中,这就是CAN收发器芯片的斜率控制,现在好多芯片都没有这个管脚了,应该是斜率是固定的,因此,不同的芯片在相同的测试条件下,回波反射式差别的。周立功公司有一篇文章,专门比较了几种芯片的性能,大家可以百度搜一下,题目是:主流CAN收发器性能PK,孔丙火(微信公众号:孔丙火)认为写得不错。

(3)用人与人交流解释

有的人性子急,如果交流的时候,你的性子也急,把想要说的事,想要讲的话一股脑的全说完,可能会引起对方的激烈反应,如果你讲究方式方法,做好铺垫,慢慢谈,对方的反应就不会那么大,这也是一个前辈打的比喻,是不是跟CAN总线的信号反射有些类似啊。人性在CAN总线上的反应,孔丙火(微信公众号:孔丙火)感觉有些意思,写出来跟大家分享一下。

图3

(4)用能量守恒定律解释

下面是从一篇论文中摘出来的,写得也有道理,大家可以看一下,有助于理解。

图4

关于CAN总线的回波反射问题,还是有很多细节问题需要研究的,尤其是对于多节点长距离的应用,留待后续一起讨论。关于你的理解,也可以留言一起探讨。

学习是有趣的,老祖宗是智慧的

道法自然

CAN总线、自然与人的更多相关文章

  1. Android组件化方案及组件消息总线modular-event实战

    背景 组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向.美团内部各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产 ...

  2. LINUX设备驱动模型之class

    转自 https://blog.csdn.net/qq_20678703/article/details/52754661 1.LINUX设备驱动模型中的bus.device.driver,.其中bu ...

  3. Web前端面试题整合,持续更新【可以收藏】

    饭后闲来无事,把这几年带学生用的一些面试题整合一下,供上!拿走,不客气!应付一般公司的二面基本上是够用了.祝你早日拿到心仪的offer. css相关 1. 万能居中 1.margin: 0 auto; ...

  4. 用批处理启动MySQL命令行工具

    最近在看MySQL,安装好之后,每次在开始菜单去启动MySQL命令行工具的时候,都是直接用root用户连接我本地的数据库 输入密码开始工作,但是要连接服务器上的MySQL的话,就要去CMD下运行 : ...

  5. Centos 上使用Mono+MVC5+WebApi+Sqlite

    鉴于现在网上很多Mono安装Jexus的方法已经过时,你打开百度搜索基本是几个前辈写的文字,很多其实是过去式了.踩的坑多自然使人望而生畏,而方便快捷的方法百度排名却太低,这里就安利下笔者刚成功使用的方 ...

  6. 张小龙《微信背后的产品观》之PPT完整文字版

    微信回顾 433天,一亿用户 成为移动互联网的新入口 启动(2010年11月19日) 用户数突破1亿 1.0 1月26日 2.0 5月10日 语音对讲 2.5 8月3日 查看那附近的人 3.0 10月 ...

  7. 《Out of control》阅读笔记(一)

    Out Of Control 说实话,当初买这本书起源于知乎诸位学问人的推荐,脑子一热就买了.为了不浪费这几十块钱,细致了看完了前三章,买来一看才发现原来这本书居然跟计算机有很深刻的关系.其实更准确地 ...

  8. [CLR via C#]16. 数组

    数组是允许将多个数据项当作一个集合来处理的机制.CLR支持一维数组.多维数组和交错数据(即由数组构成的数组).所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Obj ...

  9. 我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)

    继续上篇介绍我的终端环境.这篇介绍zsh和z,其实这不局限于os x,在所有的*nix系统中都是可用的. zsh zsh作为bash的替代品,自然很多人要问:why zsh? 在Zsh Worksho ...

随机推荐

  1. Activex、OLE、COM、OCX、DLL之间有什么区别?

    来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html         熟悉面向对象编程和网络编程的人一定对ActiveX ...

  2. Top Open Source Projects to Watch in 2017

    https://opensource.com/article/16/12/yearbook-projects-watch-2017 No one has a crystal ball to see t ...

  3. Codable实现json转Model,是时候干掉HandyJSON了!

    自从开始使用Swift做项目,一直都在使用HandyJSON,不可否认,HandyJSON在Swift4.0是个好东西,也尝试过其它json转mode的工具,最终发现还是HandyJSON最好用. 去 ...

  4. C++中遍历读取数组中的元素

    答案来源:https://zhidao.baidu.com/question/187071815.html 对于字符数组str[N],判断方法有以下三种: 第一种:用库函数strlen 1 len = ...

  5. 0513JS数组遍历、内置方法、训练

    一.定义一个数组把其中的偶数取出,组成一个新的数组 var attr = [9,34,80,27,56]; var attr1 = []; for(var i in attr){ if(attr[i] ...

  6. (六)SpringBoot2.0基础篇- Redis整合(JedisCluster集群连接)

    一.环境 Redis:4.0.9 SpringBoot:2.0.1 Redis安装:Linux(Redhat)安装Redis 二.SpringBoot整合Redis 1.项目基本搭建: 我们基于(五) ...

  7. Java多线程-概念与原理

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

  8. Java如何获取系统信息(包括操作系统、jvm、cpu、内存、硬盘、网络、io等)

    1 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge ...

  9. Oracle-11:联合查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 联合查询的实际上的意义就是从俩个结果集中拿有特定联系的结果封装为一个结果集 数据库脚本给放一份,供测试使用 c ...

  10. SSM-SpringMVC-09:SpringMVC中以继承MutiActionController类的方式实现处理器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- MutiActionController类,多行动处理器,简单来说,就是可以一个处理器中有多个处理方法,分支 ...