如何理解CAN通信的线与

本文讲述了CAN通信中线与机制的工作原理,不同于I2C,CAN通过CAN收发器的复杂电路设计确保总线状态的正确性,即使多个节点同时发送,也能实现线与效果。作者以TJA1050收发器为例进行了深入浅出的解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是我自己在学习CAN通信时遇到的问题以及自己浅显的理解,下面分享给大家。

相信大家在初学CAN通信的时候都会看到CAN通信的线与机制,即总线上只要有一个节点发显性电平0,那么此时总线就是0状态,只有所有节点都发隐性电平1时总线才是1状态。
如果只从计算机执行与和与运算的角度理解,那结果是显然的。但是在CAN通信中逻辑0和逻辑1是代表了具体的电压的,不可能说线与就线与,比如总线同时有节点发0和1,相与后是逻辑0,此时总线上CAN_H是3.5V,CAN_L是1.5V,那么为什么会得到这样的电压呢?
相信大家一定会说是硬件电路实现了这一操作,我们可以类比I2C,没错的确是电路上实现了线与。
我们先来看I2C如何实现线与:
在这里插入图片描述I2C
线与,从字面上理解就是,有0(低电平)即0,全1(高电平)才1,
我们知道I2C总线上MCU和各节点都只输出低电平和高阻态(可以理解为断路),而总线上的高电平由上拉电阻实现,如上图SDA线和SCL线都外接一个电阻R然后在与Vcc相连。
我们就以SDA线来分析(因为时钟线SCL只由主机控制),按照基本的电路知识我们知道,当主机和从机只要有一个输出为低电平时,电流从Vcc流入输出低电平的那个端口,此时SDA线为低电平。只有当主机和从机都输出高阻态时(都断开),SDA线相当于测Vcc的电压,因此才是高电平。
这样我们就从电路上理解了I2C如何实现线与。但是CAN呢?
在这里插入图片描述
就上面这个图,假设两个节点同时发送,节点一发0(CANH为3.5V,CANL为1.5V),节点2发1(CANH和CANL都为2.5V),按照分析I2C的方法,是不可能得到线与的结论的,那么是怎么实现线与的呢?对,正是CAN收发器,它帮我们实现了线与。
到这里我们就可以得出结论,CAN通信的线与并不是向大家说的简单的类比I2C,而是其通过更加复杂的电路实现的。
到这里,对于兴趣不大的同学,其实没必要继续了解CAN收发器如何实现线与机制,我们知道它做了这个事情就行了。
下面以收发器TJA1050为例,浅显讲解其如何实现线与。
首先其手册上给的原理图如下,
在这里插入图片描述

为了分析方便我们将其简化到纸上,如下图,
在这里插入图片描述

假设节点2已经发了隐性电平(CANH和CANL都为2.5V),
对节点1来说,当,

  1. mos1和mos2均关闭,CANH和CANL均测节点1的0.5Vcc处的电压,因此,CANH=CANL=2.5V,此时,节点1发隐性电平,总线为隐性;
  2. . mos1和mos2均打开,CANH接节点1的Vcc,电流从节点1的Vcc流到节点2的0.5Vcc,因此,CANH=5V。CANL接GND,电流从节点2的0.5Vcc流到节点1的GND,因此,CANL=0V。此时,节点1发显性电平,总线为显性。
    因此,线与成立。

至于上面所说,CANH=5V,CANL=0V而不是3.5V和1.5V,可能是由于控制了mos管并未完全导通而存在压降。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值