多年前,我们使用的电子设备,如电话、电脑、电视等,本质上都是模拟的。然后慢慢地,固定电话被现代手机取代,CRT 电视和显示器被 LED 显示器取代,带有真空管的计算机演变为更强大的微处理器和微控制器等等。
在数字时代的今天,我们被先进的数字电子设备所包围,让我们认为我们周围的一切本质上都是数字的,这是不正确的。
世界在本质上一直是模拟的,例如,我们人类感觉和经历的一切,如速度、温度、空气速度、阳光、声音等,在本质上都是模拟的。但是我们在微控制器和微处理器上运行的电子设备不能直接读取/解释这些模拟值,因为它们只在0和1上运行。所以我们需要一种能将这些模拟值转换成0和1的东西,以便我们的微控制器和微处理器能够理解它们。这就是所谓的模数转换器或简称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 级离散模拟值(0000000000—1111111111,2^10 = 1024)。1024 是 10 位 ADC 的分辨率,类似地,8 位 ADC 的分辨率为 512 (2^8 ),16 位 ADC 的分辨率为 65536 (2^16 )。
这样,如果实际输入电压为 0V,则 MCU 的 ADC 会将其读取为 0,如果为 5V,则 MCU 将读取为 1024,如果是2.5V,则 MCU 将读取为 512。我们可以使用以下公式根据 ADC 的分辨率和参考电压计算 MCU 读取的数字值。
(ADC 分辨率 / 参考电压) = (ADC 数字值 / 实际电压值)
您应该了解的另一个重要术语是“参考电压”。在 ADC 转换过程中,通过将其与已知电压进行比较来找到未知电压的值,这个已知电压,称为参考电压。
通常所有 MCU 都有一个设置内部参考电压的选项,这意味着您可以使用软件(程序)在内部将此电压设置为某个可用值。
在 Arduino UNO 板中,参考电压在内部默认设置为 5V,如果需要,用户也可以在软件中进行所需的更改,再通过 Vref 引脚在外部设置此参考电压。
需要注意的是,测量的模拟电压值应始终小于参考电压值,并且参考电压值应始终小于单片机的工作电压值。
这里我们以具有 3 位分辨率和 2V 参考电压的 ADC 为例。由上所述,它可以将 0-2v 模拟电压映射为 8 (2^3 ) 个不同的电平,如下图所示:
从上图得出,如果模拟电压为 0.25,那么数字值是十进制的 1 和二进制的 001。同样,如果模拟电压为 0.5,则数字值为十进制的 2 和二进制的 010。
一些微控制器具有内置 ADC,如 Arduino、MSP430、PIC16F877A,但有些微控制器没有,如 8051、Raspberry Pi 等,对于没有ADC的微控制器,我们必须用一些外部模数转换器 IC来帮助完成模拟信号的读取,如ADC0804、ADC0808。
ADC 的类型很多,最常用的有 Flash ADC、双斜率 ADC、逐次逼近ADC。它们相当复杂,如果解释每个 ADC 的工作原理以及它们之间的区别,将超出本文的范围。但粗略地说,ADC 有一个内部电容器,要测量的模拟电压对该电容器充电。然后我们通过在一段时间内对电容器放电来测量电压值。
如何使用我的 ADC 测量超过 5V 的电压?
如前所述,ADC 模块无法测量超过微控制器工作电压的电压值。也就是说,一个工作电压为5V 的微控制器,只能通过其 ADC 引脚测量最大的电压值为 5V。
如前所述,ADC 模块无法测量超过微控制器工作电压的电压值。也就是说,一个 工作电压为5V 的微控制器,只能通过其 ADC 引脚测量最大的电压值为 5V。如果您想测量更大的范围,例如 0-12V,那么您可以使用分压器或分压器电路来辅助测量。如将两个一个 1K 电阻串联到电压源,并测量电阻之间的电压,当然实际中还要考虑ADC的输入阻抗。
当使用 ADC 转换器测量模拟电压时,MCU 获得的结果是数字的。例如,在 10 位 5V 微控制器中,当要测量的实际电压为 4V 时,MCU 会将其读取为 820,我们可以再次使用上面讨论的公式将 820 转换为 4V,以便我们可以在我们的计算。让我们验证一下。
(ADC 分辨率 / 参考电压) = (ADC 数字值 / 实际电压值)
实际电压值 = ADC 数字值 * (参考电压 / ADC 分辨率)
= 820 * (5/1024)
= 4.003
=4V
希望本文能帮助您对 ADC 以及如何将它们用于实际应用有一个大致的了解。