STM32 CAN多节点组网项目实操 挖坑与填坑记录

 摘要

CAN线性组网项目开发过程中遇到的数据丢包问题,并尝试解决的记录和推测分析。

  关键词

CAN串联多节点通讯、CAN10节点通讯、CAN数据丢包、STM32 CAN

  背景/项目介绍

概述:

开发了一个多节点线性组网采集数据的项目。

系统包含1个供电和数据网关板还有最多10个节点。

节点之间和网关之间通过CAN通讯。

网关板主要功能:

1.是给总线上每个节点供电

2.并将CAN协议转换为USB CDC设备和PC上位机通讯。

节点的功能:

采集当前位置数据,并通过CAN协议上传给网关板。

通讯线束

CAT6 六类网线,用的网线来传输CAN信号,取网线中的1对双绞线来做CAN_H  CAN_L通讯,再取2对网线来做供电,由网关板输出DC12到网线,以此给10个节点做供电,算是自己做了个POE供电,不过是非标的,哈哈哈哈。

节点硬件设计:

一个STM32单片机、两个不带网络变压器的RJ45插座。CAN收发器芯片。

两个RJ45插座完全并联,当接线时,一个用来插入上一个节点延展出的网线水晶头,另一个RJ45插座插入一条网线用来连接下一个节点。

整体系统总线布局

虽然系统物理宏观角度来看是线性连接的,但其实内部每个节点还是通过CAN_H CAN_L挂载到总线上的。类似上图的链接方式。

运行开发环境介绍

硬件环境

节点

STM32F091CCT6

J-LINK  V11

软件开发环境

节点

IAR 8.32.1 

VSCODE 

软件支持包ST HAL 库

硬件环境

网关板

STM32F072C816

J-LINK  V11

软件开发环境

节点

KEIL5.14

VSCODE 

软件支持包ST HAL 库
PC上位机环境windows10
USB-CAN PC上位机CANAGAROO
PC串口助手Serial Port Utility

实验1:

实验条件:

测试条件,在小二居室的房间内 实际面积不到69平方,6根5米的CAT6网线,1根10米的超CAT6网线,1根CAT6 20米网线。

因为空间受限,网线没有全延展开。

节点布局:

图中,圆圈为节点,长方形为网关板、菱形为PC上位机。因为是在家里实验,布线路径很奇葩。而且我的画图走位也很风骚,请忽略。 :)  :) 哈哈哈哈。

节点ID就是CANID。

线束材料:

CAT6类网线,我是用网线来传输的CAN信号,并且用网线来传输12V DC给接点供电。

其中第一根网线10米,其余为5米。

通讯波特率:

125k

接入节点:

实验1接入的是2.3.4.5.6.7.8  这几个节点。

接点接入方法1:

先开启网关板的供电,然后一个个接入节点设备

节点接入方法2: 

先不开启网关板供电,先将所有节点接好,然后再开启网关板供电,所有节点上电。或者是用“节点接入方法1”接好总线后,再给网关板断电,然后重新上电,都是为了实现一个所有节点同时上电。

实验发现

发现一个现象,如果是先开启网关板的供电,然后一个个接入节点设备,最后开启上位机的采集数据命令,这时候挂载的7个节点,都能收到数据。这个时候如果断电,然后重新上电,会发现,丢数据情况很严重。只有2、3、8几个节点能收到数据。  后来我分析应该是因为重新上电的过程中,所有节点板子近乎同时启动,这种情况下,收发数据存在异常。而线将网关板供电,然后再一个个插入节点的连接方式,会让不同节点的上电时间存在延时。

总结扩展

于是实验二考虑增加延时,我推测可能是节点收到上位机下发的启动自动上传数据命令后,同一时间所有节点都在总线上喊话,导致总线收发数据丢包了。下面实验增加延时尝试验证推测。

实验2:

实验条件:

线束材料:

和实验1 相同。

通讯波特率:

10k 

实验没有严格控制变量,因为我当时时间比较紧急,同时考虑到,CAN总线理论上来说通讯速率越低,抗干扰越强,传输距离越远,所以实验2直接换10k波特率了。

关于CAN总线切换波特率的方法,请看这篇文章。

STM32 CAN 波特率设置。

接入节点:

也接入的是2.3.4.5.6.7.8  这几个节点。

 线束布局:

2.3.4.5.6.7.8  这几个节点的时候,在他们的程序中的发送函数中设置,

ID *10 ms的间隔时间。

例如当前节点ID为1则延时1*10ms再发送,当前节点为10则延时10*100ms再发送。

因为我的CAN发送机制运用了队列的方式,再程序的其他部分判断需要发送数据的时候,将数据打包进发送队列,然后再在主循环里按时差发送队列是否为空,如果不为空,就取出将要发送的数据,然后通过CAN发送出去。

