ADC是模拟信号到数字信号转换器,是一种电子设备或者模块;它用于将连续的模拟信号转换成离散的数字信号,以便数字设备(微处理器等)对其分析和处理。
ADC的工作原理:将模拟信号在一定时间间隔内分割成离散的取样,并将每个取样值转换成数字表示;这个过程主要有两个步骤:采样和量化;
采样:将连续的模拟信号在一定的事件内进行取样;采样的频率决定了单位时间内的采样点,通常以(赫兹)HZ表示;
量化:将得到的取样值转换成数字形式。这个过程通常是需要将采样值和基准值进行比较,并将其转换为数字表示
imx6ull内部有两个ADC,都是采用逐次逼近法,它的分辨率是可以选择的,有8/10/12位;同时它内部还有自动校准功能,最大转换速率为1MHZ,所以进行一次转换所需要的最快转换时间为1us;同时imx6ull内部还有硬件平均功能和比较功能,这就大大方便了我们对软件的设置。
每个ADC都有10个通道,这里的通道就是说输入的电压信号从哪个引脚出来,他其实就是GPIO00~GPIO09这10个引脚;在配置引脚时只需要配置GPIO就行,电气属性选择默认下的KEEP模式就行了。
cs
int adc1_init(void)
{
IOMUXC_SetPinMux(IOMUXC_GPIO1_IO01_GPIO1_IO01, 1);
IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, 0x10b0);
//我们这里用不到中断所以关闭中断使能
ADC1->HC[0] &= ~(1<<0);
//ADC1_CFG
ADC->CFG = 0;
ADC->CFG &= (0XB<<0);
//ADC1_GC
ADC1->GC = 0;
ADC1->GC |= (0X1<<0);
//校准
ADC1->GC |= (1<<7);
while(ADC->GC & (1<<7));
if((ADC1->GS & (1<<1))==1)
return -1;
return 0;
}
unsigned short adc1_read(void)
{
ADC1->HC[0] &= ~(0X1F<<0);
ADC1->HC[0] = 0X1;
while(!(ADC1->HS & (1<<0)))
return ADC1->HS & 0xfff;
}