ADC电路介绍
一、概述
ADC 通常指模拟/数字转换器,是指将连续变量的模拟信号转换为离散的数字信号的器件;
ADC 接口主要用来检测模拟电压信号量,用于电池电压检测,按键检测,温湿度检测,TDS 检测等应用;
本文主要从硬件设计的角度,着重讲解Air8101 ADC设计中的一些关键注意点,软件开发方面不做深入探讨;
二、外部ADC
和外部ADC有关的管脚参考下图方框标注的几个引脚
使用时注意:
这些ADC管脚存在复用功能,除了可以做为ADC来使用之外,还可以用做GPIO、UART、PWM、I2C、SPI、RGB等功能使用;项目设计时,如果用做了其他复用功能,就不能做为ADC使用;
Air8101有ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC10,ADC12,ADC13,ADC14,一共10路外部ADC;
这10路ADC复用的对应关系为:
ADC1 对应 ADC10;
ADC2 对应 ADC12;
ADC3 对应 ADC13;
ADC4 对应 ADC14;
ADC5 和 ADC6没有对应的其他ADC通道;
这里的对应关系如何理解呢?以ADC1 对应 ADC10为例,意思是在Air8101内部,ADC1和ADC10是同一个ADC通道,ADC1和ADC10不能同时使用;
Air8101的外部ADC分辨率为12bit;
Air8101的外部ADC的测量电压范围为0到2.4V,不支持内部分压;
测量不超过2.4V的外部电压时
如果外接电路的被测电压不超过2.4V时,被测电压可以直连ADC,不需要做任何电路处理;
测量超过2.4V的外部电压时
如果外部电路的北侧电压超过2.4V时,必须将外部电压使用电阻分压,使挂在ADC上的电压不超过2.4V;
那么,分压电阻怎么选择呢?
首先,取决于被测电压的值,测量最大电压5V 和 最大电压12V 时的分压电阻肯定是不一样的;
其次,电阻一定要使用1%精度,这样才能尽可能的使分压比符合要求;
再次,可以在ADC输入处增加1个滤波电容,抑制高频噪声,避免ADC读数波动;
以上都是经验之谈;
现在我们以被测外部电压为5V,分压后挂在ADC上的电压为1.5V,来举例说明:
分压比要求:
Vout/Vin=1.5V/5V=0.3,
即 R2=0.3×(R1+R2),
解得 R1:R2≈2.33:1。
推荐电阻值:
上拉电阻 R1=2.4MΩ(±1%精度)
下拉电阻 R2=1.0MΩ(±1%精度)
实际分压比:
1.0MΩ/(2.4MΩ+1.0MΩ)≈0.294,
5V分压后为 5V×0.294≈1.47V,满足量程不超过2.4V的要求;
相应的,假设通过 ADC 测得的电压值时 1.47V,则可以换算出来被测电压值为:1.47V/0.294=5V;
需要特别指出的使,即便使用 MΩ 级别的电阻,系统也会存在固定的功耗浪费:
总电流: I=5V/(2.4MΩ+1.0MΩ)≈1.47μA
总功耗: P=5V×1.47μA=7.35μW
功耗极低,适合电池供电的低功耗场景。
三、内部占用的用于检测VBAT电压的ADC
Air8101每部占用了一路ADC,用于检测VBAT引脚的电压;
不需要外接任何硬件电路,直接通过软件API读取VBAT电压即可;
电压测量范围是Air8101可以正常工作的VBAT供电范围:2.5V-4.35V;
可以使用如下代码读取 VBAT 电压:
-- adc.CH_VBAT,VBAT供电电压的通道id,内部通道,直接获取,不外接任何电路
-- 打开VBAT检测的ADC通道
adc.open(adc.CH_VBAT)
-- 读取VBAT供电电压, 单位为mV
local vbat = adc.get(adc.CH_VBAT)
-- 关闭VBAT检测的ADC通道
adc.close(adc.CH_VBAT)
四、内部占用的用于检测CPU温度的ADC
Air8101每部占用了一路ADC,用于检测CPU的温度;
不需要外接任何硬件电路,直接通过软件API读取VBAT电压即可;
温度测量范围是;
可以使用如下代码读取 CPU 温度:
-- adc.CH_CPU,CPU温度检测的通道id,内部通道,直接获取,不外接任何电路
-- 打开CPU温度检测的ADC通道
adc.open(adc.CH_CPU)
-- 读取CPU温度, 单位为0.001摄氏度
local temprature = adc.get(adc.CH_CPU)
-- 关闭CPU温度检测的ADC通道
adc.close(adc.CH_CPU)
五、硬件设计指导
ADC 模拟键盘参考电路见下图
完整的Air8101硬件开发参考设计以及电源设计总体说明,参考:Air8101硬件参考设计 ;