原创 1句话,揭开CAN总线的神秘面纱

2021-4-8 16:30 152 1 1 分类: MCU/ 嵌入式

关键词:CAN总线 现场总线 仲裁 多主 ID

摘要:用一句话概括CAN总线的基本特征:CAN总线是一种基于“先来后到、无损仲裁”机制、多主(无主)结构、具有帧ID、应用数据最多8个字节、采用差分电平的国际标准现场总线。虽然没有面面俱到,但体现了CAN总线的重点特色,有利于对CAN总线有一个清晰的认识。

1.总述

一句话:

CAN总线是一种基于“先来后到、无损仲裁”机制、多主(无主)结构、具有帧ID、应用数据最多8个字节、采用差分电平的国际标准现场总线。

2.先来后到、无损仲裁

这是孔丙火(微信公众号:孔丙火)的一个体会。“先来后到”是指在总线空闲的时候,任何一个CAN节点都可以发起总线通信,白话就是都可以发送数据,谁先来,谁先发,一个节点已经在发送了,就不能被打断了。“无损仲裁”是解决如果两个节点同时发的时候,怎么来决定到底是谁发送。仲裁就是通过数据帧的ID部分来比较,直观来看,就是ID小的能发出去,ID大的自动退出,这与帧ID的机构、CAN驱动电路有关。所谓“无损”,就是一个节点仲裁失败后,它要发送的数据不会丢失,而是等到CAN总线的下一个空闲期再尝试发送,直至发送成功。所以,一般对实时性要求高的节点可以把其帧ID设置的小一些,保证在发送发生冲突的时候,其数据可以优先发出去。

3.多主(无主)结构

其实,无主是一个特色,无主也可以说成无从。单单说多主,特色并不是很明显,其他现场总线,像Profibus,也是多主结构,但Profibus是多主多从,而CAN总线是多主无从,每个节点的地位相对来说是平等,都可以主动发起数据,区别就在于帧ID的优先级不同。

4.ID和应用数据

孔丙火(微信公众号:孔丙火)认为,说起CAN总线,不能不提帧ID,这是无损仲裁的一个基础。CAN总线数据帧大体上可以分为帧ID和应用数据两个部分,之所以说大体上,是因为还包括帧起始、ACK位、CRC位等,那些不是我们阐述的重点。

ID的一个用途就是仲裁,说起仲裁,不得不说总线电平。CAN总线具有位同步机制,若总线上有两个以上的节点同时发送数据,则进行逐位比较,先发送帧ID部分,且先发送帧ID的高位,每个节点发送一位后,同时会接收这一位,如果要发送的电平与接收到的电平不一致,则认为自身仲裁失败,退出发送,等待下一次发送。总线电平分为隐性电平和显性电平,隐性电平逻辑上为1,显性电平逻辑上为0,最先发送显性电平的节点会取得仲裁胜利,这主要是因为显性电平可以覆盖隐性电平,孔丙火在之前的文章中专门做过阐述。

应用数据最多8个字节,所以,CAN总线是一个短帧结构。短帧结构实时性高,抗干扰性更好。当然,其也有缺点,当需要发送大量的数据的时候,传输效率就会低了,这方面就不如Modbus了,因为Modbus一次最多可以发送100多个字(word)的数据。

5.学习CAN总线的要点(一点浅见)

如果是使用CAN总线,孔丙火(微信公众号:孔丙火)认为,只需要对CAN的一些知识有一个大体的了解即可,对于不同的项目再有针对性地去深入研究,不需面面俱到,因为CAN总线说起来简单,其实细节有很多,单就一个仲裁时序和同步的问题,想起来都很少脑筋,以前感兴趣的时候,在网上查过,没几篇文章能讲清楚。但实际使用,无需关心这些问题,如果是PLC上使用,根据手册做相应的配置即可,如果是单片机使用,麻烦一点的,需要自己写寄存器,像STM32这种操作简单的,直接调库函数就行了。但像位时间采样点这种基本的问题,还是要知道的。

如果是研究总线本身的,或者是做CAN总线监测设备(不单单是数据监测,还有总线质量等)的,则需要对CAN总线本身的特性,做比较深入的研究了。 

文章在公众号(孔丙火)同步推出,欢迎查看更多系列文章。

单片机、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。



文章评论0条评论)

登录后参与讨论
相关推荐阅读
kws.1982_674886565 2021-04-12 13:17
CAN总线和Modbus总线,该如何选择
关键词:CAN总线 现场总线 Modbus 实时性摘要:CAN总线和Modbus总线是工控领域常用的两种现场总线,简单的说哪个好哪个不好是没有意义的,要根据不同的应用场景来做选择。CAN总线是无主结构...
kws.1982_674886565 2021-03-21 21:57
其实ST的HAL库与FreeModbus移植很配哦--FreeModbus从站设计(8)
FreeModbus从站设计(8)-用HAL库函数理清Modbus的数据收发流程关键词:FreeModbus STM32F103 CubeMX HAL库1.基本框图如图1所示,HAL库的函数中,与Fr...
kws.1982_674886565 2021-03-20 13:07
FreeModbus从站设计(7)-如何让RTU的定时器正常工作起来
STM32F103、FreeModbus从站设计(7)-如何让RTU的定时器正常工作起来关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 移植1.基本原理在Cube...
kws.1982_674886565 2021-03-18 21:34
STM32F103、FreeModbus从站设计(6)-让串口和Modbus初始化的参数同步起来
FreeModbus从站设计(6)-让串口和Modbus初始化的参数同步起来 关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 移植   1.基本原理 在...
kws.1982_674886565 2020-12-26 14:07
STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil工程
关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 移植摘要:STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil。详细...
广告
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条