一、AD转换的分类及其常用AD转换的特点
分类:
- 按转换方式分:双积分式A/D转换,逐次逼近式A/D转换,并行比较式A/D转换。
- 按转换位数分:8位、10位、12位、16位、24位。
- 位数的含义,比如电压1伏,用几个0,1代码表示。
特点:
- 双积分式A/D转换精度高,多用于数据采集系统及精度要求比较高的场合。
- 并行A/D转换和串/并行A/D转换速度快。
- 逐次逼近型A/D转换具有较高的转换速度,又有较好的转换精度,是目前应用最多的一种A/D转换。
二、逐次逼近式AD转换原理
4位AD转换的变换:
三、AD转换公式
Vin:输入电压
Vref:参考电压(STM32一般取3.3V)
n:转换位数(逐次逼近式AD转换器,分辨率为12位)
ADC:转换数据
四、AD转换流程
- 初始化ADC
- 启动首次转换,丢弃首次结果
- 启动转换,并读取转换结果
- 数据滤波
- 进行进制转换
五、AD初始化
void Adc_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //使能ADC1通道时钟
//PA1 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2Mhz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式 ENABLE在连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5); //ADC1,ADC通道,采样时间为1.5周期
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1); //使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
}