如果你的程序这个地方不是运用的消息队列的发送方式,或者对通讯的时序要求很高,则不能运用我这种方式。

最后将所有节点同时上电,然后发送广播启动采集数据命令。

实验发现

发现  只有6号总是收不到数据。

总结扩展

我寻思吧,这玩意特别规律的,总是6号收不到数据,是不是6*10= 60ms正好和数据在线束上传输的时间啥的冲着,我一共8个节点(7个子节点+1个网关),第6个就不行,那我扩展到10个呐?

还有就是,我之前做实验,把线束全伸展开拉的比较直的时候,是没有这种事情的,和线材布局也有关系。但如果我的客户就是要在线束不完全伸展开的情况下使用呐,那我就要研究一下,怎样在这种情况下还能保持CAN通讯的数据传输稳定性。

于是,下一个实验,增加节点数目到10,我这个系统,最多就是要10个节点。

实验3:

实验条件

线束材料、通讯波特率同实验2。
接入节点:

1  2 3 4 5 6 7 8 9 10 

节点布局:

测试条件,在小二居室的房间内 实际面积不到69平方,6根5米的CAT6网线,1根10米的超CAT6网线,1根CAT6 20米网线。

和实验1和2相比,我在网关板附件新增了监听模块,上位机为cangaroo

因为空间受限,网线没有全延展开。

程序修改

将发送前的延时改为  ID*15ms

再在开启上电初始化中加一个和ID号有关的延时,例如,ID为1就延时1*100ms进入主while循环。

ID为10则进行10*100 = 1000ms的延时。

实验发现

采用节点接入法2的时候,即,节点同时供电的时候。

总是节点3数据丢失。

监听USB-CAN模块显示报文。

备注:

监听软件,CANGAROO。

思考:

协议中增加上位机的回复命令会更好,上位机收到节点上报的数据后,给节点回复一个命令。

再在节点的程序中增加判断,如果一定时间内收不到总线的回复,就重启节点程序。相当于手动模拟了实验1中的节点接入方法1。

上述思考方法还未编码

敬请期待

没来得及继续探究剩下的问题,欢迎关注,后面我会记录并更新我的程序更改和实验方案~

关注我不迷路。

开源的USB-CAN上位机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql:查看一个表的索引信息

可以使用命令SHOW INDEX FROM table_name;查看一个表的索引信息,例如:

NGROK内网穿透工具-实战+源码下载

1、功能概述? 本案例中使用ngrok内网穿透工具,使用方便,不需要注册等麻烦的操作,永久使用,一键搞定。 我们在项目中有这样一种需求: 甲方:汤工你能不能把你们正在开发的项目或者页面发给我看…

vue脚手架创建项目

安装 npm install -g vue/cli 如果报错可以尝试使用cnpm 查看命令 vue -V 创建项目 vue create 项目名称 输入y 上下选中选项 Manually select features (自由选择),回车 vue 版本的选择 其他按需要选择 项目创建成功,…

C++基础知识

目录 前言: 命名空间 命名空间的定义 命名空间的使用 c输入与输出 缺省参数 函数重载 引用 引用的特性 常引用 引用的使用场景 引用做参数 引用做返回值 引用与指针的区别 内联函数 内联函数的特性 前言: C 语言是结构化和模块化的语言&…

服务器数据恢复—raid5少盘状态下新建raid5如何恢复原raid5数据?

服务器数据恢复环境: 一台服务器上搭建了一组由5块硬盘组建的raid5阵列,服务器上层存放单位重要数据,无备份文件。 服务器故障&分析: 服务器上raid5有一块硬盘掉线,外聘运维人员在没有了解服务器具体情况下&#x…

【教程】制作 iOS 推送证书

​ 目录 证书类型 MAC Key Store 消息推送控制台 制作证书 创建苹果 App ID 使用appuploder制作 .p12文件 创建证书 如需向 iOS 设备推送数据,您首先需要在消息推送控制台上配置 iOS 推送证书。iOS 推送证书用于推送通知,本文将介绍消息推送服务支…

以企业架构为中心的SABOE数字化转型五环法

文章目录 01 传统企业数字化转型面临诸多挑战02 SABOE数字化转型五环法为企业转型破除迷雾 01 传统企业数字化转型面临诸多挑战 即将过去的2023年,chatGPT大模型、数据资产入表等事件的发生,标志着数字经济正在加速发展。数字经济是人类社会继农业经济、…

JS实现返利网注册系统(网页数据验证)

主代码 <!DOCTYPE HTMLPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><title>返利网注册</tit…

