‍☠️stm32Cubemx欠采样(等效采样)原理讲解与实现 采集高频信号
创始人
2024-11-10 22:43:03
0

🏴‍☠️STM32Cubemx ADC+TIM+DMA欠采样采集高频信号

本文主要讲解ADC借助欠采样采集高频信号,比如使用100k左右的采样率去采集1M的信号。

所需工具:

  • 开发板:STM32F103RCT6
  • STM32CubeMX
  • IDE: Keil-MDK

相关文章:

  • STM32HAL ADC+TIM+DMA采集交流信号
  • STM32cubeHAL ADC+TIM+DMA (二)
  • stm32cubemx ADC+TIM+DMA超频采样_
  • STM32ADC同步采样

文章目录

  • 🏴‍☠️STM32Cubemx ADC+TIM+DMA欠采样采集高频信号
    • 😄原理简介
    • ⚽例程1
      • 工程建立
      • 运行结果
    • 🏓例程2
      • 工程建立
      • 运行结果
    • 🥊难点
    • 🥑练习
    • 🍉后记

😄原理简介

看过本文最一开始的“相关文章”中提到的文章后,会对信号采集有一定的概念。文章中使用的都是过采样,意思是采样率为待测信号频率的两倍及以上。这么说有些空,举例来说。如果想采集一个1K的正弦信号,一个周期采集4个点,那么采样率为4K。过程如下图:

IMG_0044(20230605-162420)

题外话,没学过信号与系统的小朋友,可能会疑惑,这边采集4个点有啥用?根本看不出来是正弦,还原出来和三角波一样嘛!这就涉及到奈奎斯特采样定理的原理了,要好好学习《信号与系统》和《数字信号处理》,就能明白为什么这个正弦信号,一个周期采集2个点以上就可以复原出来。怎么复原呢?需要用到增采样的知识,我写过一篇matlab仿真增采样:Matlab增采样仿真

上图展示的采样率为4k,每隔0.25ms采集一个点。

增采样对采样率要求较高,如果要采集的信号是1M,一个周期4个点的话,那么我的采样率是不是就要4M了?有没有办法用低采样率,采集高频信号呢?

一个周期四个点嘛,我能否每个周期只采集一个点,然后拼在一起呢?每隔1.25ms采集一个点,这样采集的四个点拼接在一起,不也是一样的效果。

IMG_0045(20230605-172542)

如图中所示,每个周期采集一个点,把所有点拼接在一起,就实现了每个周期采集4个点的效果。
采样率 = 1 1.25 ∗ 1 0 − 3 = 800 h z 采样率=\frac{1}{1.25*10^{-3}}=800hz 采样率=1.25∗10−31​=800hz
我们使用800hz的采样率去采集1K信号,达到了4K采样率的效果!这便是欠采样用时间换采样率

⚽例程1

工程建立

建立过程与STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx_stm32 adc dma 采集交流_四臂西瓜的博客-CSDN博客一样,唯一不同之处是,采样率为800hz。文末会放置本文的完整工程。
采样率 = 时钟: 72 ∗ 1 0 6 分频: 1000 ∗ 90 = 800 h z 采样率=\frac{时钟:72*10^{6}}{分频:1000*90}=800hz 采样率=分频:1000∗90时钟:72∗106​=800hz
image-20230605175948832

补充一个知识:我们平时说的预分频PSC是指上图中的Prescaler,此处为1000-1。ARR自动重装载值,是指图中的Counter Period(AutoReload Register),此处为90-1。

运行结果

信号发生器输出:1kHz,1V-2V幅值范围的正弦信号。

IMG_20230605_180623

VOFA上观察到如下结果:

image-20230605175919827

可以看到一个周期确实是4个点,此处形状和原理分析中、预想的三角形波形不一样,是因为相位没有从零度开始采集,如下图:

IMG_0046(20230605-182138)

采集的点,连成线,就如图中的蓝色线一样,形成“锯齿”状。

这里就可以通过理想插值(增采样),来实现复原,如何增采样呢?可以关注我的“TCQ的电赛小站”,有时间会更新基于CMSIS-DSP的理想插值实现。

🏓例程2

工程建立

现在我们来思考一个问题,我们现在每个周期只采集4个点,如果想每个周期采集10个点,那么采样时间间隔就要从1.25ms变成1.1ms

IMG_0049(20230605-184150)

换算成采样率为:
采样率 = 1 1.1 ∗ 1 0 − 3 = 909.0909... h z 采样率=\frac{1}{1.1*10^{-3}}=909.0909...hz 采样率=1.1∗10−31​=909.0909...hz
会发现采样率并不是一个整数,这就麻烦了。如果我们现在想用定时器来出发ADC进行采样,那么分频如何设置?
分频 = 72 ∗ 1 0 6 909.0909 = 79200.00000792 分频=\frac{72*10^{6}}{909.0909}=79200.00000792 分频=909.090972∗106​=79200.00000792
我们现在设置:
P S C = 100 A R R = 792 PSC=100\\ ARR=792 PSC=100ARR=792

运行结果

与例程1一样,信号发生器输出:1kHz,1V-2V幅值范围的正弦信号。

image-20230605183535446

