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应用场景:
图1. 一个典型的CAN应用场景
CAN总线标准
CAN总线标准 只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。
图2. CAN总线标准
CAN收发器负责逻辑电平和物理信号之间的转换,如图3所示:
图3. CAN收发器的逻辑电平和物理信号转换
将逻辑信号转换成物理信号(差分电平),或者将物理信号转换成逻辑电平。
即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的管脚定义如下表1所示:
表1. 管脚定义
CAN标准有两个,即 IOS11898(图4-1)和 IOS11519(图4-2),两者差分电平特性不同。图5展示了两个CAN标准的比对。
图4-1. ISO11898高速CAN电平
(高低电平幅度低,对应的传输速度快)
图4-2. ISO11519-2低速CAN电平
图5. CAN标准比对
*双绞线共模消除干扰,是因为电平同时变化,电压差不变。
物理层
CAN有三种接口器件,如下图6所示:
图6. CAN的三种接口器件
图7. 通过切换开关状态输出高低电平
多个节点连接,只要有一个为低电平,总线就为低电平,只有所有节点输出高电平时,才为高电平。所谓”线与”。可通过切换开关状态输出高低电平,如图7所示。
CAN总线有5个连续相同位后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差。
和485、232一样, CAN的传输速度与距离成反比,如图8所示。
图8. CAN的传输速度与距离成反比
CAN总线的 终端电阻的接法如下图9所示:
图9. 低速/高速 CAN-bus终端电阻接法
增加终端电阻的目的是为了增强CAN通讯的可靠性,消除CAN总线终端信号反射干扰。
(注: 一般如果CAN总线使用的是在双绞线上运行,这时我们会增加120Ω的电阻。 为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。)
数据链路层
CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为 数据帧、 远程帧、 错误帧、 过载帧和 帧间隔。
数据帧用来节点之间收发数据,是使用最多的帧类型; 、
远程帧用来接收节点向发送节点接收数据;
错误帧是某节点发现帧错误时用来向其他节点通知的帧;
过载帧是接收节点用来向发送节点告知自身接收能力的帧;
帧间隔是用于将数据帧、远程帧与前面帧隔离的帧。
CAN的报文格式
在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是 标识符(ID)长度不同, 标准格式为11位,扩展格式为29位。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !