硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1563|回复: 25
收起左侧

[UART] stm32h723vgtx 与宇树科技a1电机 rs485通信 电机返回数据接收不正确 判断为噪声错误 求大佬帮帮忙!!!可有偿!!!

  [复制链接]

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2025-2-23 17:20:35 | 显示全部楼层 |阅读模式
我用的是达秒mc02与宇树科技a1电机,用rs485通信,单片机发送34字节给电机,电机返回78字节。我用电脑发送78字节给单片机,它可以正确接收,如图1.2。但是只要我用单片机控制a1电机,单片机发送用的是阻塞式发送,stm32cubemx使能硬件流控,电机发送回来的78字节到单片机缓存里和电脑接收到的电机返回数据不一致,会判断为噪声错误,电机两个rs485接口,一个接入单片机,一个接入电脑,单片机发送34字节给电机,所以电脑接收到的数据是单片机发给电机的34字节+电机返回给单片机的78字节,如图3.4所示。还去试了开启mpu,貌似也没有效果,调试了一个多礼拜,求路过的大佬以及硬汉哥帮忙,可有偿

电脑发送78字节

电脑发送78字节

单片机接收电脑发的78字节

单片机接收电脑发的78字节

单片机接收电机发的78字节

单片机接收电机发的78字节

电脑接收到的数据是单片机发给电机的34字节+电机返回给单片机的78字节

电脑接收到的数据是单片机发给电机的34字节+电机返回给单片机的78字节

单片机连接a1电机,a1电机返回数据给单片机和电脑,借此来判断单片机是否接受正常

单片机连接a1电机,a1电机返回数据给单片机和电脑,借此来判断单片机是否接受正常
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-24 07:04:47 | 显示全部楼层
看下你的MCU硬件流控制,也是485的收发切换是不是没有正常执行。

感觉是的MCU端没有正常控制收发。电脑可以,MCU肯定没问题的。
回复

使用道具 举报

6

主题

306

回帖

324

积分

高级会员

积分
324
发表于 2025-2-24 09:02:47 | 显示全部楼层
1。你得拿示波器或逻辑分析仪检测下,这是电工必备的,否则有时候没办法找原因。  2。这么高波特率,能正常就奇怪了。这么高波特率线还长,还没屏蔽,能正常么?
回复

使用道具 举报

11

主题

702

回帖

735

积分

金牌会员

积分
735
发表于 2025-2-24 10:07:39 | 显示全部楼层
楼上说的对,降低波特率试试,看能否正常通讯?
回复

使用道具 举报

8

主题

57

回帖

81

积分

初级会员

积分
81
发表于 2025-2-24 17:42:22 | 显示全部楼层
可以在mcu中写一个程序,接收到数据后。存入buf中,然后再立马发送出来,确定一下你的串口收发是否正常。如果有问题,波特率降低到9600测试,如还有问题,检查一下接线,原理图上是否有在AB线上加上下拉电阻(以前工作上遇到过未加电阻,导致信号有问题)等问题,如无问题,将mcu与电机连接,并且用示波器看A和B的波形是否正常能满足差分信号。从你描述来看,判断为噪声,那就是有数据,可以将数据收集看看,比如是否是完整一帧数据,长度是对的。只是从帧头开始,数据都是错乱的,这种问题可能是波特率不匹配。
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2025-2-24 22:35:22 来自手机 | 显示全部楼层
估计是rs485不支持4m波特率
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2025-2-25 08:15:15 | 显示全部楼层
是不是只连接了 两根通讯线, 把地线也连上!
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2025-2-25 08:29:29 | 显示全部楼层
RS485 通讯用的两根线?  把地线连上试试
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-2-25 16:07:43 | 显示全部楼层
hqgboy 发表于 2025-2-24 10:07
楼上说的对,降低波特率试试,看能否正常通讯?

大佬您好!这个电机固定4.8m波特率,没办法改的呢
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-2-25 16:08:46 | 显示全部楼层
endurevip 发表于 2025-2-25 08:15
是不是只连接了 两根通讯线, 把地线也连上!

