Super169 发表于 2018-5-5 11:54:37

以 ESP8266 测量供电来源的电压

最近做了个 ESP8266 的小项目, 以 2 颗 18650 供电.
由於在接近低电时, 数据误差很多, 想尝试读取电压显示出来, 或加入程序低电时停止作业.

因为电池的电压有 7V 以上, 我以 100K 及 10K 电阻分压, 再以 ADC pin 量度 10K 至 GND 一段.
在不同电压输入时, 得出的读数约:

8.4v -> 254
8.2v -> 249
8.0v -> 243
7.8v -> 238
7.0v -> 216

初时以ESP8266 的工作电压 3.3V 计算, 发觉有 10% 的误差.
虽然我的输入电源也可能有一定的误差, 但也不会有 10%这麽大.

电池输出是以 ams1117 降压後向 ESP8266 供电, 可能不太隐定.
我修改程式, 把 ADC_MODE 设定为 ADC_VCC, 再以 ESP.getVcc 看看系统 VCC 电压.

在不同电压输入时, getVcc 得出的读数约:

8.4v -> 3098
8.2v -> 3093
8.0v -> 3089
7.8v -> 3078
7.0v -> 3062

如果以这个电压作为参考电压, 再去推算电压, 结果就准确很多了.

而 ESP8266 并没有ARef 的输入, 好像只可以用系统电压作参考.
问题是, 当我要把 ADC 用作测量系统电压时, 就不可以用来量度输入电压.

请问有什麽方法, 可以较准确地量度电压呢?

Super169 发表于 2018-5-5 15:15:58

本帖最后由 Super169 于 2018-5-5 15:17 编辑

忘了说明, 我用的是 D1 mini, 而非直接用 ESP-12.
再到网上番查, 原来 ESP-12 的 ADC 是 1v 参考电压, 但 D1 mini 接到 A0 就变成 3.2v.
暂时用 3.2v 去推算吧.反正不是要精确数值, 把低电的门槛依这读数设定好就行.

只是, 想知道如果要比较准确的电压, 有方法吗?

弘毅 发表于 2018-5-5 21:11:29

外挂自带基准源的专业ADC做采集就很准确了

wing 发表于 2018-5-6 00:11:35

最近我玩的东西和楼主的需求有点相似呢。
方案是 ESP8285 + ADS1015 检测锂电池放电情况

详细情况都写在下面这两帖里,欢迎参观指导

http://www.geek-workshop.com/thread-37462-1-1.html

http://www.geek-workshop.com/thread-37411-1-1.html

Super169 发表于 2018-5-7 13:33:00

wing 发表于 2018-5-6 00:11
最近我玩的东西和楼主的需求有点相似呢。
方案是 ESP8285 + ADS1015 检测锂电池放电情况



谢谢你的资料.

但 我的设备比较细小, D1 mini 只是用作快速测试, 正式版是直接用ESP-12E.要外加模块就不行了.

而且, ESP-8266 本身有 ADC, 为什麽要用外置的模块, 是因为内部的不准确吗?

Super169 发表于 2018-5-7 13:39:06

弘毅 发表于 2018-5-5 21:11
外挂自带基准源的专业ADC做采集就很准确了

谢谢.
请问如果要求不高, 想用内置的 ADC 尽量测出最好的, 有方法同时得到自身的参考电压吗?
现在要加入 ADC_MODE 的转换, 但那个好像不可以在执行中更改?
ESP.H 的源码:

#define ADC_MODE(mode) int __get_adc_mode(void) { return (int) (mode); }

好像是修改了 __get_adc_mode 的设定.
请问有可能在程式执行中变动吗?比如把 return 的 mode 改成一个 变量?

luoluo4413 发表于 2020-6-12 17:01:03

楼主,请问解决了吗?
页: [1]
查看完整版本: 以 ESP8266 测量供电来源的电压