[通用M4] 平滑波形绘图方案

[复制链接]
125|14
田舍郎 发表于 2026-8-28 21:58 | 显示全部楼层 |阅读模式

我在 HC32F420、Keil MDK 的逻辑分析仪 / 时序图里,通过下面函数观测变量signal_sample,可以画出波形,但存在问题:

void plot_signal(uint32_t delay){

for(int i=0;i<_5HZ_SIGNAL_LEN;i++){

signal_sample=_5hz_signal;

for(int j=0;j<9000;j++){}

}

}

三个软件画出的全是阶梯状折线,原因是调试追踪采样频率远高于更新signal_sample的频率,两次赋值之间大量重复采样同一个固定值,图表就变成台阶。

我目前唯一能画出平滑曲线的办法是通过 UART printf 把数值发给 Matlab 串口绘图工具。串口只会输出每次真正更新后的有效数据,不会采集中间不变的重复值,曲线顺滑。

但现在的问题是我需要同时绘制多路信号,单纯串口打印很难高效同步传输多通道数组。

暂时想不到更优方案,希望各位给一些思路。

班杰明 发表于 2026-9-1 10:36 | 显示全部楼层
增加采样点,减小延时循环,试试调整for循环的j次数,比如改为for(int j=0;j<5000;j++),看看能否减少重复采样,波形平滑度会有所改善。
埃娃 发表于 2026-9-2 09:16 | 显示全部楼层
改用DMA直接传输数据到逻辑分析仪,可以减少CPU占用,提高采样频率,平滑度会好很多。
狄克爱老虎油 发表于 2026-9-3 09:49 | 显示全部楼层
调整延时循环,尝试for(int j=0;j<5000;j++),平滑度会提升。同时,考虑用DMA传输数据到逻辑分析仪,效率更高。
深渊之海 发表于 2026-9-4 09:32 | 显示全部楼层
调整延时循环,用DMA传输数据,这样效率高,波形平滑。
Undshing 发表于 2026-9-5 09:53 | 显示全部楼层
改用DMA传输数据,并优化采样频率,比如设置采样点间隔,这样可以有效减少重复采样,提高波形平滑度。
SophiaOP 发表于 2026-9-6 11:35 | 显示全部楼层
调整延时循环至5000,用DMA传输,测试看波形是否平滑。
MessageRing 发表于 2026-9-8 10:01 | 显示全部楼层
调整延时循环到5000,并用DMA传输数据,这样既能提高采样频率,又能减少CPU负担,波形应该会平滑很多。
LightCatcher 发表于 2026-9-9 09:28 | 显示全部楼层
优化延时循环至5000,并考虑用DMA将数据发送到示波器,可提高效率和波形平滑度。
FranklinUNK 发表于 2026-9-10 10:07 | 显示全部楼层
增加采样点,但要注意采样点过多会增加内存消耗和计算量。可以尝试用中断服务例程(ISR)来触发采样,这样可以在保证采样频率的同时,避免CPU长时间占用。
风之呢喃 发表于 2026-9-11 10:45 | 显示全部楼层
试试调整延时循环到5000,并用DMA传输数据,这样可以提高效率,减少CPU负担,波形应该会平滑很多。
DreamWanderer 发表于 2026-9-12 14:14 | 显示全部楼层
改用DMA传输数据,并在Keil设置适当的缓冲区,这样数据会以固定的频率传输,平滑度应该会有明显改善。
WhisperingTrees 发表于 2026-9-14 09:41 | 显示全部楼层
用中断代替轮询来采样,CPU不用等待延时,可以提高采样频率。再考虑用DMA直接将采样数据发送到逻辑分析仪,这样效率更高,波形会更平滑。
Stahan 发表于 2026-9-15 10:52 | 显示全部楼层
试试中断服务例程(ISR)触发采样,结合DMA传输,这样采样频率高,CPU负担小,波形应该更平滑。
云上漫步 发表于 2026-9-16 10:33 | 显示全部楼层
改用DMA传输数据,并在逻辑分析仪中设置合适的采样率,这样既能提高传输效率,又能避免CPU过载。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

2660

帖子

2

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