STM32 ADC 采样时间计算与误差处理

本文介绍了如何计算STM32中ADC的采样时间和间隔时间,包括系统时钟频率、ADC分频因子和采样周期的计算。同时,针对ADC采样误差的处理,提出了使用ADC校准函数进行校准的方法,并提供了错误场景下的解决方案,如调整采样周期以减小误差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、采样计算

1.1 已知:

f * s = 1,时间与周期成反比。

1.2 未知:

如下参数:

  • 1. 配置的STM32的系统时钟频率,例如:72MHZ。
  • 2. 设置的ADC分频因子,例如:RCC_PCLK2_Div6,即6分频。
  • 3. 设置的ADC采样时间,例如:ADC_SampleTime_239Cycles5, 即239.5个周期。

1.3 计算:

以系统时钟频率为72MHZ,ADC分频因子为RCC_PCLK2_Div6, ADC的采样时间为ADC_SampleTime_1Cycles5,进行计算

ADCCLK(ADC的时钟频率 ) = 72MHZ(系统时钟频率) / 6 (ADC分频因子) = 12MHZ。

一个ADC周期占用的时间 = 1 / 时钟频率 = 1 / 12MHZ = 0.0833334 uS
一次采样总的时间 = 采样时间 + 12.5个周期 = 1.5周期 + 12.5周期 = 14周期 = 14 * 0.0833334 = 1.166667 uS
两次采样间隔时间 = 1.166667 uS (ADCCLK为12MHZ时的最小采样间隔时间)

同理,计算ADCCLK为12MHZ时的最大采样间隔时间 = 239.5周期 + 12.5周期 = 252周期 = 21 uS

二、误差处理

2.1 较小误差

场景:
例:ADC基准电压为3.3V,进行采集电压值为1.65V。使用AD进行采样,采样值比应为0.5,但是实际采样值比在0.5附近徘徊。
处理:

  1. 固件库使用ADC_StartCalibration()函数进行ADC校准;
  2. HAL库使用HAL_ADCEx_Calibration_Start()函数进行ADC校准。
    注意:
    ADC校准过程应该在 ADC开始函数之前,或者ADC结束函数之后。
    以HAL为例:
HAL_ADCEx_Calibration_Start(&hadc);
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc, 0XFFFF);
value = HAL_ADC_GetValue(&hadc);
HAL_ADC_Stop(&hadc);

2.2 采集值较小,误差较大

场景:
例:ADC基准电压为3.3V,进行采集电压值为1.65V。使用AD进行循环采样,采样值比应为0.5,但是实际采样值每次都小于0.5,并且误差较大。
处理:
由于采样周期太小导致采样不准确。
合理增大采样周期,视项目功能而定。
例如将ADC_SampleTime_1Cycles5修改为ADC_SampleTime_239Cycles5。

其他:

觉得有用请点赞,谢谢!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值