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

这篇具有很好参考价值的文章主要介绍了‍☠️stm32Cubemx欠采样(等效采样)原理讲解与实现 采集高频信号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🏴‍☠️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同步采样

😄原理简介

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

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

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

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

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

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

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

如图中所示,每个周期采集一个点,把所有点拼接在一起,就实现了每个周期采集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
stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

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

运行结果

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

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

VOFA上观察到如下结果:

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

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

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

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

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

🏓例程2

工程建立

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

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

换算成采样率为:
采样率 = 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幅值范围的正弦信号。

stm32采集高频信号,冬令营,电赛模块,stm32,单片机,嵌入式硬件

如果读者愿意,可以数一数,会发现一个周期正是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文章来源地址https://www.toymoban.com/news/detail-620165.html

到了这里,关于‍☠️stm32Cubemx欠采样(等效采样)原理讲解与实现 采集高频信号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX配置ADC采样(轮询、中断、DMA)

    STM32CubeMX能够极大减小STM32外设配置的工作量,因此作者也借助空闲时间对STM32CubeMX相关配置进行了学习,本文介绍如何利用STM32CubeMX配置ADC采样,记录了作者学习过程中遇到的问题及解决办法,使大家少走弯路,并方便以后复习 先选择所使用的MCU,这里我使用的是STM32F407ZGT系

    2024年02月03日
    浏览(58)
  • 电机FOC控制(三)STM32 CUBEMX 配置ADC采样

    本文在电机FOC控制(二)STM32 CUBEMX 配置三相PWM互补输出基础上,继续讲述如何STM32 CUBEMX 配置ADC寄存器,使TIMER1 PWM互补输出CC4触发ADC注入采样的过程。 打开Clock Configuration界面,将ADC设置为42.5MHz。 设定ADC1通道7和通道8为单端输入: 设定ADC2通道6和通道7为单端输入: ADCs_Comm

    2024年04月23日
    浏览(43)
  • 蓝牙小车(基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图)

    一、小车1.0——基本蓝牙小车(仅蓝牙遥控小车运动方向,本篇) 二、小车2.0——蓝牙小车PLUS(可以蓝牙控制方向+蓝牙直接调节车速) 三、小车3.0——避障小车(超声波+舵机云台) 四、小车4.0——无线手柄方向感知操控小车(mpu6050+双蓝牙透传) 五、双轮自平衡小车(HAL库版

    2023年04月09日
    浏览(54)
  • 定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

    我用的单片机是STM32F103CBTX 定时器:使用PWM输出的模式 ADC:使用DMA的模式 (在不使用DMA的情况下,定时器控制ADC进行数据采集只能是单通道!如果开启了多通道,读取到的ADC采集值只会是最后一个通道的值!所以,要想使用定时器控制ADC采集 多通道 , 必须使用DMA !)  看

    2024年04月10日
    浏览(54)
  • 【STM32】定时器1触发ADC多(规则)通道采样+DMA(CUBEMX配置)

    在用单片机做电源控制时不得不提ADC采集,离散系统是有固定的执行周期的,所以我们采样也是要固定时间去采样。然后就是我希望pwm波(定时器1产出)的频率与采样频率一致。 我下面演示的是G431CBU6,当然其他芯片也大差不差了。 说一下大致流程,TIM1触发ADC采样,然后

    2024年02月01日
    浏览(51)
  • STM32Cubemx——ADC采集+DMA传输

    STM32F407VE核心板 STM32Cubemx 版本 6.0.1 Keil 版本 5.31 杜邦线 ST-Link 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左

    2023年04月24日
    浏览(62)
  • STM32--ADC数值采样/附ADC采集热敏传感器使用

    目录 一丶ADC介绍 二丶ADC工作原理及管脚分布 三丶代码部分详解 (一)库函数介绍 (二)代码部分整合         ADC模块中文名为模拟/数字转换器,是12位逐次逼近型的模拟数字转换器,一般用于数值的采样   可以将引脚上连续变化的模拟电压转换为内存中存储的数字变

    2024年02月03日
    浏览(50)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(56)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(58)
  • STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存。 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相关文章: STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx(二) STM32cubemx ADC+TIM+DMA超频采样 ADC+TIM+DMA采集交流信号是电赛中使用范围最为广泛的一个技术。这个模

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包