ADC 模数转换器
ADC简介
ADC (Analog-Digital Conerter) 模拟-数字转换器
ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。
- 12位逐次逼近型ADC,1us转换时间。
- 输入电压范围:0~3.3V,转换结果范围:0~4095。
- 18个输入通道,可测量16个外部和2个内部信号源。
- 规则组和注入组两个转换单元。
- 模拟看门狗自动监测输入电压范围
STM32F103C8T6 ADC资源
ADC1,ADC2,10个外部输入通道。
- AD转换的步骤:采样、保持、量化、编码。
STM32初始化ADC
开启RCC时钟
开启ADC和GPIO的时钟。
并且配置ADCCLK预分频器。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //六分频
配置GPIO
将需要使用的GPIO口配置为模拟输入的模式。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_x;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOx,&GPIO_InitStructure);
配置多路开关
将GPIO通道接入到AD转换器的规则组列表中
ADC_RegularChannelConfig函数的参数取值
选择使用的ADC通道
可以选择如下17个通道:
- ADC_Channel_0
- ADC_Channel_1
- ADC_Channel_2
- ADC_Channel_3
- ADC_Channel_4
- ADC_Channel_5
- ADC_Channel_6
- ADC_Channel_7
- ADC_Channel_8
- ADC_Channel_9
- ADC_Channel_10
- ADC_Channel_11
- ADC_Channel_12
- ADC_Channel_13
- ADC_Channel_14
- ADC_Channel_15
- ADC_Channel_16
- ADC_Channel_17
用以配置规则组中16个序列
一共可以选择如下值,其中值越小采样速度越快。
- ADC_SampleTime_1Cycles5
- ADC_SampleTime_7Cycles5
- ADC_SampleTime_13Cycles5
- ADC_SampleTime_28Cycles5
- ADC_SampleTime_41Cycles5
- ADC_SampleTime_55Cycles5
- ADC_SampleTime_71Cycles5
- ADC_SampleTime_239Cycles5
配置ADC转换器
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式(独立模式)
ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right; //对齐方式(右对齐)
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发转换选择(软件触发)
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADCx,&ADC_InitStructure);
ADC初始化结构体
配置ADC工作模式。
- 独立模式:ADC_Mode_Independent
双ADC模式:
- ADC_Mode_RegInjecSimult
- ADC_Mode_RegSimult_AlterTrig
- ADC_Mode_InjecSimult_FastInterl
- ADC_Mode_InjecSimult_SlowInterl
- ADC_Mode_InjecSimult
- ADC_Mode_RegSimult
- ADC_Mode_FastInterl
- ADC_Mode_SlowInterl
- ADC_Mode_AlterTrig
数据对齐方式。
- 右对齐:ADC_DataAlign_Right
- 左对齐:ADC_DataAlign_Left
外部触发转换选择,选择触发控制的触发源。
不使用外部触发,也就是内部软件触发。 * ADC_ExternalTrigConv_None
其它触发源待完善。
连续转换模式,选择连续转换或者单次转换。
- 连续模式:ENABLE
- 单次模式:DISABLE
扫描转换模式,选择扫描模式或者非扫描模式。
- 扫描模式:ENABLE
- 非扫描模式:DISABLE
通道数目,用于指定在扫描模式下,总共会用到几个通道。
- 这个参数必须在1~16之间
开启ADC
使用ADC
校准ADC
ADC_ResetCalibration(ADCx); //复位校准
while (ADC_GetResetCalibrationStatus(ADCx) == SET){; //等待复位校准完毕
}
ADC_StartCalibration(ADCx); //开始校准
while (ADC_GetCalibrationStatus(ADCx) == SET){; //等待开始校准完毕
}
ADC软件开始转换控制
触发转换
软件触发转换。
等待转换完成
等待EOC标志位置1
转换完成标志位的几种选择
看门狗标志位。
EOC,规则组转换完成标志位。
JEOC,注入组转换完成标志位。
JSRT,注入组开始转换标志位。
STRT,规则组开始转换标志位。