常见的AD有,光敏电阻,热敏电阻,采集光线,采集温度,可以通过串联一个固定值的电阻,通过测量电压,来测量所采集的模拟量,模拟量通过AD转化为数字量,模拟量和数字量成正比
AD转化通常有多个通道,用多路选择开关连接到AD转换器,实现AD多路复用的目的,提高硬件利用率
现在大多数的AD是直接集成到单片机里面的,这样可以直接读出/写入寄存器进行AD/DA转换,单片机的IO口可以直接复用到AD/DA的通道
对于AD和DA的原理:
首先引入运算放大器:
通过运算放大器的知识,可以看出来这给是一个反向放大器,通过控制开关的0和1,来确定D7~D0的值,通过流入电流的大小,来控制相应的位权;
输入从通道选择开关过去,和DAC进行比较,不断比较,比较的过程和二分查找类似,知道比较的结果和输入相等,然后锁存到缓冲器中。
STM32 ADC的内部图:
由图可知STM32F10系列的ADC输入通道有16个GPIO端口和 两个温度传感器和VREFINT ,共18的输入端口,通过数据选择器进入到模数转换器,转换结果会放在上面的数据寄存器中,读取寄存器就可以知道ADC的转换结果了。
在这里转换的方式有两种,一种是注入通道,可以开四个通道,另一种是规则通道,可以开16个通道,可是规则通道的数据寄存器不能够把16个通道的数据都寄存了,只能寄存一个数据;类别与点菜,注入通道点四个菜,上来了四个菜,规则通道点了16个菜,但是由于桌子大小有限,只能摆一个菜。可以通道DMA ,数据转运小帮手,可以在每上一个菜之后,把这个菜挪到其他地方,防止被覆盖
STM32的ADC的触发源有两种,一种是软件触发,在程序中调用一条代码,来启动,另一种是是硬件触发
上图的触发源
STM32的ADC的ADCCLK,来自于ADC预分频器,最大是14Mhz,因为RCC主时钟是72MHZ,故预分频器的分频系数只能选6或8;
注入和规则数据寄存器的转换完成之后,会置转换结束的标志位,也可以通过标志位使能中断到NVIC的ADC中断
模拟看门狗,用于检测转换结果的范围,如果超过设定的阈值,就通过中断输出控制,向NVIC申请中断
对于规则组:有四种转换模式:
规则组的数据对齐:因为数据寄存器是十六位的,而ADC是十二位的,通常选右对齐;
ADC的转换步骤:采样,保持,量化,编码
TCONV = 采样时间 + 12.5个ADC周期
在采样期间需要一个电路来保持电压的稳定,如果电压一直跳变,那么采样就会不准确,因为采样也需要一定时间