can收发器 rx_CANOpen系列教程03 _CAN收发器功能、原理及作用

a84aa36e27dd180116456d6ec38f2c01.png

1写在前面

前面文章是从大方向介绍了CAN网络,让大家对CAN网络有一定的认识。本文将范围缩小,讲述整个CAN网络其中的一个CAN收发器。如下图标记出来的部分:

59b18459e0c9412ae06998829938d1cc.png

本文结合众多初学者容易产生的疑问来讲述CAN收发器相关的知识点,大概有如下几点:

什么是CAN收发器?

CAN总线差分信号

CAN收发器芯片和485芯片差异

2

什么是CAN收发器?

CAN收发器在整个CAN网络中所处的位置如上图所示。CAN收发器就是一块类似232或485的转换芯片,它的主要功能是将CAN控制器的TTL信号转换成CAN总线的差分信号。

2.1什么CAN控制器TTL信号?

现在的CAN控制器一般都与MCU集成在一起,其发送和接收TTL信号就是MCU引脚(高或低)信号。

以前还有独立的CAN控制器,一个CAN网络节点会包含三块芯片:MCU芯片、CAN控制器、CAN收发器。现在是将前两者集成在一起了(看文章开篇图片)。

3

CAN总线差分信号

CAN总线信号从CAN收发器出来,为「两线」「差分」信号,用隐形代表逻辑1,显性代表逻辑0。

c2ea8f1e12f1d99703e4dafafed03b76.png

1.CAN收发器两线

芯片引脚CAN_H、CAN_L

2.CAN_H和CAN_L电压

电压的大小根据芯片型号而定,一般常见的CAN收发芯片有3.3V和5V两种芯片。

如上图,为5VCAN收发芯片,在逻辑0和逻辑1时电压情况:

逻辑0时:

显性,CAN_H=3.5V,CAN_L=1.5V;

逻辑1时:

隐性,CAN_H=2.5V,CAN_L=2.5V;

当然,3.3V电压芯片的总线电压原理类似。而实际应用中,总线电压并非绝对的像上面说的3.5V、2.5V、1.5V这种电压,会受到导线电阻、外界干扰等影响。

3.隐性和显性

学过生物都知道,基因有隐性和显性。隐性的基因实际存在,但不会表现出来。有显性的基因就会表现出来。

这里CAN总线隐性信号和显性信号道理一样,当总线两种信号都有时,总线表现出来的就是显性信号。

提示:我们这里说的显性和隐性信号,指的是总线传输的bit位信号。

所以,CAN总线平时空闲表现为隐性状态。如果想要发送的信号为隐性位,那么总线才会呈现出来隐性。否则,只要其它有一个节点发送显性信号,你这个节点发送出来的隐性信号就无效。

4.CAN收发器R引脚

CAN收发器R引脚就是与CAN控制器接收相连的引脚。如下图:

ad1337744fc396489ec9666e5edc79d5.png

R引脚的信号是表示总线当前的信号,用于控制器实时监测总线信号。主要两个目的:

A.监测其它节点发送出来的信号:别人给它发送数据;

B.监测自身节点发送出去的信号:自己发送是否失败。就像上面说的,自己发送一个隐形信号,结果监测出来是显性信号,那就说明是别人在发送数据。

4

CAN收发器芯片和485芯片差异

CAN通信和485通信一样,属于半双工。但是,为什么CAN总线相比485通信不管在速度和稳定性上都具有明显优势呢?

4.1总线利用率

CAN收发器工作原理与485具有较大差异。从上面的差分信号可以看得出来,两种芯片同时存在,只有显性信号有效,而不会影响总线传输。简单来说就是CAN总线具有自动仲裁功能,这样就提高了总线的利用率。

RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低,数据冗余量较大,对于速度要求高的应用场所不适应用RS485总线。

提示:

CAN总线没有被发送出去的隐性信号,会由CAN控制器后续发送出去。这里牵涉到CAN总线优先级的问题,后续进一步讲述。

当然,CAN相比485具有明显优势,主要原因还是在于CAN控制器。

4.2可以不使用CAN收发器吗?

UART可以直接通过TX连接对方的RX引脚,利用TTL信号进行通信,那么CAN也可以吗?

答案:单向传输可以,双向传输就不行。

原因很简单,上面说了,CAN控制器会实时监测发送出去的信号是否正确。也就是说TX要与RX信号一致才行,否则CAN控制器认为你发送失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统文件分配策略_操作系统中的文件分配方法

操作系统文件分配策略分配方法 (Allocation Method) The allocation method defines how the files are stored in the disk blocks. The direct access nature of the disks gives us the flexibility to implement the files. In many cases, different files or many files …

简述container与container-fluid的区别

