CAN通信----基本原理

这篇具有很好参考价值的文章主要介绍了CAN通信----基本原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32标准库开发

文章链接:
STM32F103标准库开发----目录
STM32F103标准库开发----CAN总线通信实验----初始化/波特率
STM32F103标准库开发----CAN总线通信实验----发送和接收

资源链接:
本例程已经调试成功,下载即可使用。
STM32F103标准库开发----CAN通信收发实验----程序源码


一、CAN总线简介

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。
由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。
此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

CAN总线特点:

  1. 多主控制
  2. 系统柔软性
  3. 速度快,距离远
  4. 具有错误检测、错误通知和错误恢复功能
  5. 故障封闭功能
  6. 连接节点多

CAN总线标准

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。
ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
总线拓扑图
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

闭环总线网络----ISO11898

闭环总线网络高速、短距离,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120 欧的电阻。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

开环总线网络----ISO11519

开环总线网络低速、远距离,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

差分信号

CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。

当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时(0V),称为隐性电平(Recessive);
当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V时(2V),称为显性电平(Dominant)。

can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
差分信号的传输的优点:

  • 抗干扰能力强
  • 能有效抑制它对外部的电磁干扰
  • 时序定位精确

二、CAN 协议

CAN 帧格式

为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧。
它们的类型及用途说明如表所示:

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

1. 数据帧

数据帧由 7 个段构成,具体数据帧构成图如下:
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)帧起始(标准、扩展格式相同)

表示帧开始的段,1个位的显性位
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(2)仲裁段(标准、扩展格式不同)

仲裁段结构图如下图所示:
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

表示该帧优先级的段,标准格式扩展格式在仲裁段的构成有所不同。

标准格式 ---- 共12位11位基本ID1位RTR位

  • 帧ID
    标准格式的 ID 有 11 个位,从 ID28 到 ID18 被依次发送。
    禁止高7位都为隐性(禁止设定:ID=1111111XXXX)。

  • RTR位 ---- 远程传输请求位
    用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧

扩展格式 ---- 共32位11位基本ID1位SRR位1位IDE位18位扩展ID1位RTR位

  • 帧ID
    扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。

  • SRR 位
    只存在于扩展格式,它用于替代标准格式中的 RTR位。
    由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高

  • IDE 位 ---- 标识符扩展位
    用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式

  • RTR位 ---- 远程传输请求位
    用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧

(3)控制段(标准、扩展格式不同)

控制段结构图如下图所示:
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

表示数据的字节数及保留位的段,标准格式和扩展格式的构成有所不同。
6 个位构成:

标准格式1位IDE位1位r0保留位4位DLC数据长度码

  • IDE 位 ---- 标识符扩展位
    用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式

  • 保留位 ---- r0
    保留位必须全部以显性电平发送。
    但接收方可以接收显性、隐性及其任意组合的电平。

  • 数据长度码 ---- DLC
    表示发送/接收的数据长度(字节)。
    数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。

扩展格式2位 r0 和 r1 保留位4位DLC数据长度码

  • 保留位 ---- r0、r1
    保留位必须全部以显性电平发送。
    但接收方可以接收显性、隐性及其任意组合的电平。

  • 数据长度码 ---- DLC
    表示发送/接收的数据长度(字节)。
    数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。

数据长度码与数据的字节数的对应关系如下表所示:

数据长度码 数据字节数
DLC3 DLC2 DLC1 DLC0
D-显-0 D-显-0 D-显-0 D-显-0 0
D-显-0 D-显-0 D-显-0 R-隐-1 1
D-显-0 D-显-0 R-隐-1 D-显-0 2
D-显-0 D-显-0 R-隐-1 R-隐-1 3
D-显-0 R-隐-1 D-显-0 D-显-0 4
D-显-0 R-隐-1 D-显-0 R-隐-1 5
D-显-0 R-隐-1 R-隐-1 D-显-0 6
D-显-0 R-隐-1 R-隐-1 R-隐-1 7
R-隐-1 D-显-0 D-显-0 D-显-0 8

(4)数据段(标准、扩展格式相同)

数据段可包含 0~8 个字节的数据。
从 MSB(最高位)开始输出。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(5)CRC段(标准、扩展格式相同)

CRC 段是检查帧传输错误的帧。
由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
CRC 顺序—15位
CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

CRC 界定符
用于分隔的位

(6)ACK段(标准、扩展格式相同)

ACK 段用来确认是否正常接收。
由 1位 ACK 槽(ACK Slot) 和1位 ACK 界定符 构成。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
ACK 槽(ACK Slot)
发送单元在 ACK 段发送 2 个位的隐性位。
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,
通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。

ACK 界定符
用于分隔的位

(7)帧结束(标准、扩展格式相同)

帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

2. 遥控帧(远程帧)

接收单元向发送单元请求发送数据所用的帧。
遥控帧由 6 个段组成,遥控帧没有数据帧的数据段

具体遥控帧构成图如下:
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
遥控帧的 RTR 位为隐性位,没有数据段。

3. 错误帧

用于在接收和发送消息时检测出错误通知错误的帧。
错误帧由错误标志和错误界定符构成。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)错误标志

