要安全地给 18650 充电,电芯接 B+ 和 B−,你的项目接 OUT+ 和 OUT− —— 千万别接到电池那一对焊盘上。保护 MOSFET 就装在 B− 和 OUT− 之间,负载接在电池端等于把它们整个绕过去。这块板子固定充到 4.2V,再用一块 MT3608 升压模块把它变成稳定的 5V。
TP4056 上的 B+、B−、OUT+ 和 OUT− 焊盘到底各自负责什么?
本文用的 TP4056 模块是带保护的版本,所以它有四个焊盘而不是两个:B+ 和 B− 接电芯,OUT+ 和 OUT− 接你的项目。这两对不能互换 —— 尽管你用万用表量,两边的电压几乎一模一样。
带保护的板子多了两颗芯片:一颗控制器,通常是 DW01A,再加上被它控制的那对双 MOSFET。两只 FET 都装在负极那一路上,正如 DW01A 数据手册里的应用电路所示。所以 B+ 和 OUT+ 在电气上其实是同一个节点,所有的通断切换都发生在 B− 和 OUT− 之间。
因此,焊在 B+ 和 B− 上的负载,是在那对 MOSFET 之前就直接接到了电芯。表面上一切照常 —— 板子照充,项目照跑,LED 也照常亮 —— 但过放、过流和短路保护,全都已经不在这条通路上了。
配件清单
| 板上焊盘 | 接到哪里 | 为什么 |
|---|---|---|
| B+ | 18650 正极(电池座的红线) | 接到充电 IC 的 BAT 引脚 —— 这就是电芯节点 |
| B− | 18650 负极(电池座的黑线) | 位于保护 MOSFET 的电池那一侧 |
| OUT+ | 你项目的 + 电源轨,或 MT3608 的 VIN+ | 与 B+ 同一条网络;被切断的从来不是正极这一边 |
| OUT− | 你项目的地,或 MT3608 的 VIN− | 受保护的那个节点 —— 流过这里的每一毫安都要经过那对 MOSFET |
| USB 座 / IN 焊盘 | 一个 5V 手机充电器 | 数据手册标定的供电电压是 4.0V 到 8.0V,典型值 5V |

