本文章介绍一种基于软件触发的ADC采集实现方式
如图所示为原理图部分,此处的VCC_MCU为3.3V的电压,ADC0_CH2为ADC采集的通道,ADC2为滑动变阻器,用于控制输入的电压大小,R17与C20搭配,起到限流与滤波的作用,同时VREFH(参考电压高)为3.3,参考电压L(参考电压低)为GND。
原理图已经看懂,现在进行引脚与外设的配置:
PIN配置:原理图中已经知道为ADC0_SE2,在PIN配置中选择对应通道即可
再进行外设的配置:需要注意圈出的几个地方,需要注意此处为ADC0通道,所以需要选择ADC_0,同时选择软件触发,在最下面的输入通道配置中,选择2通道,代表在AD0的2通道。
软件代码实现:
首先进行ADC的初始化,在while中实现ADC采集,仅供参考
unsigned short int ad_value= 0;
double ad_value_change = 0;
int main(void)
{
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, 1); // 时钟初始化
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0); //GPIO初始化
ADC_DRV_ConfigConverter(0,&ADC0_2); //ADC0通道2初始化配置 0代表ADC0
ADC_DRV_AutoCalibration(0); //启用ADC校准 0代表ADC0
while(1)
{
ADC_DRV_ConfigChan(0,0,&ADC0_SE2); //软件触发转换 第1个参数为ADC0 第2个参数为外设配置的中序号0, 第3个参数为ADC0内部通道参数
ADC_DRV_WaitConvDone(0); //等待ADC0转换完成
ADC_DRV_GetChanResult(0,0,&ad_value); //第1个参数为ADC0 第2个参数为外设配置的中序号0,第3个参数为 ad_value为16位变量 传入指针进行赋值 得到AD值 非实际意义的电压值
ad_value_change = ((double)ad_value*3.3)/(1<<12); //参考电压3.3V,使用12精度采集,进行转换得到电压值
}
}
效果:
满偏值:采集有一定误差,接近4096满篇值
改变电阻大小: