CAN组网问题

2019-10-14 22:11发布

80个CAN进行组网,控制芯片是用的STM32,第一个节点和最后一个节点延时好大,有没有做过这个的,原子哥在么
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
远方
1楼-- · 2019-10-15 03:08
楼主的意思是希望各个节点的数据能够同步处理吧?我之前碰到过类似的问题,不过只有9组电路,一对八,全部挂载在一条CAN总线上,CAN通讯地址依次为0~8。其中1~8电路一样,都是8路按键+10路数码管显示,0通过CAN采集1~8的按键并应答,1~8接收到应答然后进行数据处理,显示在数码管上。当初遇到的问题就是1~8的按键与显示无法同步,总是会出现延迟甚至是不响应的状况。针对这个问题,我采取了以下几个措施:
1、使用地址过滤(0使用的是STM32F407,1~8使用的是STM32F103,CAN都有地址过滤功能),减少对无效数据的处理开销;
2、提高0的采集速度,从10ms采集一次提高到5ms采集一次,提高响应速度;
3、简化协议,只要能够满足要求,尽量减少协议的种类。比如我开始每一个按键使用一条协议,那么各个按键CPU就得处理8条,8组就是64条。后来我就使用1条协议,每个按键只占用协议中的一个字节的一个bit,需要处理的协议一下就减少了许多,响应自然就快了;
3、最重要的一点,使用缓冲区。在0中建立8个缓冲区,将每次从CAN总线上获取的数据根据其地址放入相应的缓冲区,然后CPU依次从各个缓冲区中读取数据进行处理,对1~8而言,数据获得处理的机会就一致了。
通过以上的措施,现在我的电路能够做到各个按键实时地反应在数码管上(人眼视觉上的),算是解决了问题。
xuande
2楼-- · 2019-10-15 08:33
 精彩回答 2  元偷偷看……
jsgyzj
3楼-- · 2019-10-15 13:44
xuande 发表于 2016-3-16 16:19
速度越高,有效距离会越短。

降低速率试试,

哈哈大版主也是混阿mo的人啊,我已经不混了,降低速率不行的,我们还嫌弃速率低呢,有做过几十个组网的么?
jsgyzj
4楼-- · 2019-10-15 19:03
远方 发表于 2016-3-16 12:13
楼主的意思是希望各个节点的数据能够同步处理吧?我之前碰到过类似的问题,不过只有9组电路,一对八,全部 ...

HI,感谢你详细的解答,我的问题看来没描述清楚,我的电脑主机通过CAN适配器用上位机给下面的80个节点依次发指令,80个节点就开始执行某一个动作,ID为1和ID为80的动作执行的时间延时太大了,我知道应该有延时,但是这个太大了。ID为1的都开始0.5S ID为80的才开始动作。我做了一下的改进:
1.每一个ID除了接收自己本身的ID,还接收ID为0000的广播
但是这样的模型又有问题了,延时基本没有了,但是好多节点接收广播的时候有些节点没有收到。
大神有没有试过大面积的组网?
远方
5楼-- · 2019-10-16 00:51
jsgyzj 发表于 2016-3-18 14:44
HI,感谢你详细的解答,我的问题看来没描述清楚,我的电脑主机通过CAN适配器用上位机给下面的80个节点依 ...

没有做过那么大的规模。根据你描述的情况我考虑了一下,我的结论是仅仅依靠CAN通讯来实现如此多的节点同步操作,很困难。原因如下:1、如此规模的网络,线路肯定很长,线路上的损耗和延迟是避免不了的并且难以量化;2、使用环境不同,线路受到的干扰也是不一样的,所以无法通过延时补偿去同步;3、CAN总线是一种基于总线竞争的通讯方式,先收到信息的节点未必能先将信息发送出去,就导致了适配器发送->节点、节点应答->适配器成了一个随机的过程,所以无法确保所有的节点同步。如果让我来解决这个问题,我会在所有节点上加上一个比较精准的时钟源(外部时钟或者内部RTC),适配器周期性同步各个节点的时钟,需要节点动作时,只要发送“某某某个时刻干什么”,那么只要各节点的时钟同步,操作也必然同步。当然,这是以损失整个系统的实时性为代价的,以你的系统为例,发送“0.5s以后操作”那肯定是无效的。以上只是我个人的思考,有些地方可能比较片面。你还可以查询一些CAN在汽车上的应用,因为汽车的刹车系统,防抱死系统等等彼此之间也是严格要求同步的,可以参考一下。
priate
6楼-- · 2019-10-16 04:42
好贴必须mark

一周热门 更多>