跳转至

Air780EPM ADC接口设计说明

在设计ADC硬件电路之前,请务必先查看Air780EPM LuatOS二次开发API中ADC库有关ADC相关函数的描述;

我们先回顾一段 API中ADC库有关ADC相关函数 的核心内容:

Air780EPM共有4路外部ADC硬件通道,其通常的作用是用来测试电压数值;

ADC 管脚号 说明
ADC0 9 通道ID:0,分辨率12 bits
ADC1 96 通道ID:1,分辨率12 bits
ADC2 77 通道ID:2,分辨率12 bits
ADC3 76 通道ID:3,分辨率12 bits

ADC硬件连接被测电压的方式有两个:

  1. 当被测电压低于3.6V时,被测电压可以直连ADC;

  2. 当被测电压大于3.6V时,被测电压需先经过外部电阻分压,且经过分压后接在ADC的电压值需小于1.5V;

以上ADC的两种硬件连接方式,对应不同的软件设置,在下面会提到;

除4路外部ADC通道外,Air780EPM还有2路内部ADC通道

一路是CH_CPU,用来测量Air780EPM的CPU温度;

一路是CH_VBAT, 用来测量 Air780EPM 的 vbat 电压(vbat,或者写为VBAT,也就是Air780EPM工作时的供电电压,对应Air780EPM的PIN42/PIN43);


接下来,我们将按照大家在实际应用中常见的场景,分类描述如何设计ADC硬件电路;


测量Air780EPM的VBAT电压

用ADC测量VBAT电压时,不需要外接任何硬件电路,Air780EPM内部有一路CH_VBAT,专门用于测量 Air780EPM 的 vbat 电压,测量范围就是Air780EPM可以正常工作的VBAT供电范围:3.3V-4.3V;

可以使用如下代码读取 VBAT 电压;

-- 读取VBAT供电电压, 单位为mV
adc.open(adc.CH_VBAT)
local vbat = adc.get(adc.CH_VBAT)
adc.close(adc.CH_VBAT)
-- adc.CH_VBAT,VBAT供电电压的通道id,内部通道,直接获取,不占用ADC 0-3,不外接任何电路

测量低于3.6V的电压时

1. 首先,我们这里讨论的是使用4路外部ADC测量低于3.6V电压时的场景;

2. 为社么要提到3.6V这个数字?如本文最前面所说,当被测电压低于3.6V时,被测电压可以直连ADC,不需要外接电路;

3. 是的,不需要外接电路的意思就是被测电压可以直接接在ADC上,不做任何处理,但是,需要保证被测电压不高于3.6V;

4. 相应的,软件应该这么做:
核心就是,软件在 低于1.5V 和 大于1.5V且小于3.6V时 的处理时不一样的。

-- 设置ADC引脚的测量范围0-3.6V,这种方式被测电压不可经过外部电阻分压后再挂在ADC上;
adc.setRange(adc.ADC_RANGE_MAX)


-- 设置ADC引脚的测量范围0-1.5V,这种方式被测电压可以经过外部电阻分压后再挂在ADC上;
adc.setRange(adc.ADC_RANGE_MIN)

-- 说明:
-- 当被测量电压最高值在1.5v以内时, 推荐使用ADC_RANGE_MIN,且不添加外部分压电路;
-- 当被测量电压最高值在3.6v以内时, 推荐使用ADC_RANGE_MAX,且不添加外部分压电路;
-- 当被测量电压最高值在3.6v以上时, 推荐使用ADC_RANGE_MIN,且必须添加外部分压电路;

5. 如果你觉得比较懵逼,很正常,你需要先看下Air780EPM LuatOS二次开发API中ADC库有关ADC相关函数的描述,或者,你就把握一个原则:
但被测电压低于3.6V时,直连ADC就可以,剩下的交给软件同事去负责;


测量高于3.6V的电压时

1. 首先,我们这里说的,还是使用4路外部ADC测量高于3.6V电压时的场景;

2. 当被测电压高于3.6V,使用4路外部ADC测量,就必须将外部电压使用电阻分压,使挂在ADC上的电压低于1.5V;

3. 那么,分压电阻怎么选择呢?
首先,取决于被测电压的值,测量最大电压5V 和 最大电压12V 时的分压电阻肯定是不一样的;
其次,电阻一定要使用1%精度,这样才能尽可能的使分压比符合要求;
再次,可以在ADC输入处增加1个滤波电容,抑制高频噪声,避免ADC读数波动;

4. 以上都是经验之谈,现在我们以被测电压为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,满足量程要求。

5. 相应的,假设通过ADC测得的电压值时1.47V,则可以换算出来被测电压值为:
1.47V/0.294=5V;

6. 需要特别指出的使,即便使用MΩ级别的电阻,系统也会存在固定的功耗浪费:
总电流: I=5V/(2.4MΩ+1.0MΩ)≈1.47μA
总功耗: P=5V×1.47μA=7.35μW
功耗极低,适合电池供电的低功耗场景。