错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6个位的显性位。
被动错误标志:6个位的隐性位。

(2)错误界定符

错误界定符由 8 个位的隐性位构成。

4. 过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。
过载帧由过载标志和过载界定符构成。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)过载标志

6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。

(2)过载界定符

8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。

5. 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。
数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)间隔

3 个位的隐性位。

(2)总线空闲

隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。

(3)延迟传送(发送暂时停止)

8个位的隐性位。
只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

优先级

在总线空闲态,最先开始发送消息的单元获得发送权
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁:

  • 连续输出显性电平最多的单元可继续发送。
  • 优先级:显性(低电平)> 隐形(高电平)。
    can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。

数据帧 > 遥控帧

can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(2)标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。

标准格式 > 扩展格式

can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

(1)发送单元的工作

在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。

(2)接收单元的工作

在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。
如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

位时序

为了实现位同步,CAN 协议把每一个数据位的时序分解成如下图所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。
分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。

can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
采样点:
所谓采样点是读取总线电平,并将读到的电平作为位值的点。
位置在 PBS1 结束处。

各段的作用如下表所示:

can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

硬件同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。
在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32

重新同步

在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。
但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值。
相位超前时
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32
相位滞后时
can通讯,嵌入式基础开发,# CAN,CAN,嵌入式开发,STM32文章来源地址https://www.toymoban.com/news/detail-792704.html


到了这里,关于CAN通信----基本原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI嵌入式K210项目(5)-串口通讯

    串口通讯是平时大家进行调试最常用的方法,嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART)即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换,那么本章我们来了解下,本节课主要学习K210的串口通讯。 串

    2024年01月16日
    浏览(58)
  • 【嵌入式项目应用】__物联网小知识:不同通讯线的通讯距离是多少,你知道吗?

    目录 前言 不同协议通讯线的传输距离  无线传输协议与距离 1. 蓝牙 2. Zigbee 3. LoRa 4. Wi-Fi 5. 蜂窝网络 6. Sigfox 7. LoRaWAN (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。  在物联网中,通讯线的作用是 传输数据 、 信号 和 电能 ,以便在设备之间建立通信链路。 常见的

    2024年02月05日
    浏览(53)
  • 嵌入式学习笔记——SPI通信

    之前已经介绍了STM32的ADC、DMA、EXTI、TIME、NVIC、USART以及普通IO模式,此系列笔者还打算写最后三个大的内容,分别是SPI通信、IIC通信以及看门狗,后面就看大家的需求了,需要什么可以留在评论区,本文首先来介绍SPI的有关知识。 在通信协议分类的介绍中,提到过SPI,它是一

    2023年04月09日
    浏览(45)
  • 嵌入式学习笔记——IIC通信

    本文接着之前的M4系列介绍,对另外一个十分常见的通信总线进行一个介绍,就是IIC总线。 首先,还是找个免费劳动力来做一个官方的介绍,下面这一段话非常全面的介绍了IIC的各个特征,用之前提到的通信特征来总结,IIC是一种串行,同步,半双工,板级有线通信。与SPI对

    2024年02月06日
    浏览(71)
  • 【嵌入式基础】串口通信操作实例

    本文主要介绍流水灯实验和串口通信的实验过程,对串口协议和RS-232标准,RS232电平与TTL电平的区别,以及\\\"USB/TTL转232\\\"模块(以CH340芯片模块为例)的工作原理这些知识也有了一定的涉及。 目录 一、了解串口协议以及\\\"USB/TTL转232\\\"模块的工作原理 1、串口协议 2、RS-232标准 3、

    2024年02月01日
    浏览(61)
  • FANUC机器人嵌入式TCP/IP以太网通讯的具体方法

    在工业自动化领域中,FANUC机器人是广泛应用的一种先进设备。为了实现机器人与其他设备之间的通信,TCP/IP以太网是一种常用的通信协议。本文将介绍如何在FANUC机器人中实现嵌入式TCP/IP以太网通讯,并提供相应的源代码。 配置网络参数 首先,我们需要在FANUC机器人上配置

    2024年02月04日
    浏览(67)
  • 五种嵌入式经典通信总线协议

    并行通信和串行通信是两种不同的数据传输方式: 并行通信:并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输,同时进行。这样可以在一个时钟周期内传输多个比特,提高传输速率。并行通信常用于短距离高速数据传

    2024年01月17日
    浏览(52)
  • 嵌入式五大通信协议详解 (一) UART

    GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二)属性声明 GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏 数组存储与指针学习笔记(一)数据类型与存储、数据对齐、数据移植、typedef   通用异步收发传输器

    2024年02月05日
    浏览(54)
  • 【无标题】嵌入式开发-IIC通信介绍

    IIC(Inter-Integrated Circuit)是一种两线式串行总线协议,用于连接微控制器及其他外围设备。在IIC总线上的数据传输速率可以是标准模式(100Kbit/s),快速模式(400Kbit/s)和高速模式(3.4Mbit/s)。 IIC的起始和停止条件由SCL(Serial Clock Line,串行时钟线)和SDA(Serial Data Line,串行

    2024年02月10日
    浏览(51)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包