‍☠️stm32Cubemx欠采样原理讲解与实现 采集高频信号

news/2024/11/17 5:40:01/

🏴‍☠️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.251031=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 采样率=分频:100090时钟:72106=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.11031=909.0909...hz
会发现采样率并不是一个整数,这就麻烦了。如果我们现在想用定时器来出发ADC进行采样,那么分频如何设置?
分频 = 72 ∗ 1 0 6 909.0909 = 79200.00000792 分频=\frac{72*10^{6}}{909.0909}=79200.00000792 分频=909.090972106=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} 定时器分频=PSCARR=采样率定时器时钟=采样时间间隔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 例程1PSCARR=(72106)(1.25103)=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 例程2PSCARR=(72106)(1.1103)=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 PSCARR=(72106)(1.1106)=7.92
看吧,PSC * ARR是小数,但是PSC和ARR必须是整数,没法凑出来🤔。

🥑练习

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

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

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

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

🍉后记

本文章收录于:

唐承乾的电赛小站

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

配套程序:

配套工程 - Gitee.com


http://www.ppmy.cn/news/228541.html

相关文章

图形服务器 性能,测试项目:图形渲染和CPU性能_Intel服务器CPU_服务器评测与技术-中关村在线...

对于每一代产品&#xff0c;用户希望考虑最大的收益&#xff0c;特别是已经采用Sandy Bridge架构处理器平台的用户是否真的需要进行升级&#xff0c;并购买最新Xeon E3-1275 v3产品。在工作效率方面&#xff0c;新一代的产品有着很明显的提升。 针对从Photoshop CS6、Premiere …

2022年企业办公电脑选型建议

** 一、 处理器选型 ** intel 11代移动处理器 I7 1165G7 的性能可以媲美 10代台式机处理器 I5 10500&#xff0c;完胜我现在使用的6代I7 6700戴尔台式机&#xff0c;在日常的应用场景完全可以替换台式机。尤其11代移动处理器中 XE集成显卡的性能有100%的提升&#xff0c;相当…

联想拯救者15isk清灰_清灰和升级容易 联想拯救者14拆机解析

由于消费级笔记本市场的颓靡&#xff0c;不少笔记本厂商开始向游戏笔记本市场发力&#xff0c;全球第一大PC厂商联想也不例外&#xff0c;除了继续推出人气超高的"彪悍的小Y"——Erazer Y40/Y50之外&#xff0c;联想今年更是推出了定位于互联想产品的全新的游戏笔记本…

LabVIEW编程LabVIEW开发控制安东电子LU-926U04Y四路调节模例程与相关资料

LabVIEW编程LabVIEW开发控制安东电子LU-926U04Y四路调节模例程与相关资料 LU-926U04Y 四路 PID 调节模块是一种采用全新设计理念的高性能、高可靠性智能型工业调节仪表。专为轻工机械、烘箱、试验设备、制冷/制热设备等温度、流量、压力、液位等调节控制而设计。在项目中&…

程序员的电脑

今天没事&#xff0c;扯一下电脑的事情&#xff0c;一个是给萌新一个借鉴 如果你也想”入坑“做程序员&#xff0c;或则其它专业&#xff0c;然后想着买一台电脑那么这篇文章应该可以给你一点大致选择电脑的方向。 对于电脑各硬件参数代表什么&#xff0c;通俗的讲一下&#x…

quadro 2000专业显卡 win7计算机体验指数5.9,英伟达全新Quadro K2200专业级显卡评测...

【IT168 评测】去年8月,NVIDIA宣布了五款Quadro专业级显卡新品,并且承诺带来与上一代产品线相比翻倍的应用程序性能和数据处理能力——它们是Quadro K5200、K4200、K2200、K620、以及K420。这其中,Quadro K2200作为中端的主力产品,也秉承了强大的性能和出色的性价比理念。近…

【ABAQUS文档笔记】缩减积分-剪切闭锁-沙漏问题-非协调模式-混杂单元

接上一篇博客 来自ABAQUS DOCUMENT/GETTING STARTED WITH ABAQUS/CAE /USING CONTINUUM ELEMENTS 整理了典型实体单元类型的优缺点&#xff0c;和问题 1. 单元公式和积分 1.1 full integration —— shear lock “完全积分”是指当单元具有规则形状时&#xff0c;对单元刚度…

【vue3】07-vue组件之间的通信-父子互传-事件总线

文章目录 Vue的组件嵌套Vue组件化-组件间通信父子组件之间通信非父子组件间的通信 Vue的组件嵌套 前面我们是将所有的逻辑放到一个App.vue中: 在之前的案例中&#xff0c;我们只是创建了一个组件App;如果我们一个应用程序将所有的逻辑都放在一个组件中&#xff0c;那么这个组…