因为板子是2pin口,电机是3pin口,有稍微试一下接在板子上的地口,效果也还是不好呢
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-2-25 16:11:23 | 显示全部楼层
fxyc87 发表于 2025-2-24 09:02
1。你得拿示波器或逻辑分析仪检测下,这是电工必备的,否则有时候没办法找原因。  2。这么高波特率,能正常 ...

大佬您好!感谢您的指点,目前我这边没有示波器以及逻辑分析仪的设备,有一个usb转rs485,不知道可不可以用上。您说的第二点是要屏蔽,这个屏蔽具体要怎么实现呀,嵌入式小白,零基础不知道咋弄呢
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-2-25 16:17:15 | 显示全部楼层
eric2013 发表于 2025-2-24 07:04
看下你的MCU硬件流控制,也是485的收发切换是不是没有正常执行。

感觉是的MCU端没有正常控制收发。电脑 ...

硬汉哥大佬您好!感谢您的指点,我有注意到,当我在debug打断点的时候,单片机发送数据给电机,电机返回数据给单片机,此时debug里不会立即跳转到中断服务函数里面,需要过一段时间,这时候接收到的数据只有几个字节,一步一步调试会进入中断服务函数,然后判断为噪声错误。因为我发送函数是写在任务函数while(1)里面,之后我就在发送函数之后加了延时,重新编译,在debug里取消了断点,全速运行,这时候显示数组里面全是0000,不知道是要去查收发切换,还是因为stm32h7要配置mpu呢
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-4 20:40:56 | 显示全部楼层
eric2013 发表于 2025-2-24 07:04
看下你的MCU硬件流控制,也是485的收发切换是不是没有正常执行。

感觉是的MCU端没有正常控制收发。电脑 ...

硬汉大哥您好!!我目前的问题还没解决,可以有偿请教您吗,留个联系方式可以不~
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2025-3-5 14:30:34 | 显示全部楼层
你接收,在4M波特率下,用DMA接收吧,不知道你目前用的是串口中断方式吗?如果是,改DMA吧
回复

使用道具 举报

2

主题

71

回帖

77

积分

初级会员

积分
77
发表于 2025-3-5 17:34:22 | 显示全部楼层
既然是485,把USB转485+单片机+电机接到一起,电脑上串口助手可以看到总线上的数据,确定是电机发出来有问题,还是单片机没接收到

排查从485的收发切换、单片机的接收方式(中断还是DMA)入手
另外也需要查一下是否是单片机发出的数据有问题
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-6 21:28:26 | 显示全部楼层
morning_enr6U 发表于 2025-3-5 14:30
你接收,在4M波特率下,用DMA接收吧,不知道你目前用的是串口中断方式吗?如果是,改DMA吧

您好!!我目前用的就是dma呢
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-6 21:55:42 | 显示全部楼层
踩姑娘的小蘑菇 发表于 2025-3-5 17:34
既然是485,把USB转485+单片机+电机接到一起,电脑上串口助手可以看到总线上的数据,确定是电机发出来有问 ...

大佬您好!我就是将usb转485 + 单片机 + 电机接到一块的,我图片上有,可以看到电机发给电脑的数据是没错的,单片机发给电机也是正确的,但就是电机发给单片机的数据接收不到,还没试过这个收发切换,请问您知道怎么排查这个收发切换吗
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2025-3-7 10:48:30 | 显示全部楼层
单片机直连PC使用电机支持的4M波特率传输没有问题, 单片机不发指令, 只待机接收PC的数据, 使用的是RS485, 说明不是硬件通信的问题.
单片机连接电机连接PC, 连接方式是串联, 单片机的任务发送接收, 电机接收响应, PC只负责接收, 这种硬件连接出现了问题, 推荐尝试断开PC连接, 排除PC的影响, 解决的可能性小.
信息中的 "噪声错误" 是什么意思, 是能成功读到78个数据, 但是数据错误, 是不能成功读到78个数据, 是数据排序不对, 还是数据有丢帧, 是否有随机性, 是否可复现, 详细描述这部分信息.
不过可确定的是单片机发送给电机的指令电机能响应返回, 说明硬件通信没有问题, 单片机发送没有问题, 问题只聚焦在单片机接收. 这部分你是怎么处理的?
根据现有的信息分析可能的问题:
1. 单片机接收中断没有处理好, 具体原因无法分析信息不足, 猜测提醒: 中断不能进行耗时操作
2. RS485 接收逻辑没有处理好, 由于两线RS485是半双工的传输原理, 单片机在发送接收之间没有处理好
目前只能猜测这些, 更多分析需要更多信息
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2025-3-8 08:18:33 来自手机 | 显示全部楼层
可以联系我,qq95714627
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2025-3-8 08:19:04 来自手机 | 显示全部楼层
可以联系我,qq95714627
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-10 22:14:39 | 显示全部楼层
thinkcode 发表于 2025-3-7 10:48
单片机直连PC使用电机支持的4M波特率传输没有问题, 单片机不发指令, 只待机接收PC的数据, 使用的是RS485,  ...

