AD的概念及性能指标
- AD概念:将连续的模拟信号转换为离散的数字信号的器件。
- 转换时间:AD完成一次转换所需要的时间,其倒数为转换速率。
- 分辨率 输出模拟量最小变化程度的指标(32上的为12位)。12位,满量程5v分辨率为:5 /(2^12)=1.22mv
- 量化误差 量化过程引起的误差 理论上规定为一个单位分辨率的-1/2 --- +1/2LSB 。
- 转换精度:实际A/D转换器与一个理想A/D转换器在量化值上的差值,可用绝对误差或相对误差表示。
AD时钟
时钟由PCLK2经过分频产生,最大14M 一般使PCLK2=HCLK=72M
采样的周期数可通过 ADC 采样时间寄存器 ADC_SMPRx(x=0、1) 中的 SMP[2:0]位设置,ADC_SMPR2 控制的是通道 0~9,ADC_SMPR1 控制的是通道 10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是 1.5 个(ADC_CLK 周期,1/ADC_CLK),即如果我们要达到最快的采样,那么应该设置采样周期为 1.5 个周期。
ADC的转换时间:与ADC的输入时钟和采样时间有关。 公式为:Tconv = 采样时间 + 12.5 个周期。
CubeMX的配置
使用 ADC1 的其中1个通道,通道号10,对应的引脚是 PC0;
设置ADC 时钟参数,这里设置 PLCK2是72M;时钟经过 6 分频,那么此时的时钟就是 12MHz。
设置 ADC 的转换模式以及通道进行设置,独立模式(Independent mode)、数据右对齐(Right Alignment)、连续转换模式(Continuous Conversion Mod)使能;使能规则通道转换,选择1个通道。
常用函数
ADC:HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//此函数Adon控制位,置1,启动ADC。
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
//用于轮询ADC转换。 adc句柄和超时时间
HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
//读取ADC的值,清EOC; 返回AD采集的值
uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc);
//读取ADC的状态;本例参数: adc句柄,取值&hadc1 返回状态值
终端回调函数的编写
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{ uint16_t ADC1_Value;
uint32_t Rt;
if (htim->Instance == htim1.Instance) //判断时钟状态是否达到中断
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC1_Value = HAL_ADC_GetValue(&hadc1);
Rt=(10000*ADC1_Value)/ (4096-ADC1_Value); //计算此时电阻
return Rt;
}
}