ADC0809芯片:(之前单片机性能不强时需要外挂芯片) ADC0809芯片是独立的八位逐次逼近型ADC芯片
当前主流的STM32功能比较强大,有12位的ADC作为片上外设。
ADDA/ADDB/ADDC:通过这3个引脚选择某个通道,3位0和1的不同组合,对应IN0~IN7。
ALE(锁存信号):选好通道后,给一个锁存信号,上面的通道开关就自动拨好了。
通道选择开关和地址锁存和译码部分相当于一个可通过模拟信号的数据选择器。
这样设计的好处在于ADC转换是一个很快的过程,几微秒就转换完成了,这样设计方便多个通道使用这一个ADC进行转换(节省资源)。
电压比较器:判断两个输入信号电压的大小关系,输出一个高低电平指示谁大谁小 上面是待测的电压,下面是DAC输出的电压。
DAC(数模转换器):给他一个数据就能输出数据对应的电压,内部使用加权电阻网络来实现的转换。
逐次逼近的过程:
未知编码的电压(输入电压)与已知编码的电压(DAC产生的电压)进行比较。如果DAC输出的电压比较大,未知电压的编码就调小。如果DAC输出的电压比较小,未知电压的编码就调大。直到外部输入的电压与DAC输出的电压近似相等,那么DAC输入的数据就是外部电压的编码数据了。
为了最快找到未知电压的编码,一般采用二分法进行寻找:
8位ADC编码范围:0~2^8-1
由上表可看出逐次逼近的过程实质是对二进制从高位到低位判断是0是1的过程,8位ADC确定外部未知电压的编码最多要比较8次(奇数编码都需要比较8次)。
而对于STM32的12位的ADC就需要从高到低判断<=12次就可以得到外部输入电压的编码了。
上述过程很像实际生活中我们用天平称一个物体的重量,过程是这样的:从最重的砝码开始试放,与被称物体进行比较,若物体重于砝码,该砝码保留,否则移去。再加上第二个次重砝码,看物体的重量是否大于砝码的重量决定第二个砝码是留下还是移去。照此一直加砝码,到最小一个砝码为止。将所有留下的砝码重量相加,就得到物体的重量。
AD转换结束后,DAC的输入数据就是未知电压的编码,通过8位三态锁存缓冲器进行输出。
EOC(end of covert):转换结束信号。
START:开始转换,给一个脉冲开始转换。
CLOCK:ADC时钟,ADC是一步一步进行判断的,所以需要时钟来推动这个过程。
VREF+/VREF-:DAC的参考电压,DAC的参考电压也决定了ADC的输入电压范围,所以它也是ADC的参考电压。
Vcc/GND:整个芯片的供电,Vcc连VREF+,GND连VREF-。一般情况下,ADC的输入范围与ADC的供电是一样的。
OE:数据输出允许信号。
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行(逐次逼近的过程)。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。