当前位置: 首页 > news >正文

28:CAN总线入门一:CAN的基本介绍

CAN总线入门

  • 1、CAN总线简介和硬件电路
    • 1.1、CAN简要介绍
    • 1.2、硬件电路
    • 1.3、CAN总线的电平标准
  • 2、帧格式
    • 2.1、数据帧(掌握)
    • 2.2、遥控帧(掌握)
    • 2.3、错误帧(了解)
    • 2.4、过载帧(了解)
    • 2.5、帧间隔(了解)
    • 2.6、位填充(掌握)
  • 3、位同步
    • 3.1、硬同步
    • 3.2、再同步
  • 4、仲裁
    • 4.1、先占先得
    • 4.2、非破坏性仲裁
    • 4.3、数据帧与遥控帧
    • 4.4、标准帧与扩展帧

1、CAN总线简介和硬件电路

1.1、CAN简要介绍

CAN总线是一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。

  • 总线的特点:

    两根通信线(CAN_H、CAN_L),线路少
    差分信号通信,抗干扰能力强
    高速CAN(ISO11898):125k~1Mbps, <40m
    低速CAN(ISO11519):10k~125kbps, <1km
    异步,无需时钟线,通信速率由设备各自约定
    半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
    11位/29位报文ID,用于区分消息功能,同时决定优先级
    可配置1~8字节的有效载荷
    可实现广播式和请求式两种传输方式
    应答、CRC校验、位填充、位同步、错误处理等特性
    

1.2、硬件电路

  1. 连接节点
    在这里插入图片描述在这里插入图片描述
    单片机将数据信号(0/1)通过TX传输到CAN收发器,收发器将传输来的信号进行判断处理成差分信号电压差,逻辑1和逻辑0的差分信号电压差是不同的,然后减差分信号传输到CAN总线上。

  2. 高速CAN
    在这里插入图片描述
    如上图所示:
    ①每个设备通过CAN收发器挂载在CAN总线网络上
    ②CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的
    ③CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
    高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
    ⑤单片机将数据信号(0/1)通过TX传输到CAN收发器,收发器将传输来的信号进行处理成差分信号,然后传输到CAN总线上
    ⑥高速CAN的数传输速率快,但是传输的距离断,最远只有40m

  3. 低速CAN
    在这里插入图片描述
    如上图所示:
    低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻
    ②低速CAN的数据传输慢,但是传输的距离远,可以传输1km

1.3、CAN总线的电平标准

单片机将数据信号(0/1)通过TX传输到CAN收发器,收发器将传输来的信号进行处理成差分信号,然后传输到CAN总线上。而这差分信号即2线上面的电压差(Vcan_H - Vcan_L)。传输规定:若Vcan_H - Vcan_L 小于等于0,就代表总线上为逻辑电平1;若Vcan_H - Vcan_L 大于0,就代表总线上为逻辑电平0;
如下图所示:
在这里插入图片描述
在这里插入图片描述
为什么CAN总线使用的是差分信号喃?
最主要的原因就是抗干扰的能力强,传统的传输使用的是单端信号:一根信号线和一根地线,比如串口通信UART。信号线对比地线的电压来传输逻辑电平是1还是0,比如对比地线电压是3.3v,那么传输的信号是逻辑1,对比地线电压是0v,那么传输的信号是逻辑0。若在传输的过程中被电磁信号干扰由0v变为3.3v,发送端发送的是逻辑0,而接收端接收的是被干扰后的逻辑1。而CAN总线采用差分信号就是为了避免这种干扰。
例如下图所示:
在这里插入图片描述
如图所示:虽然存在干扰信号,但是干扰使得Vcan_H和Vcan_L的电平增量是一样大的,而逻辑电平是由他们的电压差决定的,所以干扰后,他们的电压差是不变的,即逻辑电平也是不变的。(前提是差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线)

2、帧格式

1、CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。
2、CAN总线上有5种不同的报文类型(或“帧”):数据帧,远程帧,错误帧,过载帧和帧间隔。其中错误帧、过载帧、帧间隔都是由硬件自动完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。数据帧和遥控帧有标准格式与扩展格式。标准格式有11位标识符,扩展格式有29位标识符

