逐次逼近式ADC:
左边是8路输入通道,左下是地址锁存和译码,可将通道的地址锁存进ADDA,ADDB,ADDC类似38译码器的结构,ALE为锁存控制键,通道选择开关可控制选择单路或者多路通道,DAC为数模转换器,给他一个数值,可以输出一个电压,DAC给出的电压通过比较器跟通道过来的电压比较,通过不断的改变DAC的值,来使DAC的电压逐次逼近通道给的电压,这个过程中,DAC每次去上个值的一半。比较完成了以后,从8位三态锁存缓冲器输出。EOC是转换结束信号,START是开始转换,CLOCK是ADC时钟,ADC内部是一步一步进行判断的,所以需要时钟来推动,VREF正负是DAC的参考电压,VCC和GND跟VREF接在一起,他们是一样的。
STM32的ADC:
18个输入通道包括16个GPIO端口跟一个温度传感器和一个内部电压。模拟多路开关可以一次选择多个通道或者单个通道,多通道又分为最多4通道的注入通道和最多16通道的规则通道,规则组只有一个规则通道数据寄存器,所以要考虑数据被覆盖的问题,而注入通道有四个注入通道数据寄存器,所以不用担心数据被覆盖的问题,注入组相当于餐厅的VIP座位,配的服务员比较多,而规则通道则是普通座位,服务员只有一个,所以要注意数据被覆盖的问题。为解决这个问题,一般使用DMA来帮运数据。相当于找外援。对于STM32的ADC,触发数据转换的信号有两种,一种是软件触发即程序中调用代码,一种是硬件触发,即如下图的触发源:
从上图可知触发源有外部中断和定时器通道以及定时器的主模式,一般选择定时器的主模式来自动触发,这样就可以避免频繁进中断。
左上角即为ADC的输入电压部分。参考逐次式逼近结构。ADDCLK就是ADC的时钟,最大14MHz,一般只能选6或8分频。注意:模拟值数字转化器可以发出DMA请求。上面主要是模拟看门狗还有中断。
通道与引脚的关系:
规则组的4种转换模式:
数据对齐:ADC12位的,数据寄存器是16位的,所以存在数据转换即数据对齐
一般选数据右对齐。