好的,我们来详细解析一下CAN总线(Controller Area Network,控制器局域网)通信电路的工作原理。它是一种在工业自动化和汽车领域应用极其广泛的多主、串行、差分、广播式现场总线。
其核心原理可以分解为以下几个关键方面:
-
差分信号传输 (核心物理层特性):
- 信号表示: CAN总线使用两根线:CAN_H (高) 和 CAN_L (低)。
- 隐性状态: 当总线空闲或没有节点发送显性位时,驱动电路使 CAN_H 和 CAN_L 的电压非常接近(通常都在 2.5V 左右)。这个电压差很小(接近0V),代表了逻辑“1”,称为隐性状态。此时,总线上没有有源驱动。
- 显性状态: 当有节点需要发送逻辑“0”时,它主动驱动总线:抬高 CAN_H 的电压(例如到约 3.5V),同时拉低 CAN_L 的电压(例如到约 1.5V)。 这样就产生了一个显著的差分电压(比如 2V 左右),代表了逻辑“0”,称为显性状态。
- 优点:
- 抗干扰能力强: 外部噪声源(如电磁干扰)通常会同时作用于两根线上,产生的共模噪声会被接收端忽略,只检测差分电压的变化,从而极大地提高了通信的抗噪性能。
- 信号识别清晰: 显性状态(0)主动且具有较大的电压摆幅,容易被检测到。
-
线与逻辑 (实现非破坏性仲裁):
- 物理特性: CAN 总线上的节点输出级通常采用开集或开漏驱动结构。
- 逻辑规则: 在隐性状态下,各节点的驱动管截止,总线通过终端电阻(通常是 120Ω)将差分电压拉至接近0(逻辑1)。当任意一个节点驱动显性状态(逻辑0)时,由于线与特性,总线就被强行拉到显性状态。即:显性位(0)覆盖隐性位(1)。
- 关键作用: 这个特性是实现CAN最核心功能——非破坏性逐位仲裁的基础。多个节点同时发送时,只要它们在发送ID字段期间检测到自己发出的隐性位(1)在总线上被覆盖成了显性位(0),就知道总线上有更高优先级(ID值更小)的节点在发送(因为更小ID的二进制位在前面更容易出现0),便立即停止发送(转为接收模式),而不会破坏高优先级节点的帧传输。
-
多主结构与仲裁:
- 无中心控制器: CAN网络上没有主控节点,所有节点在总线空闲时都可以尝试发送数据(多主)。
- 标识符 (ID): 每个数据帧的开头都有一个唯一的标识符(ID),用来标识数据内容和确定节点优先级。ID值越小,优先级越高。
- 非破坏性逐位仲裁: 当多个节点同时开始发送时,它们首先发送各自帧的ID。在发送ID的同时,每个节点监听总线状态。
- 节点发出一个隐性位(1),而检测到总线上是显性位(0):说明有更高优先级的节点也在发送(它发出了一个显性位0),该节点立刻停止发送,退出发送器。
- 节点发出一个显性位(0),且检测到总线上也是显性位(0):说明至少目前为止没有更高优先级节点发出不同的位,该节点继续发送。
- 结果: 当ID发送结束时,只有一个节点(发送了最低ID值,即最高优先级的节点)获胜,能够完整发送完它的数据帧。其他低优先级节点自动退出。这个过程中没有任何总线冲突导致的帧损坏,高优先级数据总能成功发送。这是CAN总线区别于其他总线(如RS485)的关键优势。
-
广播式通信:
- 获胜节点发送的数据帧会被广播到总线上的所有节点。
- 基于ID的过滤: 每个接收节点都会接收完整的数据帧,但会根据帧头的ID来决定是否处理该数据。如果ID不是自己关心的,则忽略该帧;如果是,则读取数据内容。这减少了节点CPU的负载。
-
终端电阻:
- 必要性: CAN总线作为高速差分信号传输线(尤其是符合 ISO 11898-2 的高速CAN),其两端必须各接一个120欧姆的终端电阻。
- 作用:
- 阻抗匹配: 消除信号在总线两端的反射,保证信号波形质量,防止通信错误。
- 维持隐性电平: 在无节点驱动(隐性状态)时,通过分压网络(电阻连接到电源和地)将 CAN_H 和 CAN_L 拉至中间电平(约2.5V)。
-
节点内部电路结构 (简化模型):
- CAN 控制器:
- 负责处理CAN协议相关的逻辑功能:构造帧格式(添加起始位、仲裁字段、控制字段、数据、CRC校验码、ACK应答、结束位等)、错误检测(CRC、帧格式、位填充、ACK)、错误处理(计数器、限制、自动重发或关闭)、位定时控制(波特率设置)、仲裁控制。
- CAN 收发器:
- 作为物理层接口,连接在CAN控制器和物理总线之间。
- 发送端: 接收CAN控制器发出的逻辑电平信号(TTL/CMOS),驱动总线上的CAN_H和CAN_L线,根据逻辑0/1输出显性/隐性差分电平。
- 接收端: 检测总线上的差分电压(CAN_H - CAN_L),将其转换为逻辑电平信号(TTL/CMOS)发送给CAN控制器。滤除总线上的共模噪声。
- 保护功能: 通常具有过热保护、短路保护(总线到Vcc、地)、ESD保护等。
- CAN 控制器:
-
错误检测与处理:
- 强大的错误检测机制:
- 位监控: 发送节点在发送显性位的同时检测总线是否也是显性位。
- 位填充检查: 数据帧中连续出现5个相同位后,必须插入一个相反位(位填充)。接收节点发现连续出现6个相同位(在特定区域)即触发错误。
- 帧检查: 检测固定格式字段(如CRC界定符、ACK界定符、帧结束、帧间隔)是否符合标准。
- CRC校验: 使用循环冗余校验码检查数据传输的正确性。
- ACK缺失: 发送节点如果检测到ACK间隙没有被任何节点置为显性位(表示没有节点正确收到帧),则判定为ACK错误。
- 错误处理: 检测到错误的节点会发送一个“错误帧”(连续6个显性位)来打断总线上的错误传输。每个节点有错误计数器,错误次数超过阈值会自动进入离线状态(错误被动或总线关闭),避免持续干扰总线。
- 强大的错误检测机制:
总结CAN通信电路工作流程:
- 空闲: 总线隐性状态,所有节点均可尝试发送。
- 争用总线: 多个节点同时开始发送,从ID的最高位(MSB)开始逐位仲裁(线与逻辑)。低优先级节点退出,高优先级节点胜出。
- 发送数据: 获胜节点完整发送其数据帧(包括ID、数据、CRC等)。
- 接收广播: 所有节点接收到完整的帧。
- 应答: 正确收到帧的节点在ACK间隙发送显性位,向发送节点确认。发送节点在ACK间隙采样总线,检测是否有应答。
- 错误处理: 任何节点检测到错误时(根据上述机制)会发送错误帧打断当前传输。发送节点检测到错误或未收到ACK会尝试重发(如果在错误计数允许范围内)。
- 完成: 发送成功后,总线恢复空闲状态(隐性)。
图示说明关键电平状态:
| 逻辑状态 | 总线状态 | CAN_H 典型值 | CAN_L 典型值 | 差分电压 Vdiff = CAN_H - CAN_L |
|---|---|---|---|---|
| 隐性 | 逻辑 1 | ~2.5V | ~2.5V | ~0V (或 < 0.5V) |
| 显性 | 逻辑 0 | ~3.5V | ~1.5V | ~2.0V (或 > 0.9V) |
理解CAN总线通信的核心在于掌握其差分传输的抗干扰性、线与逻辑实现的非破坏性仲裁以及强大的容错机制。这使得它在复杂的电磁环境和多节点需要实时通信的场合(如汽车)中表现卓越。
stm32的can总线理解及应用
stm32的can总线理解及应用——程序对应stm32f103系列CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。它的通信速度
大连云港
2021-08-19 06:26:04
基于FPGA的CAN总线通信节点设计
节点的硬件接口电路。基于对CAN 总线控制器的功能分析, 并应用Verilog语言进行软件设计, 从而实现CAN节点之间的通信功能。 0 引言 CAN 总线允许高达1M bit /s通讯速率, 支持多主通讯模式, 有高抗电磁干扰性而且能够检测出通信过程中产生的任何错误, 已被广泛应用到各自动
2023-06-18 11:15:01
CAN总线隔离接地的原理解析
总线增加隔离固然可以保证总线稳定可靠地通信,但是带隔离通信接口的设备,在复杂的环境或安装状态下,接口会表现出完全不同的ESD特性,了解ESD对接口的影响机理,才能有针对性地增加保护器件,提升隔离接口
2019-08-15 08:59:33
如何使用Arduino实现CAN总线通信
CAN总线(Controller Area Network)是一种多主控制的串行通信协议,广泛应用于汽车电子、工业自动化等领域。它以其高可靠性、实时性和灵活性而受到青睐。Arduino作为一个
2024-11-12 10:09:17
CAN总线通信原理介绍 CAN总线模块选择指南
CAN总线(Controller Area Network)是一种串行通信协议,主要用于汽车电子控制单元之间的通信。它由Bosch公司在20世纪80年代初开发,因其可靠性、实时性和灵活性而广泛应用
2024-11-21 10:21:51
如何检测CAN通信电路的好坏
电路的检测和维护是非常重要的。 概述 CAN通信电路主要包括CAN控制器、CAN收发器、CAN总线驱动器、CAN总线终端电阻等部分。在检测CAN通信电路的好坏时,需要从以下几个方面进行: 1.1 硬件检查 硬件检查主要包括对CAN控制器、CAN收发器、CAN总线驱动器、CAN总线终端电阻等硬件组
2024-06-16 11:06:38
什么是CAN总线通信?CAN总线工作原理
这意味着变送器通过CAN收发器改变总线电平,并将其信息传输到CAN总线。接收器通过监测总线电平将总线上的信息读取到自己的CAN收发器中。
2024-02-19 14:53:54
如何使用Arduino实现CAN总线通信呢
CAN(Controller Area Network)总线是一种常用于汽车和工业控制系统的串行通信协议,以其高可靠性和实时性而闻名。Arduino,作为一种流行的开源微控制器平台,可以通过附加
2024-12-23 09:06:44
基于FPGA的CAN总线控制器的设计
今天给大侠带来基于FPGA的CAN总线控制器的设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,CAN 总线协议解析以及 CAN 通信控制器程序基本框架。话不多说,上货。
2023-05-18 09:21:30
工业控制中的CAN总线接口模块硬件设计原理解析
。其内嵌的增强型CAN 总线控制器(ECAN)模块,完全兼容CAN 2.0B 协议,邮箱数量增加至32 个,并增加了时间戳、消息过滤和超时发送功能,提高了应用CAN通信的灵活性。
2019-07-26 15:40:47
对CAN通信的过滤器配置的理解
总结一些最近做项目对CAN通信的过滤器配置的理解;这里我使用STM32F105系列的芯片,有2路CAN,我使用的是CAN2,过滤器可以设置从15开始,当然,从1开始也是没有问题的;当设置了CAN
richips
2021-08-20 07:14:33
认识CAN总线错误 CAN总线错误分析与解决
认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样才能更容易地理解CAN 总线是如何去发现并解决错误的。
2023-08-14 15:18:46
采用CAN总线控制器SJA1000实现控制电路接口的设计
硬件电路的设计主要是CAN通信控制器与微处理器之间和CAN总线收发器与物理总线之间的接口电路的设计。CAN通信控制器是CAN总线接口电路的核心,主要完成CAN的通信协议,而CAN总线收发器的主要功能是增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI),实现热防护等。
2020-03-13 10:45:50
can总线为什么要用双绞线?can总线不用双绞线可以吗?
can总线为什么要用双绞线?can总线不用双绞线可以吗? CAN总线是一种数据通信协议,广泛用于汽车、航空、船舶、工业自动化、机器人等领域。CAN总线采用串行通信方式,主要用于实现多个模块之间的通信
2023-09-14 16:48:05
解析汽车can总线无法读取数据情况
现在的汽车一般都采用CAN总线作为标准的通讯总线,我们如果能够解析出一台车子的CAN总线数据,就能够对这台车子的状态有一个非常好的了解
2020-08-06 16:23:07
如何使用CAN通信文档解释来自总线的CAN消息?
你好呀,我正在尝试将一个 CAN 节点 (BMS) 连接到总线,并使用另一个节点 (VCU) 来处理数据以根据消息启动少数 LED。这是目标语句。 我知道 CAN 在理论上是如何通信的。但是我需要
hxjq
2023-03-27 06:02:05
CAN总线收发器的工作原理和应用
CAN(Controller Area Network)总线收发器是CAN总线通信中的关键组件,其工作原理和应用对于理解现代汽车电子、工业自动化等领域的通信系统至关重要。以下将详细阐述CAN总线收发器的主要工作原理及其应用。
2024-08-26 15:23:00
CAN总线应用领域 CAN总线协议解析
CAN(Controller Area Network)总线是一种用于车辆内部网络的串行通信协议,由Bosch公司在1986年开发。它以其高可靠性、实时性和灵活性而闻名,广泛应用于汽车电子、工业控制
2024-11-21 10:15:46
CAN总线通信详解
即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。
2023-03-29 10:06:16
CAN总线是什么 CAN总线的作用
IICSPICAN485USB工业以太网EtherCATEtherCAT传输性能EtherCAT应用层协议层CoE协议现场总线最近的实验需要较高的运动控制速率。市场上大部分的驱动板目前只支持CAN通信。毕竟CAN通信配置简单
听我讲
2021-08-06 07:44:19
CAN总线如何实现通信呢?
CAN总线如何实现通信呢?我大体思路这样的:1、初始化的时候,给系统配置时钟,处理看门狗电路2、初始化CAN模块在调试的时候是不是要将计算机模拟成CAN节点,通过上位机的调试软件和CCS来观察呢如何发?如何收?这个感觉难点不少啊?求大神能有个具体的调试方法,先谢谢了
clslda
2020-06-01 15:56:35
汽车CAN总线的特点和应用
汽车CAN总线是一种连接汽车各种控制单元的通信协议和数据传输标准,它对于现代汽车的发展具有重要意义。以下是对汽车CAN总线的详细解析,旨在全面阐述其概念、特点、工作原理、应用以及未来发展等方面。
2024-09-30 11:31:39
如何学习CAN总线通信?
在开发板上有CAN总线,怎样来进行CAN总线的通信呢?希望能普及一下这方面的知识或者提供些相关的例程。如果有高手做过,请介绍一下开发的过程。
lingjianghui
2019-09-30 04:35:02
CAN总线通信中的数据帧结构解析
CAN总线由Bosch公司在1980年代开发,旨在为汽车电子系统提供一个可靠的通信网络。随着技术的发展,CAN总线已经被广泛应用于各种工业和自动化领域。 2. CAN总线数据帧概述 CAN总线的数据
2024-11-12 10:12:17