在这里插入图片描述

2.1、数据帧(掌握)

数据帧由2中帧格式:标准帧和扩展帧

  1. 标准帧
    在这里插入图片描述
  2. 扩展帧
    在这里插入图片描述SRR位代替RTR位,因为RTR挪到后面去了,SRR为隐形1
    IDE位用于区分标准帧和扩展帧,若为扩展帧,则IED为隐形1
    和标准帧进行对比,扩展帧多了SRR,ID多了7位,R1,R0。

数据帧总结如下:

在这里插入图片描述

2.2、遥控帧(掌握)

在这里插入图片描述

2.3、错误帧(了解)

总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备
在这里插入图片描述

2.4、过载帧(了解)

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失
在这里插入图片描述
发送6位显性电平0拉开电位,让发送方发送不了数据到CAN总线上面,主要延缓了发送方的数据发送

2.5、帧间隔(了解)

将数据帧和遥控帧与前面的帧分离开,即连续发送的数据帧之间有帧间隔。

2.6、位填充(掌握)

在这里插入图片描述

3、位同步

位时序:为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。

在这里插入图片描述

3.1、硬同步

每个设备都有一个位时序计时钟秒表,秒表一圈的时间正好也是一位数据的发送时间,而秒表的时钟也被分为和数据位相同的4个区域。发送设备每发送一位数据,秒表也正好转动一圈,并且数据位的每一段和秒表的时区一一对应。如下图所示:
在这里插入图片描述

当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的中间位置,秒表时区与数据位的每段保持同步。
在这里插入图片描述

接收设备是看这个秒表进行对数据采样的,每当秒表的秒钟指向PBS1和PBS2时间段之间,设备就开始对数据位采样一次,如果数据位与秒表时区段对齐了,那么每次采样都是准确的数据位。若数据位与时区没有对齐,那么可能采样的数据不准确。如下图所示:
在这里插入图片描述
如果没有对齐,如上图所示:若接收设备接收到数据位的PBS1时,设备秒表却指向SS,当再过5.5个Tq时间后,设备接收到正好是数据位的变化,而设备秒表却指向了PBS1和PBS2之间,此时正好是采样时间,所以此时采样到的是电平跳变,那么采样到的数据是0还是1喃?这不能确定,所以这存在着很大的误差。

3.2、再同步

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW=1~4Tq)通过加长PBS1段,或缩短PBS2段,以调整同步。例如接收设备的秒表指针转动慢一些,当接收设备接收到下一位数据的跳变边沿时,设备秒表的秒钟却还没有指向SS中心。如下图所示:

在这里插入图片描述
想要解决这种误差,那么就将PBS2缩短即可,缩短到秒针正好指向SS中心。

4、仲裁

CAN总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源?解决的方法是1、先占先得。2、非破坏性仲裁。

4.1、先占先得

在这里插入图片描述

4.2、非破坏性仲裁

在这里插入图片描述
当2个设备同时给总线发送数据时,都发送的是标准帧格式,那么通过仲裁段的数据来判断谁能成为赢家。如下图所示:
在这里插入图片描述

4.3、数据帧与遥控帧

在这里插入图片描述

4.4、标准帧与扩展帧

在这里插入图片描述

总结:不论标准帧与扩展帧进行对比,还是数据帧与遥控帧对比。他们的仲裁结果都是按照上面的仲裁规则而得出的。

相关文章:

28:CAN总线入门一:CAN的基本介绍

CAN总线入门 1、CAN总线简介和硬件电路1.1、CAN简要介绍1.2、硬件电路1.3、CAN总线的电平标准 2、帧格式2.1、数据帧&#xff08;掌握&#xff09;2.2、遥控帧&#xff08;掌握&#xff09;2.3、错误帧&#xff08;了解&#xff09;2.4、过载帧&#xff08;了解&#xff09;2.5…...

RK3568平台(音频篇)lineout无声调试

一.声音硬件框架 硬件HP_MUTE已强制拉低。 二.设备树配置 es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card";rockchip,card-name = "rockchip-es8388";hp-det-gpio = <&gpio1 RK_PD2 GPIO_ACT…...

ros2-7.5 做一个自动巡检机器人

