各位小伙伴大家晚上好
这段时间学了CAN一周多了
之前没有CAN通信基础
根据STM32正点原子的课就能学习CAN,
但是吧,也要多多看一些文章帖子,这样才能学明白一些。
一。啥是CAN
CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
二。CAN通信的特点
①,多主控制
总线空闲时,所有单元都可发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非地址)决定优先级。
两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。
仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作
②,系统柔软性
在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变。
③,速度快,距离远
④ ,具有错误检测、错误通知和错误恢复功能
所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
⑤,故障封闭功能
CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
⑥,连接节点多
CAN 总线是可同时连接多个单元的总线。
可连接的单元总数理论上是没有限制的。
但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。
降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
三。CAN通信的物理层特征
电平(显性电平,隐性电平)
如图所示 注意:CAN_H为3.5V ; CAN_L为1.5V
(1)CAN2.0B规范定义了两种互补的逻辑数值:显性和隐性
(2)传送的状态
同时传送显性和隐性位时,总线呈现显性状态
同时传送显性状态位时,总线呈现显性状态
同时传送隐性状态位时,总线呈现隐性状态
(3)显性数值表示逻辑0,隐性数值表示逻辑1。
CAN总线为隐性(逻辑1)时,CAN_H和CAN_L的电平都为2.5V(电位差为0V)
CAN总线为显性(逻辑0)时,CAN_H和CAN_L电平分别为3.5V和1.5V(电位差为2.0V)
四。帧的种类介绍
1.用途和类型介绍(一共有五种类型的帧)
1.数据帧和遥控帧有标准格式和扩展格式两种格式
其中标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID
2.其中最常用,也是最复杂的是数据帧
五。位时序(就是设置波特率)
1,基础知识
(1)位时序定义
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序
(2)一个位一般可以分为如下四段:
(3)这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。
(4)位时间和波特率的关系(倒数关系)
位时间=1/波特率,因此,知道位时间,我们就可以知道波特率。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。
通过设定位时序,多个单元可同时采样,也可任意设定采样点。
2.位时序一个位
(下图中采样时间加大或减少量的最大值就是SJW)