大佬您好。
1.断开pc连接也会出现这种情况
2.噪声错误指的是串口接收到数据之后会进入中断服务函数来判断中断类型,而如果判断为噪声错误,则不能进入回调函数,经过这段时间的尝试,目前发现接收到的数据会丢帧,没办法复现,比较随机。
3、接收中断没有包括任何延时的函数
4、用示波器测了信号,目前暂定认为波形没有噪声干扰,晚上尝试不使用硬件流控来接收数据,使用软件来操作,还没解决问题呢。
5、大佬如果愿意,留个联系方式,qq或者微信或者啥的,有偿请教您
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-10 22:17:19 | 显示全部楼层
andy1999 发表于 2025-2-25 16:17
硬汉哥大佬您好!感谢您的指点,我有注意到,当我在debug打断点的时候,单片机发送数据给电机,电机返回 ...

硬汉大哥您好!我初步认为示波器的波形正常,将硬件流控改成了软件上使能io口,还是没解决问题,我可以上传工程或者怎么联系您呢,请您不吝赐教,困扰了好多天的项目了。好自闭啊
回复

使用道具 举报

0

主题

49

回帖

49

积分

初级会员

积分
49
发表于 2025-3-11 09:04:40 | 显示全部楼层
1. dma 接收建议使用环形缓存区的模式

2. 电机和主板之间要共地,这点要引起足够重视,不要随便试一下就算,如果是一个电源供电,那么就已经是共地的了,如果是两个电源分别给主板和电机供电,那么可以把两个电源的地线接在一起

3. 485 线路上要加上下拉电阻,确保没有节点发送数据的时候有确认的状态,避免过多干扰

4. 485 芯片 rx 脚要加上拉(上拉电阻或者 mcu 管脚弱上拉),确保 485 rx 模块没有使能的时候,不会由于 rx 线路无人驱动悬空引入干扰

5. 检查 mcu 设置 4800000bps 时的误差有多少,cube 会有提示,我看了下有 1.2% 的误差,可以接受

6. 临时关闭主板 mcu 的 cache,测试 ok 之后再打开 cache,可以避免一些问题

7. 检查主板使用的接口芯片,看接口芯片是否支持较高的速率,以及接口芯片是否为正品

8. 检查主板接口芯片的 a b 脚之间和对地电阻,测量时断开电路和上下拉以及终端电阻,对比未使用过的好的接口芯片,看板子上的接口芯片管脚电阻是否正常,可以检查接口芯片是否受损

9. 这么久了,还不配一个逻辑分析仪?
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-11 22:09:44 | 显示全部楼层
现在将硬件流控修改成软件流控,电机回传数据已经接收到了,本来应该返回78字节,实际接收到只有70个或者更少,存在部分字节会丢失的情况,不知道各位大佬有没有建议
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2025-3-11 22:30:04 | 显示全部楼层
dukelec 发表于 2025-3-11 09:04
1. dma 接收建议使用环形缓存区的模式

2. 电机和主板之间要共地,这点要引起足够重视,不要随便试一下就 ...

现在将硬件流控修改成软件流控,电机回传数据已经接收到了,本来应该返回78字节,实际接收到只有70个或者更少,存在部分字节会丢失的情况
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-7-14 16:27:14 | 显示全部楼层
andy1999 发表于 2025-3-11 22:30
现在将硬件流控修改成软件流控,电机回传数据已经接收到了,本来应该返回78字节,实际接收到只有70个或者 ...

兄弟,弄出来了吗,可以交流一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 07:00 , Processed in 0.064503 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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