7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求&#xff1a;做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息&#xff0c; 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…...

服务器下发任务镭速利用变量实现高效的大文件传输效率

在分布式系统和自动化部署场景中&#xff0c;任务下发往往伴随着大量的文件传输需求。为了提高文件传输的效率&#xff0c;本文将介绍如何巧妙地利用变量来优化任务下发过程中的文件传输。我们将介绍几种方法&#xff0c;通过合理利用变量来减少传输负担、提升传输速度&#xf…...

本地用docker装mysql

目录 拉取镜像查看镜像 启动容器查看运行中的容器连接到 MySQL 容器其他一些操作 装WorkBench链接mysql——————————————允许远程登录MySql 拉取镜像 docker pull mysql查看镜像 docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE mysq…...

前端canvas对象转成file对象

import html2canvas from html2canvasexport default {methods: {//canvas对象转成file对象canvasToFile() {html2canvas(this.$parent.$refs[mapPanel].$el,{width: this.$parent.$refs[mapPanel].$el.clientWidth - 600// height:}).then(canvas > {const base64Data can…...

mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)

⚠️ 有些网站的mermaid可能不完整&#xff0c;因此下面教程中可能有些语法是无效的。 &#x1f60a;亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具&#xff0c;它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...

运行fastGPT 第四步 配置ONE API 添加模型

上次已经装好了所有的依赖和程序。 下面在网页中配置One API &#xff0c;这个是大模型的接口。配置好了之后&#xff0c;就可以配置fastGPT了。 打开 OneAPI 页面 添加模型 这里要添加具体的付费模型的API接口填进来。 可以通过ip:3001访问OneAPI后台&#xff0c;**默认账号…...

Spring Initializr创建springboot项目 “java: 错误: 无效的源发行版:19”

我用的1.8的jdk&#xff0c;排查发现这是jdk和springboot版本冲突导致的。 1、File->Project Structure->Project Settings->Project,把language level改成相应的版本 2、File->Project Structure->Module&#xff0c;source和dependancies改成相应的版本 3、F…...

Java IDEA中Gutter Icons图标的含义

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 很多人刚开始用IDEA来学习编程&#xff0c;会发现下面这些图标。 但是…...

如何进行域名跳转与域名重定向的综合指南

文章摘取于 Dynadot官方博客内容。 在访问一些商业网站时&#xff0c;我们通常会发现这些平台会将多个域名都指向到同一个内容界面。当然&#xff0c;也存在网站迁移到新域名&#xff0c;旧域名则指向新域名以及其内容页面的情况。 这两者实际上都属于域名跳转的范畴&#xff…...

YOLOv10-1.1部分代码阅读笔记-build.py

build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...

redux 结合 @reduxjs/toolkit 的使用

1&#xff0c;使用步骤 使用React Toolkit 创建 counterStore&#xff08;store目录下&#xff09; --> 为React注入store&#xff08;src下面的index&#xff09; --> React组件使用store中的数据&#xff08;组件&#xff09; 2&#xff0c;例如下面有一个简单加减的…...

tui-editor报错

原因&#xff1a; 原先的tui-editor插件&#xff08;富文本编辑器插件&#xff09;换了个名称&#xff0c;现在已经更名为toast-ui/editor因此安装不了&#xff0c;从而报错&#xff01; 解决&#xff1a; 1.首先将package.json中的tui-editor那一行修改为 "toast-ui/…...

运行fastGPT 第二步 安装宝塔面板 用于管理安装docker和其文件

if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec 上面运行以下&#xff0c;安装宝塔。如果不行&#xff0c;系…...

常见好用的PHP CMS开源系统有哪些?

开源的系统&#xff0c;网站大家估计也见过很多&#xff0c;尤其是用PHP写的开源系统也很受用户们欢迎&#xff0c;这类系统通常以简单、使用、开源为优势&#xff0c;为用户提供更好的服务。以下就为大家介绍几个常见且好用的PHP CMS开源系统。欢迎补充&#xff01; 1、WordP…...

【排错记录】免密、nginx、cgroup、sshd

1、免密登录回显很慢。 现象&#xff1a; 免密登录超级慢&#xff0c;而且巡检脚本跑不起来 解决&#xff1a; vi /etc/ssh/sshd_configGSSAPIAuthentication no UseDNS nosystemctl restart sshd2、nginx服务起不来 现象&#xff1a; Redirecting to /bin/systemctl rest…...

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块&#xff08;上&#xff09; 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…...

LabVIEW 程序中的 R6025 错误

R6025错误 通常是 运行时库 错误&#xff0c;特别是与 C 运行时库 相关。这种错误通常会在程序运行时出现&#xff0c;尤其是在使用 C 编译的程序或依赖 C 运行时库的程序时。 ​ 可能的原因&#xff1a; 内存访问冲突&#xff1a; R6025 错误通常是由于程序在运行时访问无效内…...

【认识油管头部频道】ep5 “5-Minute Crafts”——DIY 和生活技巧

5-Minute Crafts 是一个非常受欢迎的 DIY 和生活技巧频道&#xff0c;它的火爆有多方面的原因&#xff1a; 1. 简单实用的内容 视频主要以解决日常生活中遇到的小问题为主&#xff0c;提供简单易学的技巧&#xff0c;吸引了想快速获取实用知识的观众。 2. 短视频形式 每个视…...

HarmonyOS应用开发者初级认证最新版– 2025/1/13号题库新版

1.欢迎各位读者&#xff0c;本文档来自鸿蒙开发学员亲测&#xff0c;最新版。&#xff08;考试时直接Ctrlf进行搜索&#xff0c;一定要认真比对答案&#xff0c;有的答案相似度很高&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 欢迎…...

improve-gantt-elastic(vue2中甘特图实现与引入)

1.前言 项目开发中需要使用甘特图展示项目实施进度&#xff0c;左侧为表格计划&#xff0c;右侧为图表进度展示。wl-gantt-mater&#xff0c;dhtmlx尝试使用过可拓展性受到限制。gantt-elastic相对简单&#xff0c;可操作性强&#xff0c;基础版本免费。 甘特图&#xff08;Gan…...

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…...

SpringBoot源码解析(七):应用上下文结构体系

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

SpringSecurity-前后端分离

在前后端分离的架构中&#xff0c;Spring Security 的配置与传统的单体应用有所不同。为了确保安全性和灵活性&#xff0c;我们需要对 Spring Security 进行适当的调整以适应这种架构。下面将详细介绍如何在前后端分离的应用程序中实现 Spring Security。 1. 理解前后端分离的…...

sparkRDD教程之基本命令

作者&#xff1a;nchu可乐百香果 指导者&#xff1a;nchu-YoungDragon 1.前期准备 &#xff08;1&#xff09;从迅雷网盘上面下载这个项目&#xff0c;并且把scala&#xff0c;maven和java环境配置好 网盘链接&#xff1a; 分享文件&#xff1a;SparkRDD.zip 链接&#xf…...

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 三、信号量 信号量理论 信号量接口 一、System V通信 System V IPC&#xff08;inter-process communication&#xff09;&#xff0c;是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 …...

C#上位机通过CAN总线发送bin文件

让gpt生成一段代码用来把bin文件通过can总线发出去 c#代码还是比较强大的&#xff0c;各种功能基本都是一两行代码就实现了&#xff0c;这里记录一下对这个代码的理解和解读 主要代码如下&#xff0c;传入bin文件的地址即可将其从指定的can通道发送出去&#xff1a; public …...

CV 图像处理基础笔记大全(超全版哦~)!!!

一、图像的数字化表示 像素 数字图像由众多像素组成&#xff0c;是图像的基本构成单位。在灰度图像中&#xff0c;一个像素用一个数值表示其亮度&#xff0c;通常 8 位存储&#xff0c;取值范围 0 - 255&#xff0c;0 为纯黑&#xff0c;255 为纯白。例如&#xff0c;一幅简单的…...

2-Kbengine+Unity3D多人在线游戏DEMO源码架构分析

2-Kbengine+Unity3D多人在线游戏DEMO源码架构分析 目录 一、服务器端 1、编写并生成我们的服务器端和客户端通用的游戏协议 2、 认识Entity实体 3、 官方DEMO-kbengine_demos_assets分析 二、 客户端...