被迫搬家,宽带迁移怎么办?

广州一栋违建烂尾楼&#xff0c;13年里从未停止出租&#xff0c;年年住满人。这栋楼没有贴外墙&#xff0c;裸露的水泥表面都被雨水腐蚀&#xff0c;很多阳台没有建好&#xff0c;只是简单加装了护栏&#xff0c;存在巨大安全隐患。 为什么烂尾楼年年满人呢&#xff1f; 因为它…

重塑未来工作方式,亚马逊云科技re:Invent推出生成式AI助手Amazon Q

亚马逊云科技在re:Invent 2023宣布推出Amazon Q&#xff0c;这是一种新型生成式AI支持的助手&#xff0c;专门用于满足办公场景需要&#xff0c;可以根据客户业务进行定制。客户可以快速获得复杂问题的相关答案、生成内容并采取行动——所有这些都基于客户自身的信息存储库、代…

2 mysql主从复制配置

1、节点以及网络配置 前置条件&#xff1a; 已经在linux上安装好了一主一从或者一主多从的mysql 2、具体配置 主服务器 172.20.0.2 从服务器 172.20.0.3 首先主机mysql配置&#xff1a; 打开mysqld.cnf&#xff1a; 添加如下配置&#xff1a; # 主服务器ID 必须唯一 serve…

改造项目用 开口互感器AKH-0.66/KK-∮24 操作方便,节约时间!

1.产品特点 产品外形美观&#xff0c;安装、接线方便&#xff0c;主要用于电力运维及用电改造项目&#xff0c;一般输出为 AC 5A、 1A 或者毫安等信号&#xff0c;具有体积小、精度高、带载能力强、安装方便等优点&#xff0c;为用户改造项 目节省人力、物力、财力&#xff0c…

深度学习 Day13——P2彩色图片分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

C语言经典错误总结(一)

注&#xff1a;本文是结合《C陷阱和缺陷》所写&#xff01; 一.和 我们都知道在C语言中表示赋值操作符&#xff0c;表示比较&#xff0c;那么你知道为啥单等号为&#xff0c;双等号为比较吗&#xff1f; 这里扩展下&#xff1a;因为在C语言中赋值操作符相对于比较符号较常出…

蛮力算法之深度优先遍历和广度优先遍历——图的深度优先遍历和广度优先遍历,附带案例:迷宫问题及矩阵中传染性传播问题

算法&#xff1a;图的深度优先搜索和广度优先搜索 这两种搜索方法本质上都是基于蛮力法思路 这两种搜索方法对有向图和无向图都适用 文章目录 算法&#xff1a;图的深度优先搜索和广度优先搜索1 图的两种定义方式1.1 邻接矩阵1.2 邻接表 2 图的深度优先遍历3 图的广度优先遍历案…

ArkUI List组件

我们在column中使用foreach循环渲染数据的时候&#xff0c;如果数据过多&#xff0c;超出屏幕高度&#xff0c;会出现隐藏的情况。 class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name: string, image: ResourceStr, price: number,dis…

【项目小结】优点分析

一、 个人博客系统 一&#xff09;限制强制登录 问题&#xff1a;限制用户登录后才能进行相关操作解决&#xff1a; 1&#xff09;前端&#xff1a; ① 写一个函数用于判断登录状态&#xff0c;如果返回的状态码是200就不进行任何操作&#xff0c;否则Ajax实现页面的跳转操作…

Python房价分析(二)随机森林分类模型

目录 1 数据预处理 1.1 房价数据介绍 1.2 数据预处理 1.2.1 缺失值处理 1.2.2异常值处理 1.2.3 数据归一化 1.2.4 分类特征编码 2 随机森林模型 2.1 模型概述 2.2 建模步骤 2.3 参数搜索过程 3模型评估 3.1 模型评估结果 3.2 混淆矩阵 3.3 绘制房价类别三分类的…

推荐系统,“广告Match底层技术”中的名词(TDM、HNSW、PQ)

召回&#xff1a;匹配 TDM&#xff1a;"树状深度模型"&#xff08;Tree-based Deep Model&#xff09;&#xff0c;是一种结合了树状结构和深度学习的模型&#xff0c;主要用于解决大规模推荐系统中的候选项生成&#xff08;candidate generation&#xff09;问题。在…

多种DC电源模块的比较和评价

多种DC电源模块的比较和评价 BOSHIDA DC电源模块是一种重要的电子零件&#xff0c;可以将交流电转换为直流电&#xff0c;并为相应的电路提供所需的电能。随着技术的进步&#xff0c;市场上的DC电源模块种类越来越多&#xff0c;不同类型的DC电源模块有着不同的特点和优缺点。 …