[技术讨论] 关于CAN总线有个问题想请教下大家

[复制链接]
1943|20
 楼主| 白纸扇00 发表于 2022-9-15 16:07 | 显示全部楼层 |阅读模式
就是我现在用的是一个主机来控制3个从机。程序流程是主机发送一个广播消息,3个从机接收到消息后执行相关功能,执行完后 3个从机分别给主机发送一个消息证明已经执行完了,然后主机接收完这3个消息后再发一个广播消息,让3个从机继续执行,就这样一直循环。现在的问题是 我把接收消息的程序放到了定时器中断里,10ms读取一次,发现有时候从机就停止执行功能了,我用串口打印的方式查找错误发现是主机这边有时候会接收不到个别从机的数据,但是从机是发送正常的。所以应该是3个从机发送的数据冲突了,导致主机漏掉了数据。我目前的解决办法是让主机接收到哪个从机的数据后就给那个从机发送消息说不用发送了。现实情况是之前的从机偶尔停止情况改善很多,但是还是有,我实在没有办法了,想来求助下大家

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 白纸扇00 发表于 2022-9-15 16:07 | 显示全部楼层
这是从机

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gx_huang 发表于 2022-9-15 20:29 | 显示全部楼层
CAN是硬件仲裁的,不会一直冲突的,如果确认从机发送了,应该是主机软件接收到了没处理好
坑中坑 发表于 2022-9-16 09:25 | 显示全部楼层
写个单纯的只读取的程序,去读取总线的信息。(或者买个can——uart总线的发送接收器)。这种要配置自动重发模式才行,而且时间要预留足够
full_stack 发表于 2022-9-16 09:43 | 显示全部楼层
有滤波吗?这个芯片CAN的邮箱数量是多少?10ms内如果收到超过的数量不就丢失了吗?
 楼主| 白纸扇00 发表于 2022-9-16 09:58 | 显示全部楼层
gx_huang 发表于 2022-9-15 20:29
CAN是硬件仲裁的,不会一直冲突的,如果确认从机发送了,应该是主机软件接收到了没处理好 ...

老哥,主机处理能给个大概思路吗?
 楼主| 白纸扇00 发表于 2022-9-16 09:59 | 显示全部楼层
坑中坑 发表于 2022-9-16 09:25
写个单纯的只读取的程序,去读取总线的信息。(或者买个can——uart总线的发送接收器)。这种要配置自动重 ...

已经配置了自动重发,时间也绝对是够得
 楼主| 白纸扇00 发表于 2022-9-16 10:02 | 显示全部楼层
full_stack 发表于 2022-9-16 09:43
有滤波吗?这个芯片CAN的邮箱数量是多少?10ms内如果收到超过的数量不就丢失了吗? ...

你说的滤波是硬件的还是软件设置的?软件设置的CAN有滤波吗?是不是过滤器?邮箱只关联了FIFO0
cainiao518 发表于 2022-9-16 11:10 | 显示全部楼层
白纸扇00 发表于 2022-9-16 10:02
你说的滤波是硬件的还是软件设置的?软件设置的CAN有滤波吗?是不是过滤器?邮箱只关联了FIFO0 ...

打开CAN接收中断,不需用定时器中断接收,CAN总线控制好时序不会发送数据冲突

评论

明白人  发表于 2022-9-17 15:51
好的,我先用中断试试,感谢老哥的指点了!  发表于 2022-9-17 10:43
jjcs 发表于 2022-9-16 13:02 | 显示全部楼层
dalarang 发表于 2022-9-16 15:28 | 显示全部楼层
估计是仲裁域没应用好吧,或是地址过滤没用对,从机发数据后主机若是收到,硬件会自动ACK的,不需要特别去干预重传。

评论

感谢老哥的指点,我再检查下程序  发表于 2022-9-17 10:44
ltbytyn 发表于 2022-9-16 18:44 | 显示全部楼层
用定时器去接收,那要CAN接收中断干啥?

评论

主要是程序比较简单,就没有用中断  发表于 2022-9-17 10:45
地瓜patch 发表于 2022-9-16 21:18 | 显示全部楼层
我也正在搞can总线,好多好多问题,过滤器就弄了好长时间,原理都明白,一到操作就困难重重

评论

握个手  发表于 2022-9-17 10:50
full_stack 发表于 2022-9-17 00:57 | 显示全部楼层
白纸扇00 发表于 2022-9-16 10:02
你说的滤波是硬件的还是软件设置的?软件设置的CAN有滤波吗?是不是过滤器?邮箱只关联了FIFO0 ...

FIFO0只能接收存储三帧数据,如果多了就会丢失
两只袜子 发表于 2022-10-25 14:30 | 显示全部楼层
中断接收处理。
jcky001 发表于 2022-10-25 14:30 | 显示全部楼层
确认以下几个方面:
1、CAN时序配置是否合理。(包括单片机时钟是否稳定,不要用内部时钟源,尽量使用有源晶振)
2、硬件是否存在严重干扰(PCB布局布线、外部接线等)
3、中断处理是否耗费较多时间
4、是否存在同时接收很多消息情况(如有,还需要创建一个队列接收缓冲)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

65

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部