[STM32F2] 正弦信号输入到ADC引脚,如何测量信号频率

[复制链接]
1473|11
 楼主| 情感天下 发表于 2022-8-30 16:36 | 显示全部楼层 |阅读模式
正弦信号输入到ADC引脚,主要用于测量有效值,但是频率是变化的(50-400Hz),怎么测量频率比较准确。本来想软件检测过零点计算,但按照一个周期128点,误差1/128为0.78%也比较大,有没有更好的计算频率的方法。
sonicll 发表于 2022-8-30 17:29 | 显示全部楼层
如果对测量耗时没有要求的话,可以考虑做FFT

评论

FFT能实现,总共6路,耗时有点多,其他任务可能响应慢。  发表于 2022-8-30 19:33
xch 发表于 2022-8-30 18:08 | 显示全部楼层
要测多准?

ADC 采集速度能到多少SPS?
yjmwxwx 发表于 2022-8-30 19:32 | 显示全部楼层
https://bbs.21ic.com/icview-3245662-1-1.html
截图_2022-08-30_19-23-59.png

我前些日子学单片机搞的小试验,两个运放一路进ADC一路进定时器捕获,再根据捕获到的时间更新用来触发ADC采样的定时器,方法比较简单,就是定时器捕获+可变采样率

捕获的时间就是频率,可变采样率采集到的电压序列乘相同点数的COS和SIN表累加就出来实部虚部了(DFT)
 楼主| 情感天下 发表于 2022-8-30 19:36 | 显示全部楼层
xch 发表于 2022-8-30 18:08
要测多准?

ADC 采集速度能到多少SPS?

ADC速度问题不大,单通道单次转换时间为0.5us,要是采集太频繁,数据量太大,计算有效太费时间了,忘记说了系统这样的ADC总共有6路。希望频率误差为0.1Hz。
xch 发表于 2022-8-30 20:58 | 显示全部楼层
情感天下 发表于 2022-8-30 19:36
ADC速度问题不大,单通道单次转换时间为0.5us,要是采集太频繁,数据量太大,计算有效太费时间了,忘记说 ...

使用定时器触发ADC采样,采样频率1600Hz。最多保存32个ADC数据。‘然后 使用递归算法得到正弦波幅度和频率。
16位的ADC 可以达到0.1hz分辨率。 要不然,增加采样频率,如12位ADC ,就用 25600采样。

还有一种方法就是使用DPLL,更改触发频率,来趋近所要求的精度。只是测量一次需要好几个轮回,慢了。
lijun1981xd 发表于 2022-8-30 23:11 | 显示全部楼层
你测试的信号频率短时间变化不大,可以采用你软件过零点计算频率,所得软件频率在进行软件递归滤波,滤波越强,得到信号频率精度越高。以前用STM8S003采样频率1K采样50HZ交流,频率精度差不多能做到0.1HZ
laocuo1142 发表于 2022-8-31 08:20 | 显示全部楼层
0.1hz精度太高,需要的数据太大,MCU主频够高可以
ayl439 发表于 2022-8-31 08:38 | 显示全部楼层
伏尔加的鱼 发表于 2022-8-31 09:32 | 显示全部楼层
时间上允许的话可以做每个采样点处理软件过零
manbo789 发表于 2022-8-31 12:10 | 显示全部楼层
会有一些方法比FFT更快的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

25

帖子

2

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