CAN总线学习

研究CAN总线

Vector E-Learning - Welcome

https://zhuanlan.zhihu.com/p/180515614

CAN的相关视频介绍

视频1

https://www.bilibili.com/video/BV1KV411J7E1?spm_id_from=333.337.search-card.all.click

常通信的放一起。

动力CAN

娱乐CAN

车身CAN

网关负责将不同的通信协议转换

CAN线是广播。

LIN线,有主从。主从机机制,只有一个主机。

视频2

https://www.bilibili.com/video/BV1nq4y1W7oo?spm_id_from=333.337.search-card.all.click

CPU — CAN控制器 — 收发器

收发器: 负责管理电平拉高拉低,成对使用。

控制器:主要是控制协议,用来组包。 (CRC校验什么的东西。)

CPU : 只发数据,ID

CPU主要发控制内容,控制器固定将数据组成帧格式,收发器拉高拉低。

一般CPU和控制器是一起的。

CAN 500kbps , 是闭合回路 ,终端电阻120欧姆, 两边都有终端电阻。

CAN 125kbps 开放回路。

相关接线:

驱动CAN : HIGH 桔黑 ; LOW 桔棕

舒适CAN :HIGH 桔绿 ;LOW 桔棕

信息娱乐CAN : HIGH 桔紫 ;LOW 桔棕

驱动CAN包含:发动机,变速箱,ABS。

舒适CAN : 左前门,右前门,空调。

协议

898协议

519协议

不同的标准之间无法通信,因此网关可以解决这种问题。

汽车中有很多情况是需要广播信息的,因此CAN这种广播的通信方式,比较适合。

CAN可以节约大量的线。

这其实跟电网的建设是类似的,与电网中的母线类似。

CAN 网关相关知识

共轭电感,对信号进行处理

61R9 , 61.9的电阻,2个,就算120欧姆,相当于终端电阻。

CAN芯片,将芯片的差分信号转换成0,5V的信号。TJA1040,TJA1050

控制器,筛选信号是否要。

视频3

https://www.bilibili.com/video/BV1g4411F72c?spm_id_from=333.337.search-card.all.click

CAN通信实验,有代码。

跟普通的配置串口差不多,只是有不同的工作模式。

视频4

https://www.bilibili.com/video/BV1Rx411R75t?p=57

can通信实验,STM32开发板,研究这里的代码。

重要文档《can入门教程.pdf》:(需要阅读2~3遍)

G:\IOT\学习视频\CAN总线\【正点原子】探索者STM32F407开发板资料 资料盘(A盘)\6,软件资料\7,CAN学习资料\can入门教程.pdf

ST板子的开发资料:《STM32F4xx中文参考手册.pdf》

具体代码路径:《G:\IOT\学习视频\CAN总线\【正点原子】探索者STM32F407开发板资料 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本\实验27 CAN通信实验\HARDWARE\CAN\can.c》

基础知识介绍

CAN : controller area network 的缩写

两个标准:

  • ISO11898 ,高速通信标准,125Kbps ~ 1Mbps
  • ISO11519-2 ,低速通信标准, 125Kbps以下。

CAN的特点:

CAN具有高可靠性,广泛应用于汽车电子,工业自动化,船舶,医疗设备,工业设备等方面。

  • 多主控制,总线空闲时,所有单元都可以发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非地址) 决定优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜的(优先级高的)单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
  • 系统柔软性,连线总线的单元,没有类似“地址”的信息,在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变。
  • 速度快,距离远。最高1Mbps (<40m),最远10km(<5Kbps)
  • 具有错误检测,错误通知,错误恢复功能。所有单元都可以检测错误,检测出错误的单元会立刻通知其他所有单元,正在发送消息的单元一旦检测出错误,会强制结束当前的发送,强制结束发送的单元会不断反复的重新发送次消息直到成功发送为止。
  • 有故障封闭功能,CAN可以判断出错误的类型是总线上暂时的数据错误,还是持续的数据错误,由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
  • 连接节点多,CAN可以同时连接多个单元的总线,可连接的单元总数理论上没有限制,但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加,提高通信速度,可连接的单元数减少。

物理层特征

先讨论ISO11898标准。

有两根线,CAN_L, CAN_H 两根线上的电位差来判断总线电平。

显性:对应逻辑0,CAN_H 和 CAN_L 的差值为 2V左右。 3.5 , 1.5V

隐性:对应逻辑1,CAN_H 和 CAN_L 的差值为0V , 2.5V

显性电平具有优先权,只要一个单元输出显性电平,总线就为显性。(这个跟IIC中时钟线拉低是类似的。)

CAN 起止端都有一个120欧姆的终端电阻,来做阻抗匹配,减少回波反射。

CAN的帧种类

帧类型 帧用途
数据帧 用于发送单元向接受单元传送数据的帧
遥控帧 用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧 用于当检测出错误时,向其他单元通知错误的帧
过载帧 用于接收单元通知其尚未做好接收准备的帧
间隔帧 用于将数据帧及遥控帧与前面的帧分离开来的帧。

帧格式:标准,扩展。

  • 标准:ID 只有11个位
  • 扩展:ID 有29个位

视频主要介绍数据帧格式,其他帧格式,参考书籍《can入门教程.pdf》

数据帧由7个段组成:

  1. 帧起始
  2. 仲裁段,表示优先级,ID的高7位不能都是1
  3. 控制段
  4. 数据段 , 最多8个字节的数据。
  5. CRC段
  6. ACK段
  7. 帧结束

显性 D: dominance ,0, 有压差

隐性 R: recessive , 1 , 压差为0

帧格式分析,可以看代码再回来看。

总线仲裁

