1、ADC简介
1.1 模式
ADC–模数转换器,将模拟量转换成数字量,以STM32F103为例,包含3个12位ADC,即将0-3.3V范围内的电压,用0-4095表示,二者是线性对应关系。即 实际电压 = (读取的ADC值/4096) * 3.3 STM32F系列ADC有多达18个通道,包括16个外部通道和2个内部通道,各个通道的AD可以以单次模式、连续模式、扫描模式、间断模式执行。 单次模式:只执行一次转换就停止转换 连续模式:一次转换结束后继续开始下次转换 扫描模式:按顺序对所有开启的通道转换 间断模式:一次可以不完成全部通道的转换
1.2 ADC参考电压
对于64及更小的封装,没有VREF+引脚端,在芯片内部被接到ADC电源VDDA。对于100引脚与144引脚的封装,需要对VREF进行设定,比如将VREF+接到3.3V,当然,如果追求更高的精度,可以连接一个独立的外部电压到VREF+引脚端,但要注意电压范围为2.4V—VDDA。
1.3 转换速率
ADC采样时间 = (采样周期+12.5周期) 1/ADC时钟频率* 例如设置ADC时钟为12MHz,Sampling Time 为1.5Cycles,则采样时间为:(1.5+12.5)*1/12 = 1.67us
2、使用轮询模式
2.1 单通道
1、配置系统时钟为72M,ADC时钟为12M 2、ADC配置
3、生成工程,添加你的代码
u32 adc_value;
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_Delay(200);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
adc_value = HAL_ADC_GetValue(&hadc1);
如图所示为ADC转换结果:
2.2 多通道
1、同2.1进行系统配置 2、设置ADC参数(以双通道为例)
3、加入你的代码
u32 ad_value[2];
int i;
for(i=0;i<2;i++)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
ad_value[i]=HAL_ADC_GetValue(&hadc1);
}
3、使用DMA
4、使用中断
5、优化你的数据
|