如果读者愿意,可以数一数,会发现一个周期正是10个点!
我们用 909.09 h z 的采样率,去采集了一个 1 k 的信号,等效采样率 10 k !! 我们用909.09hz的采样率,去采集了一个1k的信号,等效采样率10k!! 我们用909.09hz的采样率,去采集了一个1k的信号,等效采样率10k!!

🥊难点

是的,欠采样也不是万能的,家家有本难念的经,采样家族里,欠采样也有它的烦恼>_<😕。

在例程2中,我们试图每1.1ms采集一个点,换算成频率后,发现是不是一个整数,非常幸运的是,转换成分频后,可以找到合适的PSC和ARR使得采样率和预期值基本一致。

这个计算过程可以通过公式化简一下:
采样率 = 1 秒 采样时间间隔 采样率=\frac{1秒}{采样时间间隔} 采样率=采样时间间隔1秒​

定时器分频 = P S C ∗ A R R = 定时器时钟 采样率 = 定时器时钟 1 秒 采样时间间隔 = 定时器时钟 ∗ 采样时间间隔 \begin{align} 定时器分频&=PSC*ARR=\frac{定时器时钟}{采样率}\\ &=\frac{定时器时钟}{\frac{1秒}{采样时间间隔}}\\ &=定时器时钟*采样时间间隔 \end{align} 定时器分频​=PSC∗ARR=采样率定时器时钟​=采样时间间隔1秒​定时器时钟​=定时器时钟∗采样时间间隔​​

现在有了这个公式,我们来重新计算下例程1、2的分频:
例程 1 : P S C ∗ A R R = ( 72 ∗ 1 0 6 ) ∗ ( 1.25 ∗ 1 0 − 3 ) = 90000 例程1:PSC*ARR=(72*10^{6})*(1.25*10^{-3})=90000 例程1:PSC∗ARR=(72∗106)∗(1.25∗10−3)=90000

例程 2 : P S C ∗ A R R = ( 72 ∗ 1 0 6 ) ∗ ( 1.1 ∗ 1 0 − 3 ) = 79200 例程2:PSC*ARR=(72*10^{6})*(1.1*10^{-3})=79200 例程2:PSC∗ARR=(72∗106)∗(1.1∗10−3)=79200

挺好的呀,PSC*ARR都是比较好处理的整数。可是当频率高起来后,就不是特别好凑出来了,甚至于根本没法凑出来。比如以1.1us的时间间隔去采集1M信号,等效采样率为10M。
P S C ∗ A R R = ( 72 ∗ 1 0 6 ) ∗ ( 1.1 ∗ 1 0 − 6 ) = 7.92 PSC*ARR=(72*10^{6})*(1.1*10^{-6})=7.92 PSC∗ARR=(72∗106)∗(1.1∗10−6)=7.92
看吧,PSC * ARR是小数,但是PSC和ARR必须是整数,没法凑出来🤔。

🥑练习

  1. 下载例程并且上电调试,观察结果。

  2. 尝试测量更高频率的信号,比如测量几兆的信号。

  3. 假如,PSC*ARR可以设置成小数,欠采样可以采集任意频率的信号吗?

    提示,学习下ADC的“采样保持”。

🍉后记

本文章收录于:

唐承乾的电赛小站

本文为系列文章中的冰山一角,欢迎进入小站查看。

配套程序:
公众号回复: 32欠采样
在这里插入图片描述

相关内容

热门资讯

七分钟细节!wepoker辅助... 七分钟细节!wepoker辅助软件价格(一贯真的有挂)详细教程(有挂脚本)-哔哩哔哩;1、操作简单,...
透视脚本!wepoker辅助工... 透视脚本!wepoker辅助工具"pokermaster有德州吗"(的确是有挂的)1、任何wepok...
3分钟揭秘!wepokerpl... 3分钟揭秘!wepokerplus脚本(的确是有挂的)详细教程(有挂攻略)-哔哩哔哩;进入游戏-大厅...
透视脚本!we poker辅助... 透视脚本!we poker辅助器下载"德州aapoker俱乐部"(一贯真的有挂)we poker辅助...
九分钟规律!hhpoker到底... 九分钟规律!hhpoker到底可以作弊吗(的确真的有挂)详细教程(有挂脚本)-哔哩哔哩;hhpoke...
透视脚本!wejoker免费脚... 您好,wejoker免费脚本这款游戏可以开挂的,确实是有挂的,需要了解加微【487309276】很多...
一分钟细节!wepoker提高... 一分钟细节!wepoker提高好牌率(一般真的有挂)详细教程(有挂攻略)-哔哩哔哩1、任何wepok...
透视脚本!werplan外挂&... 透视脚本!werplan外挂"wpk德州辅助器"(果然真的有挂)1、打开软件启动之后找到中间准星的标...
2分钟详细!哈糖大菠萝破解器(... 2分钟详细!哈糖大菠萝破解器(一直真的有挂)详细教程(有挂攻略)-哔哩哔哩哈糖大菠萝破解器辅助器中分...
透视脚本!wpk作弊最怕三个东... 透视脚本!wpk作弊最怕三个东西"来玩德州扑克约局神器"(果然真的有挂);一、wpk作弊最怕三个东西...