数字电子的模拟世界
几年前,我们今天使用的整个电子设备(例如电话,计算机,电视等)本质上都是模拟的。然后,慢慢地,座机电话被现代手机所取代,CRT电视和监视器被LED显示器所取代,带有真空管的计算机发展成为功能更强大的内部微处理器和微控制器等等。
在当今的数字时代,我们都被先进的数字电子设备所包围,这可能欺骗我们以为我们周围的一切本质都是数字化的,这是不正确的。世界在本质上一直是模拟的,例如人类所感觉和经历的一切,例如速度,温度,空气速度,阳光,声音等,在本质上都是模拟的。但是,运行在微控制器和微处理器上的电子设备无法直接读取/解释这些模拟值,因为它们只能运行在0和1上。因此,我们需要将所有这些模拟值转换为0和1的东西,以便我们的微控制器和微处理器能够理解它们。这就是所谓的模数转换器或ADC的简称。在本文中,我们将学习关于ADC的一切以及如何使用它们。
什么是ADC以及如何使用它?
如前所述,ADC代表模数转换,它用于将现实世界中的模拟值转换为数字值,例如1和0。那么这些模拟值是多少?这些是我们日常生活中看到的温度,速度,亮度等。但是,请等待!!ADC可以将温度和速度直接转换为数字值(例如0和1)吗?
绝对不是。ADC只能将模拟电压值转换为数字值。因此,无论我们要测量哪个参数,都应先将其转换为电压,然后再借助传感器进行转换。例如,要将温度值转换为电压,我们可以类似地使用热敏电阻将亮度转换为电压,我们可以使用LDR。一旦将其转换为电压,我们就可以借助ADC读取它。
为了知道如何使用ADC,我们首先应该熟悉一些基本术语,例如通道分辨率,范围,参考电压等。
ADC中的分辨率(位)和通道
当您阅读任何微控制器或ADC IC的规格时,将使用术语通道和分辨率(位)给出ADC的详细信息。例如,Arduino UNO的ATmega328具有8通道10位ADC。并非微控制器上的每个引脚都可以读取模拟电压,术语8通道意味着ATmega328微控制器上有8个引脚可以读取模拟电压,并且每个引脚都可以读取分辨率为10位的电压。对于不同类型的微控制器,这将有所不同。
让我们假设我们的ADC范围是从0V到5V,并且我们有一个10位ADC,这意味着我们的输入电压0-5伏将被分成1024个离散模拟值电平(2 10 = 1024)。含义1024是10位ADC的分辨率,类似地,8位ADC的分辨率为512(2 8),而16位ADC的分辨率为65,536(2 16)。
这样,如果实际输入电压为0V,则MCU的ADC会将其读取为0,如果为5V,则MCU将读取1024,如果介于2.5V之间,则MCU将读取512。我们可以使用以下公式计算基于ADC分辨率和工作电压的MCU将读取的数字值。
(ADC分辨率/工作电压)=(ADC数字值/实际电压值)
ADC参考电压
您应该熟悉的另一个重要术语是参考电压。在ADC转换期间,通过将未知电压的值与已知电压进行比较来发现未知电压的值,该已知电压称为参考电压。通常,所有MCU都可以选择设置内部参考电压,这意味着您可以使用软件(程序)在内部将该电压设置为某个可用值。在Arduino UNO板上,内部默认将参考电压设置为5V,如果需要,用户还可以在软件中进行必要的更改后通过Vref引脚在外部设置该参考电压。
始终记住,测得的模拟电压值应始终小于参考电压值,并且参考电压值应始终小于微控制器的工作电压值。
例
这里我们以具有3位分辨率和2V参考电压的ADC为例。因此,它可以映射具有8(2 3)个不同电平的0-2v模拟电压,如下图所示:
因此,如果模拟电压为0.25,则数字值将为十进制1和二进制001。同样,如果模拟电压为0.5,则数字值将为十进制2和二进制010。
一些微控制器具有内置的ADC,例如Arduino,MSP430,PIC16F877A,但一些微控制器则没有8051,Raspberry Pi等,我们必须使用一些外部模数转换器IC,例如ADC0804,ADC0808。
下面您可以找到具有不同微控制器的ADC的各种示例:
- 如何在Arduino Uno中使用ADC?
- Raspberry Pi ADC教程
- ADC0808与8051单片机的接口
- 使用AVR单片机的0-25V数字电压表
- 如何在STM32F103C8中使用ADC
- 如何在MSP430G2中使用ADC
ADC类型和工作
ADC的类型很多,最常用的是Flash ADC,双斜率ADC,逐次逼近和双斜率ADC。因为它们相当复杂,所以要解释这些ADC的每个工作原理以及它们之间的区别将超出本文的讨论范围。但粗略地说,ADC有一个内部电容器,该电容器将由要测量的模拟电压充电。然后,我们通过在一段时间内对电容器放电来测量电压值。
关于ADC的一些常见问题
如何使用我的ADC测量超过5V的电压?
如前所述,ADC模块测量的电压值不能超过微控制器的工作电压。也就是说5V微控制器的ADC引脚最多只能测量5V。如果您要测量的内容超出上述范围,那么您可以测量0-12V,然后可以使用分压器或分压器电路将0-12V映射到0-5V。该电路将使用一对电阻来映射MCU的值,您可以使用该链接进一步了解分压器电路。对于我们上面的示例,我们应该在电压源上串联一个1K电阻和一个720 ohm电阻,并按照上面的链接所述测量电阻之间的电压。
如何将ADC的数字值转换为实际电压值?
当使用ADC转换器测量模拟电压时,MCU获得的结果将为数字形式。例如,在一个10位5V微控制器中,当要测量的实际电压为4V时,MCU会将其读取为820,我们可以再次使用上述公式将820转换为4V,以便可以在我们的产品中使用它。计算。让我们再次检查。
(ADC分辨率/工作电压)=(ADC数字值/实际电压值) 实际电压值= ADC数字值*(工作电压/ ADC分辨率) = 820 *(1023分之5) = 4.007 =〜4V
希望您对ADC以及如何在应用程序中使用它们有一个清晰的认识。如果您在理解概念时遇到任何问题,请随时在下面发表您的评论或将其写在我们的论坛上。