关于防止充电宝供电esp8266休眠的尝试-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 602|回复: 5

[已解决] 关于防止充电宝供电esp8266休眠的尝试

[复制链接]
发表于 2022-8-27 00:58 | 显示全部楼层 |阅读模式
本帖最后由 迪洛克 于 2022-8-29 12:00 编辑

各位大佬,小弟自己画了一块esp8266的小板子用来改造一个小风扇。

因为早就注意到充电宝有小电流无法识别导致休眠的机制,所以在板子上设计了一个用三极管控制的负载,如下图

负载电路设计

负载电路设计

回来后担心43欧可能电流不够,设计是用的两个43欧的电阻叠起来的


经过测试,我发现正常情况下,不打开负载电流大概在20-30mA左右,打开以后确实可以到100多mA近200mA

目前测试如下(一般晚上睡前弄好,早上看一下):
1. 负载常开,充电宝可以持续供电,但是太耗电
2.负载设置为每3分钟开10s,早上发现已经断电,但是起码正常工作了半小时以上
3.负载设置为每10s开100ms,过了三个小时后发现已断电,离开前看到正常工作了快一个小时

以上几种测试情况都是充电宝直接供电的,但是当我用usb电压电流表接上充电宝看的时候,不管怎么设置,充电宝都能持续工作,我猜测应该是电压电流表本身耗电的缘故

各位大佬,小弟对硬件设计也是一知半解,对充电宝的休眠机制更是不太明白,我问了客服说是1分钟,电流小于0.1A休眠,这无法解释还能短暂地则正常工作一段时间,各位有啥想法帮帮小弟,感谢

最后附上相关代码

  1. #define AVOID_POWER_SLEEP

  2. #ifdef AVOID_POWER_SLEEP
  3. #define AVOID_POWER_SLEEP_PIN 5
  4. #define AVOID_POWER_SLEEP_PERIOD 10000 // 10*1000 10s
  5. #endif

  6. void PressKey(uint8_t pin, uint32_t pressTime)
  7. {
  8.     digitalWrite(pin, HIGH);
  9.     Blinker.delay(pressTime);
  10.     digitalWrite(pin, LOW);
  11.     Blinker.delay(200);
  12. }

  13. #ifdef AVOID_POWER_SLEEP
  14. void avoidPowerSleep(uint8_t powerPin, uint64_t period)
  15. {
  16.     static uint64_t lastTimeMs = 0, curTimeMs = 0;
  17.     curTimeMs = millis();
  18.     if (SmartFan.fanPowerState) {
  19.         lastTimeMs = curTimeMs;
  20.         return;
  21.     }
  22.     if (curTimeMs - lastTimeMs >= period) {
  23.         PressKey(powerPin, 100);
  24.         // BLINKER_LOG("avoid power sleep deal");
  25.         lastTimeMs = curTimeMs;
  26.     }
  27. }
  28. #endif

  29. void setup()
  30. {
  31. #ifdef AVOID_POWER_SLEEP
  32.     pinMode(AVOID_POWER_SLEEP_PIN, OUTPUT);
  33.     digitalWrite(AVOID_POWER_SLEEP_PIN, LOW);
  34. #endif
  35. }

  36. void loop()
  37. {
  38.     Blinker.run();
  39. #ifdef AVOID_POWER_SLEEP
  40.     avoidPowerSleep(AVOID_POWER_SLEEP_PIN, AVOID_POWER_SLEEP_PERIOD);
  41. #endif
  42. }
复制代码


发表于 2022-8-27 07:35 | 显示全部楼层
5v/430=0.0116a 就是说,你的这个设计只能拉出11ma的

充电宝一般需要50-100ma负载维持工作,所以推荐你用20欧电阻(特别注意,这个电阻可能过热

所以你需要拉一下5ms然后停止20秒这种)

你可以参考:

https://mc.dfrobot.com.cn/thread-308401-1-1.html

这里面推荐了一个计算软件,可以模拟仿真三极管
 楼主| 发表于 2022-8-27 09:45 | 显示全部楼层
Zoologist 发表于 2022-8-27 07:35
5v/430=0.0116a 就是说,你的这个设计只能拉出11ma的

充电宝一般需要50-100ma负载维持工作,所以推荐你用2 ...

谢谢您的回复!
我使用的是43欧的电阻(这个是我实测过没问题的)
而且为了防止43欧还是太大,我用的两个2512的叠起来的,姑且算他22欧
这里有些奇怪的地方是,我实测打开负载电流大概在100-200mA之间,大概一百六七十左右,并没有达到5V/22=0.227A的水平,这也是我疑惑的一个地方
发表于 2022-8-27 12:31 | 显示全部楼层
还不如直接锂电池 + 升压电路 + 充电保护电路,干嘛做这么麻烦
 楼主| 发表于 2022-8-27 14:10 | 显示全部楼层
XlinliY.Zhang 发表于 2022-8-27 12:31
还不如直接锂电池 + 升压电路 + 充电保护电路,干嘛做这么麻烦

感谢回复!
因为我是在一个小风扇上进行改装的,这个小风扇自带一个可拆卸的10000mah的电池(可以当作充电宝)用来供电的,所以我当然想着基于现有的硬件条件做一些优化啦
 楼主| 发表于 2022-8-29 12:00 | 显示全部楼层
最后实在是没有办法,只能毁坏性拆开了充电宝,发现充电宝的电源管理ic是ip5306,查阅到数据手册上写的是连续32s检测不到50ma以上的电流会休眠
我从按键上飞了一根线出来,控制每30s模拟按下100ms,这样也能勉强达到我的目的,虽然还是没有能够解释我遇到的问题……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:24 , Processed in 0.092375 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表