STM32-ADC过采样实验

我们之前已经有过一些关于STM32-ADC的笔记和实验代码了,链接如下:

关于ADC的笔记1_Mr_rustylake的博客-优快云博客

STM32-ADC单通道采集实验_Mr_rustylake的博客-优快云博客

STM32-单通道ADC采集(DMA读取)实验_Mr_rustylake的博客-优快云博客

STM32-ADC多通道输入实验_Mr_rustylake的博客-优快云博客

首先简单介绍一下过采样。对于12位的STM32,其所能分辨的最小电压(即最小刻度)为3.3V / 2^12 = 0.0008V。在不改进硬件的情况下,可以通过过采样和求均值的方式提供ADC分辨率。

根据增加的分辨率位数计算过采样分辨率频率的方程:

fos = 4^w * fs,fos是过采样频率,w是希望增加的分辨率位数,fs是初始采样频率要求。

比如从12位提升ADC分辨率到16位分辨率,采样频率就要提高256倍。将采样结果求和,再将求和结果右移N位(N为用户想提升的位数,本例中为4),就能得到提高分辨率的结果了,这个过程称为抽取。

本次ADC过采样实验的实验要求是:通过ADC1通道1(PA1)过采样实现16位分辨率采集电压,并显示ADC转换的数字量和转换后的电压值。

首先确定我们的最小刻度,Vref = 3.3V,所以0V <= Vin <= 3.3V,所以最小刻度是3.3V / 65536(2^16)。

接下来确定转换时间。采样时间1.5个ADC时钟周期为例,可以得到转换时间为1.17 * 256us。

时间转换公式参考如下公式:Tcvtmin=(12.5+X)周期=(12.5 + X)/(12MHz)=1.17us。

接下来编写实验代码:

先编写函数文件adc.c:

#include "./BSP/ADC/adc.h"
 
ADC_HandleTypeDef g_adc_handle;
DMA_HandleTypeDef g_dma_handle;
uint8_t g_adc_dma_sta; //标志DMA的传输是否完成
 
void adc_dam_init(uint32_t mar){
 
    ADC_ChannelConfTypeDef adc_ch_conf;
 
    __HAL_RCC_DMA1_CLK_ENABLE();
 
    g_dma_handle.Instance = DMA1_Channel1;
    g_dma_handle.Init.Direction = DMA_PERIPH_TO_MEMORY;  //外设到内存
    g_dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;  //因为选取的是DM
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值