想看看实物板子是怎么接的?下面这个视频讲得不错:
怎么分辨带保护的 TP4056 和裸板?
要认出带保护的 TP4056 板,最简单的办法是数芯片:焊盘旁边有三颗 —— TP4056 本身,加上两颗 6 脚 SOT-23 封装的小芯片,通常是 DW01A 和 FS8205A。裸板上只有 TP4056 一颗,也没有 OUT 那一对焊盘。
| 对比项 | TP4056M | TP4056C | 裸 TP4056 板 |
|---|---|---|---|
| 输入接口 | Micro-USB | USB Type-C | 两种都有 |
| 保护电路 | 有 | 有 | 没有 |
| TP4056 旁边的芯片 | 两颗 SOT-23-6 | 两颗 SOT-23-6 | 没有 |
| 焊盘旁的丝印 | 一对 B+/B− 和一对 OUT+/OUT− | 一对 B+/B− 和一对 OUT+/OUT− | 没有 OUT 那一对 |
| 过放截止 | 有 | 有 | 没有 |
| 出厂充电电流 | 1A | 1A | 1A |
TP4056 的充电电流要怎么改?
TP4056 用一只从 PROG 接到地的电阻来设定充电电流 —— 通常就是板上标着 R3 的那一只。它的数据手册给出 IBAT =(VPROG ÷ RPROG)× 1200,其中 VPROG = 1V;手册里另外还印了一张对照表,两者略有出入。两边对不上的时候,以表格为准。
Battery University 建议以 0.5C 到 1C 的电流充电。对本文这只 2200mAh 电芯来说,出厂的 1A 算下来是 0.45C,所以不用去动它。真正会吃亏的是小容量的 LiPo 软包:1A 充进一只 500mAh 的软包,那就是 2C。
| R3(RPROG) | 充电电流 | 大致适合多大的电芯 |
|---|---|---|
| 1.2 kΩ(出厂值) | 1000 mA | 2000 mAh 以上 |
| 2 kΩ | 580 mA | 1200 mAh |
| 3 kΩ | 400 mA | 800 mAh |
| 5 kΩ | 250 mA | 500 mAh |
| 10 kΩ | 130 mA | 260 mAh |
TP4056 上的红灯和蓝灯分别代表什么?
TP4056 的两颗 LED 由 CHRG 和 STDBY 驱动,这两个都是开漏输出,只能拉低或者悬空。红灯(CHRG)表示电芯正在充电;蓝灯或绿灯(STDBY)表示充电已经结束。
真正让人困惑的是没装电芯的情况。电池焊盘上什么都不接时,数据手册说两颗 LED 都不亮;但只要在 BAT 上加一点电容 —— 比如一只 10µF 电容,或者一个空电池座的引线 —— 待机灯就会亮起,而充电灯会以一到四秒的周期闪烁。这是手册里写明的行为,不是故障。
TP4056 什么时候会停止充电?保护电路又切断些什么?
TP4056 的浮充电压固定在 4.2V —— 规格是最小 4.137V、典型 4.2V、最大 4.263V。它先恒流充到这个电压,再维持 4.2V 让电流慢慢下降,最后在电流降到设定值的十分之一时终止。锂电芯没办法吸收涓流,所以充电必须停下来。
保护电路是另一道、也是更靠后的防线。它的 DW01A 阈值都远在正常使用范围之外,所以在一套健康的装置里,你根本不应该碰到它们。
| 事件 | 触发点 | 恢复条件 |
|---|---|---|
| 过充 | 典型 4.30V(4.25–4.35V) | 典型 4.10V |
| 过放 | 典型 2.40V(2.30–2.50V) | 典型 3.00V |
| 过流 | MOSFET 对两端 150mV | 移除负载 |
| 短路 | MOSFET 对两端 1.2V,持续 5µs | 移除负载 |
过流的规格是用电压而不是电流来定义的:触发电流等于 150mV 除以那对 MOSFET 的导通电阻,而这个电阻在不同批次之间会有差异。把它当成最后的兜底就好,电路该有的保险丝还是要正经加上。
怎么用 MT3608 把 3.7V 升到 5V?
MT3608 升压模块能把一只电压不断下滑的电芯变成稳定的 5V 电源轨,这一点很关键,因为所谓“3.7V”的 18650 满电时是 4.2V,快没电时大约是 3.0V。把 OUT+ 和 OUT− 接到模块的 VIN+ 和 VIN−,再从 VOUT+ 和 VOUT− 取 5V。
调输出电压这一步,最多人做得太急。先上电,把表笔搭在 VOUT+ 和 VOUT− 上,在模块运行的状态下再慢慢转那只蓝色微调电位器 —— 它是多圈的,升一伏要转很多圈。我们的数字万用表教程讲了该怎么设置表,而反过来降压的那一边,在我们的 LM2596 降压模块教程里。

接下来是电流预算,升压模块在这里最容易让人意外:它搬运的是功率,不是电流。5V 输出 0.5A 就是 2.5W,按现实一点的 85% 效率算,输入端需要 2.94W —— 从一只 3.7V 电芯上取 795mA,而如果电芯已经掉到 3.0V,就要 980mA。
这也是为什么升压模块标的“2A”值得多看一眼。MT3608 数据手册规定的是 4A 的内部开关电流限制,而那是输入侧的电流,所以电压升得越高,能到输出端的就越少。手册自己给出的范围是输入 2V–24V、输出最高 28V;模块的商品页往往写得更窄。请相信数据手册和那个 4A 开关限制,而不是任何标题上的数字。
可以一边给 18650 充电,一边跑我的项目吗?
TP4056 没有电源路径管理(power-path),这一条就是全部答案。带电源路径管理的充电器会直接用输入电源供给你的负载,同时另外给电芯充电;而 TP4056 只有一个电池节点,所以负载和电芯只能共用它。
充电时如果 OUT+ 和 OUT− 上还挂着负载,芯片调节的那个电流就不再只是进入电芯的电流了。由于终止判据要等这个电流降到设定值的十分之一,只要负载超过设定充电电流的十分之一 —— 在出厂的 1A 设置下就是 100mA —— 板子就可能永远充不完。先把电芯充好,再跑项目。
单节 18650 的装置,真正该守的安全规则有哪些?
18650 里存着实实在在的能量,所以有几个习惯值得一直保持。不要用普通烙铁直接焊在裸电芯的壳体上,因为热量会传到里面去 —— 请用电池座,或者点焊好的极耳。不要把电芯放在面包板上整夜无人看管地充电,那里只要碰歪一根杜邦线就是一次彻底短路。还有,给本身已经带保护板的电芯再配一块保护板,并不危险,只是多余 —— 哪一边先动作,整包电就先断在哪一边,而一只自带保护板已经在它自己的阈值上锁死的电芯,想救活会比较麻烦。一层就够了。
最常把人绊倒的错误是电池座。多槽的 18650 电池座两种接法都有卖 —— 串联(两槽是 7.4V,三槽是 11.1V)和并联(还是 3.7V,只是容量更大)—— 而外壳上几乎从来不写是哪一种。TP4056 只负责把一只电芯充到 4.2V,所以任何高于这个的电压都是错的。先量一下电池座的引线:接近 3.7V 说明是单节或并联,接近 7.4V 说明是串联。做 1S,请用单槽电池座。

