前言:
ADC,即模数转换器,是一种将模拟信号转换成数字信号的电路。ADC采集是指将模拟信号转换成数字信号的过程,其中ADC芯片负责将模拟信号转换成数字信号,同时需要传感器、放大器、滤波器等辅助电路对模拟信号进行前置处理。
ADC采集过程包括取样、量化和编码3个过程:
-
取样:将连续的模拟信号转换为离散的模拟信号,即在特定的时间间隔内,对模拟信号进行采样得到离散的样本值。
-
量化:将连续的模拟信号转换为离散的数字信号,量化是将采样得到的离散信号按照一定的规律进行分段,每一段对应一个数字量,从而将连续信号转换为离散的数字信号。
-
编码:将采样和量化后得到的数字信号进行编码,以便于存储和传输。编码可以采用二进制补码编码、格雷码编码等方式进行。
ADC采集过程中需要注意以下几点:
-
采样频率应根据被采集信号的最高频率进行选择,过低的采样率会导致信号失真。
-
量化精度越高,数字信号的质量越好,但是时间和空间成本也会随之增加。
CUBEMX配置:
使能ADC通道,修改时钟分频系数,设置采样时间,通道,采用软件触发,多通道扫描不循环。其它部分,不做修改。
代码部分:
HAL_ADC_Start(&hadc2);
adc1=HAL_ADC_GetValue(&hadc2);
HAL_Delay(1);
adc2=HAL_ADC_GetValue(&hadc2);
多通道采集,校准函数用了和没用没啥太大差别。
校准函数如下:
HAL_ADCEx_Calibration_GetValue(&hadc2,ADC_SINGLE_ENDED);
使用如下:
char chProc[21];
sprintf(chProc,(const char *)"V1=%.2f,V2=%.2f",adc1*3.3/4096,adc2*3.3/4096);
LCD_DisplayStringLine(Line2,(u8 *)chProc);
将ADC采样的数字量转换为对应的模拟电压值时,需要将采集值乘上电压基准(一般是开发板中的供电电压),然后将结果除以2的n次方,其中n为ADC采样分辨率。因为ADC采样取值范围为0到2的n次方-1,所以在电压转换时要除以2的n次方来得到对应的电压值。
蓝桥杯的ADC采样分辨率为12位,即n=12,开发板供电通常为3.3V。因此,针对ADC采集到的数字量,我们需要将其乘上3.3V(电压基准)并将结果除以2的12次方,即4096(采样分辨率),才能得到对应的模拟电压值。
例如,如果ADC采集到的数字量为2048,那么它对应的模拟电压值即为:2048 * 3.3 / 4096 = 1.65V。