1 ADC简介
ADC(Analog-Digital Converter)模拟-数字转换器
ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
12位逐次逼近型ADC,1us转换时间
输入电压范围:0~3.3V,转换结果范围:0~4095
18个输入通道,可测量16个外部和2个内部信号源
规则组和注入组两个转换单元
模拟看门狗自动监测输入电压范围
STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道
2 逐次逼近型ADC
左边IN0-IN7为输入通道,通过通道选择开关进行转换,下面为地址锁存和译码,选中想选的通道放在ADDA、ADDB、ADDC给锁存信号就能选择通道。比较器比较两个电源,一个为待测电压,一个为DAC数模转换器的电压,不断调节DAC电压使DAC输出电压和外部通道输入电压近似相等,就可用DAC的数据代表外部输入数据,然后通过DAC输出到三态锁存寄存器。EOC转换结束信号,START开始转换(给一个输入脉冲,开始转换),CLOCK为ADC时钟。
3 ADC框图
左边GPIO口为ADC的输入通道IN0-IN15和两个内部通道(内部温度传感器和Vrefint内部参考电压),然后到达模拟多路开关选择指定的通道,右边为多路开关输出进入模数转换器逐次比较,转换结果会直接放在上方的数据寄存器中,读取寄存器就能得知结果。规则通道可以选择16个通道,但是规则通道数据寄存器只能存储1组的数据,所以要配合DMA使用。注入通道可以选择4个通道,数据寄存器有四个,可以同时存储。
左下角为触发转换部分,即START信号。触发信号分为两种,一种为软件触发,在程序中手动调用代码启动,另一种为硬件触发,即为电路上所示。触发源主要来源于定时器,有定时器各个通道、TRGO定时器主模式输出。
ADCCLK为CLOCK驱动内部逐次比较的时钟,来自ADC预分频器,来源于RCC中72MHz的APB2预分频器。ADCCLK最大值为14MHz,只有6和8分频。
DMA请求触发DMA数据转运。
模拟看门狗可以存储阈值高限和阈值低限,启动看门狗和看门通道,超过阈值范围就会乱叫,申请一个模拟看门狗中断,最后通向NVIC。对于规则组和注入组也会有EOC转换完成信号,EOC为规则组完成信号,JEOC为注入组完成信号,会在状态寄存器设置标志位,读取后就能知道是否接受,也可以到NVIC触发中断。
4 ADC基本结构
左边为输入通道(16个GPIO口和两个内部通道),然后进入AD转换器(转换器内有两个组,规则组和注入组,规则组可以选16个通道,注入组只能4个),然后转换结果存放在AD数据寄存器(规则组只有一个,注入组有4个),下面的触发控制提供START信号(可提供软件或硬件触发,硬件触发主要来自定时器,也可选择外部中断引脚),右边是来自RCC的ADC时钟CLOCK(推动ADC逐次比较),模拟看门狗检测转换结果范围,若超出设定阈值就通过中断输出控制向NVIC申请中断,规则组和注入组转换完成后有EOC信号,置一个标志位通向NVIC,右下方的开关控制,在库函数中为ADC_Cmd函数,给ADC上电。