AD单通道和AD多通道
使用ADC可以对高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量。所以ADC就是一个电压表,把引脚电压值测出来,放在一个变量里。
数字到模拟的桥梁,PWM来控制电机的速度,LED灯的亮度。这是DAC的功能,同时PWM只有完全导通和完全断开两种状态,两种状态上都没有功率损耗,所以在直流电机调速这种大功率的应用场景,使用PWM来等效模拟量,是比DAC更好的选择,并且PWM电路更加简单,更加常用,所以可以看出PWM还是挤占了DAC的很多应用空间。
目前DAC的主要应用是在波形生成这些领域,比如信号发生器、音频解码芯片等。这些领域PWM还是不好替代的。
一般12位AD值,它的表示范围就是0-212-1。这里涉及到ADC的两个关键参数了,第一个是分辨率,一般用多少位来表示,12位AD值,量化结果的范围就是0-4095,位数越高,量化结果就越精细,对应分辨率就越高。
第二个是转换时间,就是转换频率,AD转换是需要花一小段时间的,这里的1us就表示从AD转换开始,到产生结果,需要花1us的时间,对应AD转换的频率就是1MHz,这个就是STM32 ADC的最快转换频率。如果需要转换一个频率非常高的信号,那就要考虑一下这个转换频率是不是够用,如果你的信号频率比较低,那这个最大1MHz的转换频率也完全够用了。
输入电压范围,一般要求都是在芯片供电的负极和正极之间变化的,最低电压就是负极0V,最高电压就是正极3.3V,经过ADC转换之后,最小值就是0,最大值是4095,0V对应0,3.3V对应4095,中间都是一一对应的线性关系。
外部信号就是16个GPIO口,在引脚上直接接模拟信号就行了,不需要任何额外的电路,引脚就直接能测电压,2个内部信号时内部温度传感器和内部参考电压,温度传感器可以测量CPU的温度,比如电脑可以显示一个CPU温度,内部参考电压是一个1.2V左右的基准电压,这个基准电压是不随外部供电电压变化而变化的,所以如果芯片的供电不是标准的3.3V,那测量外部引脚的电压可能就不对,这时可以读取这个基准电压进行校准,这样就可以得到正确的电压值了。
规则组和注入组两个转换单元,就是STM32ADC的增强功能了,普通的AD转换流程是,启动一次转换,读一次值,然后再启动,再读值,这样的流程,但是STM32的ADC就比较高级,可以列一个组,一次性启动一个组,连续转换多个值,并且有两个组,一个是用于常规使用的规则组,一个是用于突发事件的注入组。
ADC一般可以用于测量光线强度,温度这些值,可以用模拟看门狗来自动执行若高于某个阈值进行一些操作。模拟看门狗可以检测指定的某些通道,当AD值高于它设定的上阈值或者低于下阈值时,他就会申请中断,你就可以在中断函数里执行相应的操作。这样就不用不断地手动读值,再用if进行判断了。
这是逐次逼近性ADC的内部结构,了解这个结构对学习STM32的ADC帮助很大。
这个图是ADC0809的内部结构图,它是一个独立8位逐次逼近型ADC芯片,在以前单片机性能还不是很强的时候,需要外挂一个ADC芯片才能进行AD转换,这个ADC0809是一款比较经典的ADC芯片