在bootstrap中的布局容器一栏中,提供了container与container-fluid两种容器,其官方解释为: .container 类用于固定宽度并支持响应式布局的容器。 .container-fluid 类用于 100% 宽度,占据全部视口(viewport&#xff09…

centos php fpm 停止_如何关闭php-fpm进程?

因为你是编译的,可以在源码中复制php-fpm的init文件到系统中:cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm然后就可以使用以下命令启动、停止、重启和重新加载php-fpm了:service php-fpm startservice php-fpm restartservice php-fpm…

minus_Java Duration类| minus()方法与示例

minus持续时间类minus()方法 (Duration Class minus() method) Syntax: 句法: public Duration minus(Duration d);public Duration minus(long amt, TemporalUnit t_unit);minus() method is available in java.time package. minus()方法在java.time包中可用。 m…

Mongodb聚合函数

插入 测试数据 for(var j1;j<3;j){ for(var i1;i<3;i){ var person{Name:"jack"i,Age:i,Address:["henan","wuhan"],Course:[{Name:"shuxue",Score:i},{Name:"wuli",Score:i}]}db.DemoTest.Person.insert(pers…

php rename函数_php rename函数怎么用

PHP rename()函数用于重命名文件或目录&#xff0c;语法“rename(文件旧名称,新名称,句柄环境)”&#xff0c;使用用户指定的新名称更改文件或目录的旧名称&#xff0c;并且可以根据需要在目录之间移动&#xff1b;成功时返回True&#xff0c;失败时返回False。php rename()函数…

Java BigInteger类| xor()方法与示例

BigInteger类的xor()方法 (BigInteger Class xor() method) xor() method is available in java.math package. xor()方法在java.math包中可用。 xor() method is used to perform xor operation between this BigInteger and the given BigInteger and we all know when we pe…

Spring Data Redis实战之提供RedisTemplate

为什么80%的码农都做不了架构师&#xff1f;>>> 参考&#xff1a; http://www.cnblogs.com/edwinchen/p/3816938.html 本项目创建的是Maven项目 一、pom.xml引入dependencies <dependency><groupId>org.springframework.data</groupId><artif…

Java BigInteger类| and()方法与示例

BigInteger类和()方法 (BigInteger Class and() method) and() method is available in java.math package. and()方法在java.math包中可用。 and() method is used to perform and operation between this BigInteger and the given BigInteger (val) [i.e. (this BigInteger)…

php映射,PHP实现路由映射到指定控制器

自定义路由的功能&#xff0c;指定到pathinfo的url上,再次升级之前的脚本SimpleLoader.phpclass SimpleLoader{public static function run($rulesarray()){header("content-type:text/html;charsetutf-8");self::register();self::commandLine();self::router($rule…

stl vector 函数_vector :: clear()函数,以及C ++ STL中的示例

stl vector 函数C vector :: clear()函数 (C vector::clear() function) vector::clear() is a library function of "vector" header, it is used to remove/clear all elements of the vector, it makes the 0 sized vector after removing all elements. vector …

Commonjs规范及Node模块实现

前面的话 Node在实现中并非完全按照CommonJS规范实现&#xff0c;而是对模块规范进行了一定的取舍&#xff0c;同时也增加了少许自身需要的特性。本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于javascript的&#xff0c;在javascript中的顶层对象是window&#xff0c;而在…

thinkphp3 php jwt,ThinkPHP5 使用 JWT 进行加密

- 使用 Composer安装此扩展- 代码示例<?php /*** [InterCommon-接口公用]* Author RainCyan* DateTime 2019-08-12T16:38:080800*/namespace app\hladmin\controller;use think\Controller;use \Firebase\JWT\JWT;class InterCommonController extends Controller {private…

数据管理与商业智能_商业智能与数据科学

数据管理与商业智能In this heavily jargonized trade, the words typically overlap one another, leading to a scarcity of understanding or a state of confusion around these ideas. whereas big data vs analytics or computing vs machine learning vs cognitive inte…

JavaWeb网上图书商城完整项目--day02-14.登录功能的login页面处理

1、现在注册成功之后&#xff0c;我们来到登录页面&#xff0c;登录页面在于 在登录页面。我们也需要向注册页面一样对登录的用户名、密码 验证码等在jsp页面中进行校验&#xff0c;校验我们单独放置一个login.js文件中进行处理&#xff0c;然后login.jsp加载该js文件 我们来看…

php多线程是什么意思,多线程是什么意思

线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位&#xff0c;而多线程就是指从软件或者硬件上实现多个线程并发执行的技术&#xff0c;具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#…

c++一个类创建多个对象_C ++ | 创建一个类的多个对象

c一个类创建多个对象In the below program, we are creating a C program to create multiple objects of a class. 在下面的程序中&#xff0c;我们正在创建一个C 程序来创建一个类的多个对象 。 /* C program to create multiple objects of a class */#include <iostrea…

Activity中与ListActivity中使用listview区别

一.Activity中与ListActivity中使用listview区别&#xff08;本身没多大区别&#xff0c;只是ListActivity在listview的显示上做了一些优化&#xff09;Activity中使用Listview步骤&#xff1a;1.xml布局中,ListView标签id可以任意取值如&#xff1a;<ListView andro…

java相关是什么,什么是java

java基础常见面试题&#xff0c;这是一篇超长的随笔&#xff01;&#xff01;&#xff01;1. Java基础部分....................................................... 4 1、一个".java"源文件中是否可以包括多个类(不是内部类)&#xff1f;有什么限制&#xff1f;.. …

如何在Scala中将Double转换为String?

Double in Scala is a data type that stores numerical values that have decimals. It can store a 64-bit floating point number. Scala中的Double是一种数据类型&#xff0c;用于存储带有小数的数值。 它可以存储一个64位浮点数。 Example: 例&#xff1a; val decimal…