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

  • 分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来! www.captainbed.net

一、写在前面

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



  本文结合众多初学者容易产生的疑问来讲述CAN收发器相关的知识点,大概有如下几点:
  ·什么是CAN收发器?
  ·CAN总线差分信号
  ·CAN收发器芯片和485芯片差异

  本文章收录于【CANOpen系列教程】,在我的博客分类“CANOpen系列教程”也能查找到。

  为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该系列教程也同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看。

二、什么是CAN收发器?

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

2.1 什么CAN控制器TTL信号?

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

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

三、CAN总线差分信号

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



1.CAN收发器两线

芯片引脚CAN_H、CAN_L

2.CAN_H和CAN_L电压

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

如上图,为5V CAN收发芯片,在逻辑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控制器接收相连的引脚。如下图:



R引脚的信号是表示总线当前的信号,用于控制器实时监测总线信号。主要两个目的:
A.监测其它节点发送出来的信号:别人给它发送数据;
B.监测自身节点发送出去的信号:自己发送是否失败。就像上面说的,自己发送一个隐形信号,结果监测出来是显性信号,那就说明是别人在发送数据。

四、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控制器认为你发送失败。

五、说明

1.该文档部分文字来自网络,仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。

六、最后

我的博客:http://www.strongerhuang.com
我的GitHub:https://github.com/EmbeddedDevelop

  我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

strongerHuang wechat
关注微信公众号,查看更多精彩内容!
本文对你有帮助吗?