硬汉嵌入式论坛

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

[技术讨论] GD32H7代码运行时间不稳定的问题[已解决]

[复制链接]

15

主题

174

回帖

234

积分

高级会员

积分
234
发表于 5 天前 | 显示全部楼层 |阅读模式
在GD32H7上运行永磁同步电机矢量控制的代码,单片机主频为600MHz,主PWM中断频率为40kHz,通过PWM中断触发ADC采样,然后在ADC采样结束中断进行矢量控制,使用的是绝对式位置编码器,转子位置更新频率为15kHz,一开始代码都运行在flash中,使用自制的上位机统计算法运行时间,ADC采样时间,位置更新时间,控制周期,发现算法运行时间波动巨大,具体时间如下:

屏幕截图 2025-05-06 094821.png
其中算法执行时间平均值为2.73us,波动可以达到6.2566us,并且这个波动完全是随机的,有时候可能会到50us以上,进而使得单片机ADC采样结束中断丢失,严重的时候直接卡死。
后面尝试了各种手段,最后将频繁执行的代码都放到了ITCM中,问题终于解决,算法执行时间稳定到了2.5us左右,再没有卡死的情况出现了,代码放入ITCM后,算法执行时间如下:
屏幕截图 2025-05-06 095521.png

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 5 天前 | 显示全部楼层
谢谢分享,这个时间量汇总是个非常好的思路。
回复

使用道具 举报

4

主题

1444

回帖

1456

积分

至尊会员

积分
1456
发表于 5 天前 | 显示全部楼层
回复

使用道具 举报

42

主题

1016

回帖

1147

积分

至尊会员

积分
1147
发表于 5 天前 | 显示全部楼层
挺好的思路
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 5 天前 | 显示全部楼层
另外补充一下测试条件,所有测试都是开启了ICache和DCache
回复

使用道具 举报

22

主题

324

回帖

390

积分

高级会员

积分
390
发表于 5 天前 | 显示全部楼层

请问这是自己做了个采集卡,然后在单片机程序里对要执行时间测量的代码块前后插入IO翻转,用采集卡去采集电平时间得到的吗
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 4 天前 | 显示全部楼层
tovinz 发表于 2025-5-6 17:57
请问这是自己做了个采集卡,然后在单片机程序里对要执行时间测量的代码块前后插入IO翻转,用采集卡 ...

没那么复杂,在程序执行前后读取DWT寄存器的时间戳计算得到的执行时间,至于数据都是通过串口发送到上位机中。
回复

使用道具 举报

22

主题

324

回帖

390

积分

高级会员

积分
390
发表于 4 天前 | 显示全部楼层
WZH 发表于 2025-5-7 09:50
没那么复杂,在程序执行前后读取DWT寄存器的时间戳计算得到的执行时间,至于数据都是通过串口发送到上位 ...

那波特率是不是要很高啊
回复

使用道具 举报

7

主题

36

回帖

57

积分

初级会员

积分
57
发表于 4 天前 | 显示全部楼层
WZH 发表于 2025-5-7 09:50
没那么复杂,在程序执行前后读取DWT寄存器的时间戳计算得到的执行时间,至于数据都是通过串口发送到上位 ...

哥,能分享一个demo吗?感觉这种时间统计的方式以后调试算法的时候很好用。
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 4 天前 | 显示全部楼层
tovinz 发表于 2025-5-7 10:01
那波特率是不是要很高啊

我现在是6M的波特率,另外需要在数据传输协议进行处理一下,我使用的是论坛中看到的cobs编码作为传输编码方式。
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 4 天前 | 显示全部楼层
xdh873939316 发表于 2025-5-7 10:08
哥,能分享一个demo吗?感觉这种时间统计的方式以后调试算法的时候很好用。

有点小复杂,回头我整理一个matlab版本的发到论坛里,qt版的还在开发完善中
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 4 天前 | 显示全部楼层
eric2013 发表于 2025-5-6 10:25
谢谢分享,这个时间量汇总是个非常好的思路。

回复

使用道具 举报

22

主题

324

回帖

390

积分

高级会员

积分
390
发表于 4 天前 | 显示全部楼层
WZH 发表于 2025-5-7 10:39
我现在是6M的波特率,另外需要在数据传输协议进行处理一下,我使用的是论坛中看到的cobs编码作为传输编码 ...

有个纸飞机调试助手,可以使用串口进行多通道绘图,但是我没用过这么高的波特率。
你用的是USB转TTL接入电脑的吗,哪个牌子的支持这么高的波特率
回复

使用道具 举报

15

主题

174

回帖

234

积分

高级会员

积分
234
 楼主| 发表于 4 天前 | 显示全部楼层
tovinz 发表于 2025-5-7 10:51
有个纸飞机调试助手,可以使用串口进行多通道绘图,但是我没用过这么高的波特率。
你用的是USB转TTL接入 ...

用的DAP-Link,牌子是Fanx Tek,淘宝买的,宣传是支持12M波特率,我只用过6M,还挺稳的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-11 18:12 , Processed in 0.312457 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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