找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于单片机CAN总线有个问题想请教下大家

查看数: 2344 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-9-15 19:24

正文摘要:

关于CAN总线有个问题想请教下大家 就是我现在用的是一个主机来控制3个从机。单片机程序流程是主机发送一个广播消息,3个从机接收到消息后执行相关功能,执行完后 3个从机分别给主机发送一个消息证明已经执行完了, ...

回复

ID:228467 发表于 2022-9-17 10:41
yzwzfyz 发表于 2022-9-17 09:01
CAN通讯是硬件冲突的,CAN的地址有优先识别,当多路同时发送数据时,地址优先的会抢到总线,直到它发完数据 ...

厉害!非常感谢老哥的指点,学习了
ID:228467 发表于 2022-9-17 10:40
glinfei 发表于 2022-9-16 15:23
我觉得还是总线冲突,反正你运动函数也不返回成功值,不如把从机返回执行命令提前在运动函数前,这样大家基 ...

非常感谢老哥的指点!
ID:228467 发表于 2022-9-17 10:39
圆就是圈圈 发表于 2022-9-16 13:45
这应该是缓冲区的问题,你的缓冲区里边里面应该只能接受一条消息,导致其他消息被顶出了缓冲区或者无人接受

感谢老哥的指点了!CAN缓冲区有8个字节,我只发了1个,应该不是这里的问题
ID:228467 发表于 2022-9-17 10:38
pcf2000 发表于 2022-9-16 12:38
采用广播的方式发送命令,意味着3从机同时接收到数据,同时执行动作,还有可能同时返回数据,这就会导致总 ...

感谢老哥的指点了!
ID:123289 发表于 2022-9-17 09:01
CAN通讯是硬件冲突的,CAN的地址有优先识别,当多路同时发送数据时,地址优先的会抢到总线,直到它发完数据,其它另一个次优先的才能使用总线。
【解决的方案】是:每个设备间隔一段时间发数据就可以了。
间隔多久呢?估算一下,假设4个机子的总数据量一起发完需要T时间,间隔时间>T,就可以了,这是CAN通讯的特长!不必考虑在T时间内,会不会发生冲突。即使你同时发,它也会自动通过硬件,让地址优先的先发,发完后,其它的再发,优先级差的,一定最后发。
也即,CAN数据的真正发送时刻,不是你下达发送命令的时刻,你的命令下达后,只是将数据送入缓冲区,当总线上有空闲时(比你优先的不用了),此刻数据才会被发出。
ID:844772 发表于 2022-9-16 15:23
我觉得还是总线冲突,反正你运动函数也不返回成功值,不如把从机返回执行命令提前在运动函数前,这样大家基本同时返回值,然后你给每个从机不同延时,这样能减少冲突。还有,也可以在从机发信前,先监听总线是否有信息在发送。反正能用就行,冲突跟干扰一样是不可能彻底解决的。
ID:725110 发表于 2022-9-16 13:45
这应该是缓冲区的问题,你的缓冲区里边里面应该只能接受一条消息,导致其他消息被顶出了缓冲区或者无人接受
ID:245053 发表于 2022-9-16 12:38
采用广播的方式发送命令,意味着3从机同时接收到数据,同时执行动作,还有可能同时返回数据,这就会导致总线竞争的,所以要解决好竞争的问题;再一个就是,如果3从机的实时性要求不高,主机可以采取轮询发送命令的方式进行,间隔一定时间轮次发送命令,可以避免总线竞争问题

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表