打印
[STM32F4]

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

[复制链接]
378|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvuu|  楼主 | 2022-11-18 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、采样计算

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

使用特权

评论回复
沙发
lvuu|  楼主 | 2022-11-18 18:46 | 只看该作者
二、误差处理

2.1 较小误差

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

固件库使用ADC_StartCalibration()函数进行ADC校准;
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);
————————

使用特权

评论回复
板凳
lvuu|  楼主 | 2022-11-18 18:47 | 只看该作者
2.2 采集值较小,误差较大

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

466

帖子

0

粉丝