规律

  1. 总线空闲时,最先发生的单元获得发送优先权,一旦发送,其他单元无法抢占。
  2. 如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级

从ID开始比较如果ID相同,则继续往下比较。

位时序

位时序 -> 波特率

这里跟硬件更相关,用到时再研究。

其实也就是一个位,要怎么表示? 要多长?

  • 同步段(上升沿,下降沿)

  • 传播时间段

  • 相位缓存段1

  • 相位缓冲段2

这些段又由可称为Time Quantum(以下称为Tq)的最小时间单位构成

位时间 = 1/波特率

也就是说,这是用来区分一个很长的1,代表的是多少个1。

STM32 CAN 控制器

模式

  • 工作模式

    • 初始化模式

    • 正常模式

    • 睡眠模式

  • 测试模式

    • 静默模式,只收,不发。

    • 还回模式,只发,不收,收的永远是自己发的内容。

    • 还回静默模式,不发,不收,就自己给自己发。

  • 调试模式

代码阅读

初始化函数:CAN1_Mode_Init

发送函数: u8 CAN1_Send_Msg(u8* *msg*,u8 *len*)

接受函数:u8 CAN1_Receive_Msg(u8 **buf*)

主函数:int main(void)

书籍阅读

《can入门教程.pdf》

CAN是什么

CAN是Controller Area Network的缩写, 是ISO国际标准化的串行通信协议.

当前汽车产业中, 出于安全性,舒适性,方便性,低公害,低成本的要求, 各种各样的电子控制系统被开发了出来, 由于这些系统之间通信所用的数据类型 及 对可靠性的要求不尽相同, 由多条总线构成的情况很多, 线束的数量随之增加, 为适应"减少线束数量" , “通过多个LAN , 进行大量数据的高速通信” 的需要, 1986年博世开发处CAN通信协议.

有两个标准:

  • ISO11898
  • ISO11519

请添加图片描述

CAN 应用实例

请添加图片描述

总线拓扑图

请添加图片描述

CAN的特点

  • 多主控制,

    总线空闲时,谁都可以发消息,最先访问总线的单元获得发送权

    最先访问总线的单元 , 可获得发送权 , CSMA/CA

    多个单元同时开始发送时, 发送高优先级ID消息的单元可获得发送权.(实际上就是看谁的1多, 这个ID刚好在报文而前面)

CSMA/CA(Carrier Sense Multiple Access with Collision Avoid,即带有冲突避免的载波侦听多路访问)是一种数据传输时避免各站点之间数据传输冲突的算法,其特点是发送包的同时不能检测到信道上有无冲突,只能尽量“避免”。例如,如果计算机A和计算机C同时给计算机B发送一个控制消息,它们将同时到达计算机B,导致冲突的发生。当这种冲突发生时,发送者可以随机等待一段时间,然后重发控制消息。因为控制消息比数据敏要短得多,所以发生第二次冲突的可能性也要比传统以太网要小很多。最终将有一个控制消息正确到达,然后计算机B发送一个响应消息。通常CSMA/CA利用ACK信号来避免冲突的发生,也就是说,只有当客户端收到网络上返回的ACK信号后才确认送出的数据已经正确到达目的

  • 消息的发送

    固定格式发送

    仲裁机制.

  • 系统的柔软性

    与总线相连的单元没有地址, 可以随便添加, 添加之后,其他设备的软硬件都不需要做什么改变.

  • 通信速度

    根据整个网络的规模, 可设定合适的通信速度.

    在同一网络中, 所有单元必须设定成统一的通信速度 , 如果有一个不一样, 那么就会影响整个网络, 因为会出现大量的错误包.不同的网络间, 可以有不同的通信速度.

  • 远程数据请求.

    可通过遥控帧, 请求其他单元发送数据.

  • 错误检测功能, 错误通知功能, 错误恢复功能

    所有单元都可以检测错误.

    检测出错误的单元会立即同时通知其他所有单元

    正在发送消息的单元一旦检测出错误, 会将至结束当前的发送, (拉低电平) , 强制结束发送的单元会不断的重发.

  • 故障封闭

    CAN可以判断出错误的类型是总线上暂时的数据错误 还是 持续的数据错误

    由此功能, 当总线上发生持续数据错误时, 可将引起此故障的单元从总线上隔离出去.

  • 连接

    CAN 总线是可同时连接多个单元的总线. 通信速度与连接个数成反比.

错误

错误状态的种类

  • 主动错误状态

    可正常参加总线通信, 输出主动错误标志

  • 被动错误状态

    能参与总线通讯, 但不积极发错误通知.

    被动错误状态单元 检测出错误, 但主动错误状态单元没有发现错误, 总线也被认为是没有错误的.

    输出被动错误标志.

    发送结束后 ----- 下次发送前 , 间隔帧期间内, 必须插入延迟传送(8个隐性位)

  • 总线关闭态

    不能参与总线通信

    收发均被禁止

错误状态是哪一种, 情况 , 需要根据计数器来判断.

单元错误状态 发送错误计数值(TEC) 接收错误计数值(REC)
主动错误状态 0~127 且 且 0~127
被动错误状态 128~255 或 或 128~255
总线关闭态 256~

请添加图片描述

这些数值的计数方法:

请添加图片描述

CAN协议的基本概念

请添加图片描述

请添加图片描述

CAN协议

请添加图片描述

数据帧与遥控帧的不同

  • 遥控帧的RTR位为隐性位, 没有数据段
  • 遥控帧的长度码 表示的是它请求的数据帧的长度.
  • 没有数据段数据帧可以用于各个单元之间的连接确认.

猜你喜欢

转载自blog.csdn.net/qq_38307618/article/details/125122651