学习目标:
学习AD单通道和AD多通道
学习内容:
ADC的简介
1.ADC(Analog-Digital Converter)模拟-数字转换器
2.ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
3.12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V,转换结果范围:0~4095 18个输入通道,可测量16个外部和2个内部信号源
逐次逼近型ADC:
4.规则组和注入组两个转换单元 模拟看门狗自动监测输入电压范围
5.STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道
ADC框图
时钟
ADC的基本结构图
规则组的4种2转换模式
1.单次转换,非扫描模式(每次转化都需要触发)
2. 单次转换,扫描模式
3.连续转换,非扫描模式(只需要触发一次)
4.连续转换,扫描模式
触发控制
数据对齐(因为ADC是12位的,而我们的寄存器是16位的,所以需要数据对齐)
通常使用右对齐
转换时间
AD转换的步骤:采样,保持,量化,编码
STM32 ADC的总转换时间为: TCONV = 采样时间 + 12.5个ADC周期
例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期 TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs
校准:
ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
建议在每次上电后执行一次校准
启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期
程序实现:
1.开启时钟gpio,adc
2.adc的时钟需要分频RCC_ADCCLKConfig
3.初始化gpio,模式要选择AIN(模拟输入)
4.选择规则组的通道(ADC_RegularChannelConfig)
5.初始化ADC(ADC_Ini)
5.adc使能(.ADC_CMD)
6.adc校准
ADC_ResetCalibration( ADC1);
while(ADC_GetResetCalibrationStatus( ADC1)==SET);//0为复位完成
ADC_StartCalibration( ADC1);
while(ADC_GetCalibrationStatus( ADC1)==SET);//0为校准完成
7.触发转换(ADC_SoftwareStartConvCmd)(如果是连续触发就只需要触发一次,单次触发每次都要需要触发)(连续状态下的标志位会自己判断,所以就不需要自己判断,是否转换成功)
8.获取标志位状态 ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC)
9.adc获取转换值(ADC_GetConversionValue)