良许Linux教程网 干货合集 电子通信协议之CAN总线协议篇

电子通信协议之CAN总线协议篇

CAN总线在硬件系统中占据非常重要的地位,是全球应用最广泛的现场总线之一。与我们熟悉的SPI和UART等总线不同,CAN总线属于高端高效的系列。

在嵌入式工程师中,人们普遍知道CAN总线在汽车领域得到广泛应用。实际上,船舶电子设备通信也广泛采用CAN总线。除此之外,在机器人、工业和自动控制系统等领域,CAN总线也被广泛应用。随着国家对海防的重视日益提高,对CAN总线的需求也越来越大。

概述

CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。

当提到CAN总线时,不得不提到德国的Bosch公司,因为CAN总线正是由该公司和Intel于上世纪80年代末共同开发的。

CAN总线具有许多出色的特点,使其能够被广泛应用。例如,它的传输速度最高可达1Mbps,通信距离最远可达10km,具有无损位仲裁机制和多主结构等优点。

近年来,CAN控制器的价格不断下降,许多微控制器(MCU)也集成了CAN控制器。现在,每辆车上都装备有CAN总线系统。

让我们来看一个典型的CAN应用场景:

image-20240115200502854
image-20240115200502854

图1. 一个典型的CAN应用场景

CAN总线标准

CAN总线标准 只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。

image-20240115200505566
image-20240115200505566

图2. CAN总线标准

CAN收发器负责逻辑电平和物理信号之间的转换,如图3所示:

image-20240115200508132
image-20240115200508132

图3. CAN收发器的逻辑电平和物理信号转换

将逻辑信号转换成物理信号(差分电平),或者将物理信号转换成逻辑电平。

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的管脚定义如下表1所示:

表1. 管脚定义

image-20240115200511400
image-20240115200511400

CAN标准有两个,即 IOS11898(图4-1)和 IOS11519(图4-2),两者差分电平特性不同。图5展示了两个CAN标准的比对。

image-20240115200513697
image-20240115200513697

图4-1. ISO11898高速CAN电平

(高低电平幅度低,对应的传输速度快)

image-20240115200515918
image-20240115200515918

图4-2. ISO11519-2低速CAN电平

image-20240115200518382
image-20240115200518382

图5. CAN标准比对

*双绞线共模消除干扰,是因为电平同时变化,电压差不变。

物理层

CAN有三种接口器件,如下图6所示:

image-20240115200520759
image-20240115200520759

图6. CAN的三种接口器件

image-20240115200523478
image-20240115200523478

图7. 通过切换开关状态输出高低电平

多个节点连接,只要有一个为低电平,总线就为低电平,只有所有节点输出高电平时,才为高电平。所谓”线与”。可通过切换开关状态输出高低电平,如图7所示。

CAN总线有5个连续相同位后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差。

和485、232一样, CAN的传输速度与距离成反比,如图8所示。

image-20240115200526286
image-20240115200526286

图8. CAN的传输速度与距离成反比

CAN总线的 终端电阻的接法如下图9所示:

image-20240115200528453
image-20240115200528453

图9. 低速/高速 CAN-bus终端电阻接法

增加终端电阻的目的是为了增强CAN通讯的可靠性,消除CAN总线终端信号反射干扰。

(注: 一般如果CAN总线使用的是在双绞线上运行,这时我们会增加120Ω的电阻。 为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。)

数据链路层

CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为 数据帧、 远程帧、 错误帧、 过载帧帧间隔

数据帧用来节点之间收发数据,是使用最多的帧类型; 、

远程帧用来接收节点向发送节点接收数据;

错误帧是某节点发现帧错误时用来向其他节点通知的帧;

过载帧是接收节点用来向发送节点告知自身接收能力的帧;

帧间隔是用于将数据帧、远程帧与前面帧隔离的帧。

CAN的报文格式

在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是 标识符(ID)长度不同, 标准格式为11位,扩展格式为29位。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部