‍☠️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欠采样
在这里插入图片描述

相关内容

热门资讯

微扑克辅助器!德州平台有没有挂... 您好:德州平台有没有挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌...
AApoker透视挂!wepo... 很多人使用云端 AI 时,都担心wepoker透视挂是真的吗、内部资料上传带来隐私风险。这款本地运行...
WePoKer透视!wepok... WePoKer透视!wepoker如何拿到好牌,分享透视多功能软件APP模板;近期一款 AI 黑科技...
红龙扑克透视挂!德扑之星规律,... 红龙扑克透视挂!德扑之星规律,解迷透视挂多功能插件APP法门是一款可以让一直输的玩家,快速成为一个“...
aapoker透视!WePoK... 您好,WePoKer有没有透视软件挂这款游戏可以开挂的,确实是有挂的,需要了解加微【48527505...
红龙扑克开挂!微扑克的辅助工具... 很多人使用云端 AI 时,都担心微扑克的辅助工具有哪些、内部资料上传带来隐私风险。这款本地运行的 A...
aapoker辅助!wepok... 您好:wepoker私人局怎么设置抽水这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会...
aapoker辅助挂!wepo... aapoker辅助挂!wepoker透视挂安全吗,普及辅助挂多功能方法APP策略AI 智能体黑科技再...
红龙PoKer辅助挂!wepo... 您好:wepokerplus透视挂真的假的这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌...
德扑之星辅助挂!德州ai辅助有... 德扑之星辅助挂!德州ai辅助有用吗,详细辅助挂多功能下载APP指南书是一款可以让一直输的玩家,快速成...