单片机外围模块漫谈之三,CAN总线
1980年,Bosch的工程师开始研究汽车上高速串行通信的问题,并在1986年发布了CAN(Controller Area Network)总线。CAN以其多主,高速(最高1Mbps),抗干扰的特性被广泛应用汽车及各种工业环境。在此我们主要介绍一下CAN总线的特点,帧类型,以及应用中的注意事项。
1. CAN总线特点
1.1 多主控制
跟我们常用的RS485只有一个主机,从机只能等待主机的轮询不同,在CAN总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这马上会引起我们的担心。如同一个家庭每个人都当家做主,那还不乱了套吗?不急,我们来看一下。这个问题是如何被巧妙地解决的。
物理层 ,CAN采用差分总线。单片机引脚的逻辑电平0,被CAN收发器(PHY)转换为显性电平(Dominant),逻辑电平1被转换为隐性电平(Reccesive)。总线上执行的是"线与"逻辑,只要有一个节点输出显性电平,那么总线上就是显性电平。
仲裁(Arbitration) ,CAN的发送总是以SOF(Start Of Frame)起始,紧跟器后是ID。在发送ID的同时,节点监听总线上的显隐状态,当监听到的状态与自己发送的不一致时,此节点将停止发送,进入只收模式。如下图所示,每一帧消息所具有的ID决定了此消息的优先级,发送最高优先级消息的节点获得总线最后的控制权,得以最终完整的发送自己的消息。
接收滤波(Filter) 。一个挂在总线上的节点可以监听到所有的消息(Message),但通常我们只对其中某些消息感兴趣,这时怎么办呢?CAN模块一般会提供接收滤波功能(Filter)。通过设置滤波寄存器,我们可以达到接收消息时,比对ID所有位,也可以只比对ID某些位,从而达到只接收ID与自己完全相同的消息,或接收ID与自己部分相同的消息的目的。利用这种机制可以给节点编组,给组成员群发消息。
1.2 速度快,距离远
CAN总线可以达到1Mbps的速率。总线速度随着传输距离增加而下降,下面是一些典型速率。在一个数据帧内可以传送8个字节的数据。
1000kbps 40m
500kbps 130m
100kbps 620m
50kbps 1300m
5kbps 10000m
2012年,Bosch又发布了CANFD(CAN with Flexible Data-rate),最高速率可以达到10Mbps,在一个数据帧内可以传送64字节的数据。2015 年 ,国际标准化组织(ISO)正式发布支持CAN FD的11898-1协议。
2. 帧类型
CAN协议很简洁,只包含4种帧类型。
数据帧(Data Frame) ,用来把数据从发送节点传送至接收节点。
远程帧(Remote Frame) ,一个节点用来请求其它节点发送数据。一个节点发送远程帧时会把Arbitration Filed最后一位RTR(置1),具有相同ID的节点会把数据发送到总线上。
错误帧(Error Frame) ,当一个节点检测到错误时会向总线发出错误帧,以通知其它节点。
过载帧(Overload Frame) ,用来在数据帧或远程帧之间插入延时。
帧间隔(Interframe Space), 不是一种帧类型。它是帧之间的间隙,由多个连续的隐性电平构成。
在编程时我们直接用到的就是数据帧和远程帧。软件编程比较简单,需要注意的是一般需要设置寄存器中的初始化请求位(Initialization request),使模块进入初始化状态,才能开始进行CAN模块的各种配置,初始化完成后退出初始化状态,进入运行状态。
3. CAN总线应用注意事项
3.1 终端匹配电阻
在CAN总线的两端要用120欧的电阻端接进行阻抗匹配,因为CAN总线长度一般会比较长,传输的信号速度快,特别是信号的边沿跳变部分频率很高。
传输线效应 平常我们总是认为电信号从一个引脚发出,通过导线,瞬间就会到达接收引脚,导线上的电压处处是相等的。但是当信号的频率很高,或者导线特别长,总之导线的长度接近传导信号波长的1/10后,我们就需要转变一下我们的观念,此时信号的传输主要受电缆特性阻抗的影响。
电缆特性阻抗 = 信号电场强度(伏特/米) / 磁场强度(安培/米)
电缆的特性阻抗与电缆的材质,粗细,线缆之间的距离有关,而与电缆的长度无关。电缆的特性阻抗还和信号的频率有关,但是当频率增加到一定数值时,特性阻抗不再变化。常用的带屏蔽双绞线的特性阻抗是120欧。
信号在阻抗不连续处会产生反射,所以要保持电缆阻抗的连续性,而且线缆终点需要用等于电缆特性阻抗的电阻进行端接,以消耗掉传输至端点的信号,否则信号会反射回去和后续发出的信号产生叠加,引起错误。
频率与波长对应关系
150K 2000m
500K 600m
1M 300m
10M 30m
端接电阻的另一个作用是可以使CAN总线从显性状态快速回到隐性状态。因为在显性状态下,两条线缆CAN_H, CAN_L之间的寄生电容会被充电,如果没有一个放电回路,总线不能快速回到隐性状态。
3.2 EMC防护
CAN常常工作在强干扰的工业环境中,采用屏蔽双绞线会极大的提升EMC防护性能。同时如果数字电路部分和CAN收发器之间用高速光耦隔离开,并且对两部分采用完全隔离的电源供电,那么可以把总线上的干扰最大限度地隔离在外部。
需要注意的是屏蔽层只能在一点接入大地。如果在多个点接地,那么通过大地会形成电流环路,反而会引入噪声。
3.3 时钟容差( Oscillator Tolerance)
总线的速度越高,需要的时钟精度越高。一般在低于125kpbs时可以用低成本的陶瓷震荡器(ceramic resonators),更高的速度下建议使用晶体振荡器(Quartz,or Crystal Oscilators)。
3.4 CAN模块死机现象
CAN模块内部有监控电路,总线上的异常,如短路等,会引起错误计数器增长。TEC(Transmit Error Counter), REC(Receive Error Counter)。当发送错误TEC计数超过255后,CAN模块进入BUS-OFF模式,此节点不能发送也不能接收。这样做的好处是可以避免由个别模块的问题引起整个总线不能工作。
芯片一般会提供两种恢复机制:自动和手动模式。比如在STM32单片机中,如果ABOM位设置为1,CAN模块将不断尝试自动恢复。如果ABOM=0,则需要程序进入CAN初始化模式,重新配置后,再退出初始化进入正常工作模式。
由于CAN总线非常可靠,不易出错,所以在测试阶段建议人为制造一些总线错误,比如短路,断路,强干扰之类,看程序是否能从异常状态下恢复。
为什么汽车电控单元间会选择使用CAN总线进行通信?
从事汽车相关行业的小伙伴们,都知道CAN总线(CAN Bus),它是当今汽车各电控单元之间通信的总线标准,现在几乎所有的汽车厂家都选择使用CAN总线通信。CAN总线为什么如此受汽车设计人员的青睐呢?它有哪些突出的优点呢?今天这篇文章,我们就和大家聊聊CAN总线的前世今生。
CAN总线中的“CAN”,不能写成小写的“can”,须要大写,因为它不是一个单词,而是英文“Controller Area Network”的缩写,中文翻译为“控制器局域网络”。但我们很少使用这个中文名称,一般都直接称为“CAN总线(CAN Bus)”。
CAN总线出生于德国鼎鼎大名的博世(BOSCH)公司,是伴随着汽车工业的发展而产生的。在二十世纪七八十年代,汽车工业蓬勃发展,汽车的电子控制单元逐渐增多。各电控单元之间的信号交换导致汽车线束的级数增加,复杂粗大的线束与汽车有限的布线空间之间矛盾越来越突出,繁多的线束导致电气系统可靠性下降,同时增加了重量,给汽车的制造和组装带来了不少的困难,不利于汽车轻量化的实现。
由于当时还没有哪一种总线标准适合解决汽车工业线束增加的问题,于是博世(BOSCH)公司、梅赛德斯-奔驰(Mercedes-Benz)公司、英特尔(Intel)公司及德国的两所大学的工程师和研究人员开始着手研究一种新型的、适合于汽车内部控制器间通信的总线标准。
1986年,博世(BOSCH)公司首次在美国汽车工程师协会(SAE,现称为:国际自动机工程师学会)的会议上提出了CAN总线标准。第二年,英特尔(Intel)公司推出了第一款CAN总线控制芯片-82526;紧接着,飞利浦半导体(Philips)公司推出了CAN总线控制芯片-82C200。
CAN总线将汽车内部各电控单元之间连接成一个局域网络,实现了信息的共享,大大减少了汽车的线束,如下面的示意图:
1993年,国际标准化组织(ISO)公布了CAN总线的国际标准ISO 11898,从此CAN总线成为一种国际标准被广泛应用。
CAN总线采用差分信号进行传输,其物理层传输介质由两条双绞线组成,一条称为CAN_H(CAN High),一条称为CAN_L(CAN Low)。CAN总线使用两条线之间的电压差来传输逻辑信号,在总线空闲的时候,CAN_H和CAN_L的对地电压都约等于2.5V,两条线之间的电压差为0V,这种电平称为隐性电平,表示逻辑“1”(没写错,就是逻辑“1”);当某个节点要发送信号时,会将CAN_H的电压拉高到3.75V左右,将CAN_L的电压拉低到1.25V左右,这样两条线之间的电压差为2.5V,这种电平称为显性电平,表示逻辑“0”,如下图:
当出现电磁干扰时,会同时影响CAN_H和CAN_L的电压,但对两条线间的电压差不会有太大影响,因此CAN总线的抗干扰能力很强,能够保证信号的正确传输。
CAN总线的网络节点一般由微控制器(单片机,MCU)、CAN控制器和CAN信号收发器组成,比如:51单片机+SJA1000+PCA82C250(5V)。随着CAN总线的广泛应用,现在很多单片机都在其内部集成了CAN控制器(比如:STM32系列单片机),所以只需要一个单片机和CAN信号收发器就可以了。
CAN总线的网络节点通过传输介质(CAN_H和CAN_L)相互连接,在长距离传输时,为了匹配传输电缆的特性阻抗,消除终端信号反射,需要在网络的终端增加终端电阻(一般120欧姆),如下图:
CAN总线的使用,简化了汽车的布线设计,节约了时间和资源成本;同时降低了线束的重量,便于汽车的轻量化设计;CAN总线的差分信号传输抗干扰能力强,提高了汽车电控系统的可靠性,同时其网络节点很容易增加或删减,设计的灵活性大大增强。
CAN总线的种种优点使其在汽车设计上得到了广泛的使用,并逐渐推广到航天、船舶、机械工业、卫生医疗及家用智能等等领域,是一种很被看好的总线标准,在以后的文章中我们也会和大家深入探讨CAN总线的知识。
相关参考文章:
CAN总线通信之详解数据帧(Data Frame)
如果你喜欢这篇文章,可以去官网(www.founderchip.com)下载本文PDF版本。
相关问答
51 单片机 与51 单片机 如何用 CAN总线 连接通讯?急啊?通过专门芯片如TJA1050,现在数据链路层上实现差分连接,找一个带Can控制器的51单片机就很容易实现。如果没有Can控制器的单片机,你可以用uart连接,自己根据通讯...
两个 单片机 做一个系统, 单片机 之间用什么方式通信最好啊!!-ZO...3、如果单片机之间通讯距离远的话,可以采用RS485通讯方式;如果单片机之间通讯距离近的话,两个单片机串口可以直接通讯。4、如果对通讯速度要求不高的话,也可以...
单片机 、光耦那么针对粮食储藏的特殊性,我们选择了粮仓内的温度和湿度作为主要监测参数,把粮虫发生情况作为辅助参数。整个监测系统由上位管理主机(HOST)、USB/...
什么是 单片机 ?它由哪几部分组成?什么是 单片机 应用系统?二者...单片机是一种路芯片,模集成电路技术把具有数处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱...
宝骏730 can总线 关闭怎么解决?CAN总线关闭时,主控单片机可以通过复位CAN控制器的方式重新开放总线。通常的做法是,单片机在每接收或发送一帧后,便去查询can控制器的发送错误计数器或接收错...
LKE CAN总线 关闭怎么重启?CAN总线关闭时,主控单片机可以通过复位CAN控制器的方式重新开放总线。通常的做法是,单片机在每接收或发送一帧后,便去查询can控制器的发送错误计数器或接收错...
CAN总线 的含义是什么?_作业帮[最佳回答]CAN总线简介:CAN的英文全称是:ControllerAreaNetwork,意思是区域网络控制器,最早是用于智能化住宅小区的信息传输,总线则源自计算机,因为其功能和...
CAN 如何连成 总线spanname=whlmid=whlm摘要:控制器局域网(CAN)WBR是一种有效支持分布式控制或实时控制的现场总线,WBR具有高性能和高可靠性的特点;随着现代汽车技...
单片机 的 总线 是什么?三总线就是通常所说的地址总线,数据总线,控制总线。在51单片机中,为了与并行接口的外设及扩展存储器传输数据就需要扩展三总线,P2P0合起来构成16位地址总线...
单片机总线 是什么?总线是一种内部结构,它是cpu、内存、输入、输出公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接。作用单片机的...作用...