技术文档

单片机 can 单片机外围模块漫谈之三,CAN总线

小编 2024-11-25 技术文档 23 0

单片机外围模块漫谈之三,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(控制器局域网)

控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。CAN创建在基于信息导向传输协定的广播机制(Broadcast Communication Mechanism)上。其根据信息的内容,利用信息标志符(Message Identifier,每个标志符在整个网络中独一无二)来定义内容和消息的优先顺序进行传递,而并非指派特定站点地址(Station Address)的方式。因此,CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

优势及特点

特点:

1.CAN是一个用于连接电子控制单元(ECU)的多主机串行总线标准。电子控制单元有时也被称作节点。CAN网络上需要至少两个节点才可进行通信。节点的复杂程度可以只是简单的输入输出设备,也可以是包含有CAN交互器并搭载了软件的嵌入式组件。所有节点通过两根平行的总线连接在一起。两条电线组成一条双绞线,并且接有120Ω的特性抗。

2.数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序。

3.多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞。

4.通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M)。

5.CAN总线传输介质可以是双绞线,同轴电缆,CAN总线适用于大数据量短距离通信或者长距离小数据量,实时性要求比较高,多主多从或者各个节点平等的现场中使用。

优势:

1.可在各节点之间实现自由通信:CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识符可由11位或29位二进制数组成,因此可以定义2或2个以上不同的数据块,这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。

2.结构简单:只有2根线与外部相连,并且内部集成了错误探测和管理模块。

3.数据纠错:采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作,每帧数据都有CRC校验及其他检错措施,保证了数据传输的高可靠性,适于在高干扰环境下使用。

4.完成对通信数据的成帧处理:CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。

5.节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其他操作不受影响,可以点对点,一对多及广播集中方式传送和接受数据。

CAN总线的数据格式与基本工作原理

数据格式:

1.CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔。

2.数据帧:结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。标准帧为11位,扩展帧为29位。这也是我们在使用中接触最多的格式。

3.远程帧:与数据帧相比没有数据段,结构上由7个段组成。当你需要总线上的一个节点向你发送数据,使用次节点的ID,发送一帧远程帧。

4.错误帧:虽然CAN总线是可靠性很高的总线,但是依然会出错:CAN总线上会出现5种错误。

5.过载帧和帧间隔:过载帧:当某个节点没有做好接收下帧数据将发送过载帧通知节点。帧间隔:只存在于数据帧与远程帧之间,用于帧之间的分离。

基本工作原理:

跟其他总线一样,CAN总线的通信也是通过一种类似于“会议” 的机制实现的,只不过会议的过程并不是由一方(节点)主导,而 是,每一个会议参加人员都可以自由的提出会议议题(多主通信模式),二者对应关系如下:

仲裁与优先级

假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是

结论:从该分析过程得出结论是:帧ID值越小,优先级越高,对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理。

CAN总线上的电平

CAN2.0A/B标准规定:总线空闲: CAN_H和CAN_L上的电压为2.5V

传输数据 : 显性电平(逻辑 0):CAN_H 3.5V,CAN_L 1.5V

隐性电平(逻辑 1):CAN_H 2.5V,CAN_L 2.5V

CAN收发器:

照BOSCH CAN总线标准将0或1逻辑信号转换为标准中规定的电平,同时有反馈功能。

CAN总线的硬件抗干扰:

(1)在电路中增加共模电感。

(2)使用更高精度的电阻。

注意:并不是每个节点都需要增加电阻,只需要在总线相聚最远的两个节点使用电阻即可。

电阻也不是固定的120欧姆,根据导线的材质有关。

CAN总线负载率计算

计算例子:

假设CAN总线波特率为250Kbit/s,总线报文发送时间间隔为10ms, 报文为数据帧(8个字节数据),那么10ms内总线能够支持的最大报文数量为多少?

第一步:根据通信波特率计算10ms总共可以发送多少bit (250000/1000)*10 = 2500bit

第二步:计算最长的一帧报文有多少个bit

1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data

+ 16crc + 2ack + 7eof = 128bit

第三步:计算10ms内可以支持的报文数目

2500/128 ≈ 19

结论:

由上面的计算可知,当10ms间隔的报文数量超过19条时,就会出现丢帧,总线饱和。计算报文数量也是设计CAN网络所要考虑的,可以查阅相关文献看负载率在多少时合适!

相关问答

can 总线采用什么触发机制?

can总线采用时间触发机制。分析了CAN总线的时间触发机制,基于8052单片机和CAN控制器SJA1000设计了时间触发机制的实现方案,给出了网络中基本周期中可传输的最...

汽车 单片机 CAN 总线(汽车维修与检测)_汽配人问答

[最佳回答]我就是搞汽车电子的,首先CAN总线肯定是必须的,因为在汽车中通讯最常用的就是CAN总线,不过CAN的定义也就是那么一点,在汽车中关于总线的内容主要还是...

can 控制器的功能是什么_车坛

CAN控制器的作用是接收控制单元中微处理器发出的数据,处理数据并传给CAN收发器。同时,CAN控制器也接收CAN收发器收到的数据,处理数据并传给微处理器...

C8051F043的 CAN 要设置成500K的波特率该怎么设置?

OSCXCN=0x67;//系统时钟不分频CAN0ADR=BITREG;CAN0DAT=0x0803;//波特率500K(系统时钟22.1184M)反正我算了两遍没算出来这个数字,但...

can 线两端为什么都需要终端电阻?

如果单片机本身带有CAN接口,那么外部加好CAN收发器、连好线、跳好终端电阻,之后配置好相应的寄存器,就能通信了。如果单片机自身没有CAN接口,那么外部还需要...

can 控制器的功能是什么?

[最佳回答]CAN控制器的功能是从控制单元(查成交价|参配|优惠政策)中的微处理器接收数据,处理数据并将其发送到CAN收发器。同时,CAN控制器还接收CAN收发器接收...

请教下 单片机 大神,keyscan函数里面的什么意思?

keyscan是键盘扫描函数,switch(b)里面是内容是表示你当前按下的恩健,并饭返回按键值。P0=table【恩健回的值】然后查得table表里的数据然后赋值给P0口。k...

两个 单片机 做一个系统, 单片机 之间用什么方式通信最好啊!!-ZO...

3、如果单片机之间通讯距离远的话,可以采用RS485通讯方式;如果单片机之间通讯距离近的话,两个单片机串口可以直接通讯。4、如果对通讯速度要求不高的话,也可以...

电动车控制器上的CANL,CANH是什么意思,接仪表的什么地方?TXD,RXD接仪表的什么地方?

CANLCANH是CAN总线的两个信号线,RXD指的数据接收,TXD指的数据发送,常见于单片机。具体接法按实际情况CANLCANH是CAN总线的两个信号线,RXD指的数据接收,TX...

can CAN 总线控制器和驱动器-ZOL问答

一般认为可以满足要求CAN速率1Mbps,考虑有别的设备,就算是一半带宽传数据,也有...不妨到我们这个电子世家单片机群:255847245,里面的同行或许能帮得到你。确实...

猜你喜欢