如果我只想要一块现成的 USB 充电宝板呢?
37VUSBD 双 USB 充电宝板适合那种压根不想自己搭电路的读者:充电、升压、保护,再加一个电量百分比显示,全都在一块 PCB 上,输出是 5V USB。通常要放弃的是控制权 —— 充电电流改不了,输出除了 5V 没有别的,也没有可以直接取用的电芯原始电压来给 3.3V 逻辑用。
可选,但很值得
怎么用 ESP32 读电池电压?
ESP32 没办法直接读 4.2V,因为它的 GPIO 工作在 3.3V,所以分压电阻不是可选项。从 OUT+ 到地接两只 100kΩ 电阻,ADC 接在中间的分压点,就把电压减半:满电的电芯到达引脚时是 2.10V。这个分压网络会漏掉 4.2 ÷ 200,000 = 21µA,相对一只 2200mAh 的电芯可以忽略不计。
也该老实说说 ADC 交回来的数字是什么水平。乐鑫的校准文档指出,标称 1100mV 的基准在不同芯片之间会在 1000mV 到 1200mV 之间浮动,而且 ADC 对噪声敏感。这也是下面这段程序用 analogReadMilliVolts() 的原因 —— 它会套用你这颗芯片自己烧录进去的校准值。
// 18650 电池电压与大致电量百分比 - ESP32
// 分压:OUT+ --[100k]--+--[100k]-- GND,ADC 接在分压点(GPIO34)。
// 满电 4.2 V 的电芯到达引脚时是 2.10 V,远低于 3.3 V 电源轨。
// 分压网络漏电流:4.2 / 200000 = 21 uA。相对 2200 mAh 可以忽略。
const int VBAT_PIN = 34; // 只能做输入的 ADC1 引脚 - 开着 WiFi 也照样能用
const float DIVIDER = 2.0; // 100k + 100k = 除以二
const int SAMPLES = 32; // ESP32 的 ADC 有噪声;取平均
void setup() {
Serial.begin(115200);
analogSetPinAttenuation(VBAT_PIN, ADC_11db); // 最宽的衰减档
}
// 近似的锂电曲线 - 只是粗略参考,不是电量计。
// 实际容量取决于负载、温度和电芯老化程度。
float percentFromVolts(float v) {
const float pts[][2] = {
{4.20, 100}, {4.00, 80}, {3.85, 55}, {3.70, 30}, {3.50, 10}, {3.00, 0}
};
const int n = 6;
if (v >= pts[0][0]) return 100.0;
for (int i = 1; i < n; i++) {
if (v >= pts[i][0]) {
float span = pts[i - 1][0] - pts[i][0];
float frac = (v - pts[i][0]) / span;
return pts[i][1] + frac * (pts[i - 1][1] - pts[i][1]);
}
}
return 0.0; // 低于 3.00 V - 保护快要动作了
}
void loop() {
uint32_t mv = 0;
for (int i = 0; i < SAMPLES; i++) {
mv += analogReadMilliVolts(VBAT_PIN); // 使用这颗芯片的 eFuse 校准值
}
float packV = (mv / (float)SAMPLES) * DIVIDER / 1000.0;
Serial.print(packV, 2);
Serial.print(" V ~");
Serial.print(percentFromVolts(packV), 0);
Serial.println(" %");
delay(2000);
}
读数要在项目空闲的时候取,因为电芯电压在带负载时会下垂。如果板子根本连不上,可以看我们那篇ESP32 无法识别、上传失败怎么修。
我们从真实客户身上见到的常见错误
TP4056 特别容易被接成一种“看起来完全没问题、其实悄悄错了”的样子。有五种失败方式一直在重复出现。
最常见的一种,是把负载焊在 B+ 和 B− 上。在一块拥挤的板子上,这条路更短,而且它确实能用,所以没有任何东西会提醒你回头再看一眼 —— 但保护 MOSFET 就在 B− 和 OUT− 之间,这样接等于把负载放在了它们外面。电芯于是可能被拉到 2.4V 以下,而掉到那个电压的电芯,很少还能救回来。
第二种是多槽电池座:两只电芯串联,就是把 7.4V 送给一颗只按单节设计的芯片。第三种是等项目接上去之后才去调升压模块,因为每一伏要转很多圈,5V 很容易一下子调过头,而代价由项目来付。
第四种是电池座里没装电芯时模块看起来像坏了,那其实是手册里写明的行为,不是故障。第五种是把升压模块上的“2A”当成输出端的保证。
常见问题 FAQ
TP4056 可以给 3 只电池充电吗?
只有在三只电芯并联时才可以,而且必须是同一品牌、同一容量、电量状态也相近的电芯 —— 把一只满电的和一只没电的直接接在一起,两者之间会瞬间涌过很大的电流,所以请先分别测量,把两者的差距控制在大约 0.05V 以内。并联之后,这一包电仍然是一只 3.7V 电芯,只是容量变成三倍。三只串联就是 11.1V,而 TP4056 输入引脚的绝对最大值只到 8V,所以那样会直接烧掉模块。
我的 TP4056 为什么会发烫?
TP4056 是线性充电器,所以它降掉的每一伏都会变成热 —— 输入 5V、电芯 3.6V、电流 1A 时大约是 1.4W。温热是正常的。如果烫到手摸着不舒服,就换一只阻值更大的 R3,让它用更小的电流充。
18650 充满要多久?
在出厂的 1A 电流下给一只 2200mAh 电芯充电,大约要预留三小时:恒流阶段差不多两小时,之后是一段电流逐渐下降的过程,直到降至 1A 的十分之一。
可以整夜充着不管吗?
从电气上说它会自己停下来,因为它在 C/10 时终止,之后也不会再涓流补充。风险在于它周围的那套装置:面包板、松动的杜邦线、可能会移位的电芯。请在你看得见的地方充电。
TP4056 插上去不亮灯是怎么回事?
先检查电芯。数据手册说没装电池时两颗 LED 都不亮,所以板子一片漆黑,通常是电池座没有把电芯夹好。手册还写明,输入电压太低时同样是两颗都不亮,所以在怪板子之前,先换一条线和一个充电器试试。
最后更新:2026 年 8 月。有问题?WhatsApp 联系我们。



TP4056 18650 Battery Charger Module Lithium Ion Battery Li-ion Battery Charger Type C Micro USB - TP4056 CHARGER (MICRO)
3.7V 18650 Battery Rechargeable Li-Ion Battery 1200mAh 2200mAh 3200mAh Flat Top - 18650 Li-Ion Battery (2200mAh)
18650 Battery Holder 1/2/3/4 Slot 3.7V Battery Cell Housing Battery Case Battery Casing - 18650 BATTERY HOLDER (1)
MT3608 Adjustable Step-up Convertor Boost Converter Switching Boost Converter for Arduino Project
18650 Battery Charger Boost Module Dual USD Output Charging Module 5V with Charging Protection
XL830L Digital Multimeter with backlight Portable Multimeter Electronics Project