第一次接触单片机ADC 都会有这些问题
如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?
这个问题,是第一次接触ADC时候,大家都会遇到的问题。
单片机会读到什么值?需要看一个特性,就是几位的ADC,在手册上就会给出,例如,STM32的ADC是12位的。另外,还有8位,10位,16位,24位等。
接下来告诉你为什么: 前面提到,STM32的ADC是12位的,我们知道,8位的值是从0~255;16位的值,是从0~65535。这两个位的最大值,是我们最为熟悉的。
(怎么算出来的?这问题就又降低到另一个层面了,这里我们说的几位的值,每个位只能是0或者1,比如2位的值,可以表示为00 01 10 11四种不同的值,这是以2进制表示的,转换成十进制就是0 1 2 3,所以得出结论,2位的值可以表示从0~3。同理,3位的值,可以表示十进制的0~9,你可以展开计算一下。4位的值,可以表示0~16,5位的值,可以表示从0~31,同理,你可以得出任意位的值可以表示的范围。)
所以,12位的值,可以表示从0~4095,这就是先在感性上,认识了为什么12位的ADC的值,是从0~4095.
读到的值怎么换算成实际的电压值
前面提到了,我们输入GND,读到的值是0,输入VDD,得到的值是4095,那么,当你读到2035的时候,你知道输入电压多少V吗?这个问题,归根接地,就到了数学XY坐标,已知两点坐标值(0,0)(3.3,4095),给出任意X坐标值,求Y值的问题了吧?简单不简单?
参考电压是什么
讨论这个问题之前,你先拿万用表量一下你的VDDA的实际电压是多大?是不是标准的3.300V?应该不是吧?或许是2.296V,或许是3.312V。然后你把VDD连接到ADC引脚之后,得到的是4095,也就是,实际上,当你读出4095这个数据的时候,实际的电压值不是你想象中的3.300V。有些初学者,觉得几毫伏的电压差无所谓,但实际应用中,几毫伏就可能代表很大的实际工况,例如,在一个量程为50克的电子称上。
所以,这时候,芯片厂商就想了一个办法,给ADC模块中引入参考电压,由非常标准的参考电压芯片来接入参考电压引脚。标准的电压芯片,我们一般叫做参考电压芯片,或者叫做基准电压芯片。例如REF3133(输出3.300V) REF3025(输出2.500V)等等。
注意:STM32 的100脚以上(含100脚)有参考电压引脚。在没有参考电压引脚的单片机上,可以把基准电压芯片接入VDDA,但是VDDA和VDD的电压差不能超过0.3V,例如,VDD是3.3V的话,可以给VDDA接入一个3.3V的参考电压芯片或者3.0V的参考电压芯片,但是不能接入2.5V的参考电压芯片,后果就是芯片不能工作。
ADC引脚的输入电压范围是多大
一般情况下,ADC引脚的输入电压,是从0~VDD,如果有REF引脚,一般是0~Vref,也有0~2Vref的情况。
如果被测的电压大于ADC的输入电压,例如,要用STM32测量0~5V的电压的话,可以在输入ADC引脚之前,加入电阻分压和放大器电路。
总结: 看完这篇文章,你是否会觉的,一切都只是基础知识的融合
小5带你飞(8)—AVR(ATmega 328P)单片机片内ADC的原理和使用(1)
ATmega328p内部集成了一个10位的逐次逼近的A/D转换器。该转换器与一个8通道的模拟多路复用器连接。它能够对来自端口A的8路单端输入电压进行采样。
ADC转换模块的原理图
看一下它的基本特性:
10位分辨率
0.5 LSB积分非线性
±2 LSB绝对精度
13 -~260µs转换时间
最高采样速率76.9 kSPS/s
6路可选的单端输入通道
2路额外多路复用单端输入通道(TQFP 、QFN/MLF)
温度传感器输入通道
ADC读取的结果可设置为左端对其
0~Vcc ADC输入电压范围
可选择1.1v ADC参考电压
自由连续转换模式和单次转换模式
在ADC转换完成时中断
睡眠模式噪音消除
ADC的供电和参考电压:
ADC由独立的专用的模拟电压引脚AVCC供电,AVCC和VCC的电压差别不能大于±0.3V。
ADC的参考电源可以是芯片内部的1.1v的参考电源,也可以是AVCC,也可以采用外部参考电源,使用外部参考电源的时候,外部参考电源可由引脚AREF接入,使用内部参考电压源的时候,可以通过在AREF引脚外部并接一个电容来提高ADC的抗噪性能。这个电容一般可为0.1uF
与ADC有关的寄存器:
ADMUX:多路复用选择寄存器
bit6、bit7 :ADC参考电压选择。如果在转换过程中改变了设置,则只有等待当前转换结束后才起作用。如果在 AREF引脚上施加了外部参考电压,则内部参考电压将不能被选择。这个参考电压的选择见下图:
还是解释一下:
00 :AREF,内部基准源关闭
01 :AVCC,AREF外接滤波电容
10 : 保留
11 :1.1v内部基准电压源,AREF外接滤波电容
bit5:转换结果对齐位。置位左对齐,清位右对齐
bit4:一个保留位
bit3~bit0:模拟通道选择位
就是选择连接到哪个通道上,这个没啥说的。看表就好了,如下:
2. ADCSRA:ADC控制和状态寄存器A
bit7:ADC使能位。置位则启动ADC功能,清位ADC功能关闭
bit6:ADC开始转换。
在单次转换模式下,该位置位将启动一次ADC转换,在连续转换模式下,该位置位,将启动首次转换
bit5:ADC自动触发使能位。
该位置位,则启动ADC自动触发功能。
bit4:ADC中断标志位
ADC转换结束且数据寄存器被更新后该位置位,如果ADIE及SREG寄存器中的全局中断使能位I被置位,
则ADC转换结束中断服务程序被执行,同时该位被硬件清零,也可以通过软件写1清零。
bit3:ADC中断使能位。如果该位及SREG寄存器中的全局中断使能位I被置位,则ADC转换结束中断将被使能。
bit2~bit0:ADC预分频器的选择。这三位决定ADC输入时钟与CPU时钟之间的分频系数,如下表:
3. ADCL 、 ADCH :ADC数据寄存器
分别是左对齐的和右对齐的数据
ADC转换结束后,转换结果将存在这两个寄存器当中。首先ADMUX寄存器当中的ADLAR和MUXn影响转换结果在寄存器中的存放形式。当ADCL被读取时,ADC数据寄存器在读取ADCH之前不会更新,如果转换结果为左对齐且只需要8位的精度,那么仅需要读取ADCH就可以了,否则需先读取ADCL然后读取ADCH。
4.ADCSRB :ADC控制和状态寄存器B
bit2~bit0:ADC自动触发源的选择
说明一下吧:
000:连续转换模式
001:模拟比较器
010:外部中断请求0
011:定时器/计数器0比较匹配A
100:定时器/计数器0溢出
101: 定时器/计数器0比较匹配B
110:定时器DIDR0数器1溢出
111:定时器/计数器1捕捉事件
5. DIDR0:数字输入禁用寄存器0
说明一下:
bit5~bit0 :当这些位置位,相应的ADC引脚的数字输入缓存区被禁止,相应的PIN寄存器读取的时候都为0,
模拟信号运用于ADC5~ADC0,是不需要这么做的,ADC6和ADC7是没有缓存区的。
下面来看看ADC的基本使用步骤:
ADC输入端口初始化
基准电压的设置,数据对齐方式的设置,通道的选择。(ADMUX寄存器的配置)
AD使能,启动装换,中断的设置(ADCSRA寄存器的设置)
触发源的选择(ADCSRB寄存器的设置)
选择中断号,编写中断服务程序,读取ADC的数据(ADCL 、 ADCH )
好的,关于ADC的寄存器就写这么多了,下一篇我们来写ADC的驱动程序。
更多内容请关注头条号:小5嵌入式
相关问答
单片机 如何通过 ADC 模块采集模拟信号?朋友们好,我是电子及工控技术,我来回答这个问题。众所周知单片机是一种超大规模的集成电路,它只能“读懂”并处理数字信号,对于连续量的模拟信号则无能为力。...
单片机 中 ADC 是如何进行采集的?摘要:本文设计并实现了基于2.4GHzISM频段射频收发芯片nRF2401的计算机短距离无线数据采集系统。该系统采用PC作为系统控制中心,以C8051F021单片机...
单片机 AD和 ADC 的区别?主要区别如下:1.AD通常指模拟量到数字量的转换过程,是一种广义的概念。ADC则特指执行AD转换的硬件模块,是AD概念的一种实现方式。2.单片机中的ADC模块内置...
stm32 单片机adc 计算公式?ADC计算公式:^_^TCONV=采样时间+12.5个周期对于12位AD采集,固定为12.5个周期。其他采样时间可以由SMPx[2:0]寄存器控制。每个通道可以单独配置。000:1...ADC.....
【选用一块 单片机 控制两块 ADC 0832进行模数转换,如果我选用sb...[最佳回答]理论和实际应用中,定义别的管脚不会影响,除非你定义的管脚有时会占用(比如232通讯和外部中断)但你说没有用到这些口,不过还是请你再检查.还有对ADC0...
请教各位大虾: 单片机 本身集成24位 ADC ,有何意义?没听说那款单片机本身集成24位ADC,24位的ADC精度极高,用途较少,单片机价格便宜,通用性强,集成这么高精度的ADC单片机价格很高,根本没有市场其价格肯定超过...
请各位高手讲解一下 单片机 中 ADC 模块中的数据左对齐和右对齐是啥意思?把大概的工作原理讲下啦.谢谢啦?一般高于八位的ADC才会出现这种情况比如说AD转换后数字量保存在ADCH,ADCL两个寄存器中左对齐就是AD值的最高位就是ADCH的最高位了,ADCL的低位就会有的用不到...
汇编语言中的 ADC 是什么意思?ADC是模拟-数字转换的意思,即Analog-Digital-Converter。目前常用的模数转换为6到24位精度,越来越多的单片机也新增了模数转换功能,比如STC12C5A60S2就有8路AD.....
单片机adc 如何测12v电压?单片机ADC可以测量12V电压。单片机ADC可以实现对模拟电压信号测量和转换成数字信号处理,将电压信号按照一定比例变成数字信号,因此,可以通过把12V电压信号...
求 单片机电路 采集380V交流电路电流信息的办法?采集端用电流互感器,然后互感器末端的输出信号通过一些限流措施加到ADC0809(模拟到数字)转换芯片的某个通道上,最后芯片的数据输出端接到单片机的I/O上就可以...