两颗10F超级电容到底能给5V负载撑多久
拔掉外部电源后,只要设备再坚持十几秒,保存一份数据、结束一次写入,事情就完全不同了。超级电容适合这种短时备电,但“用了两颗 10F”并不能直接换算成能坚持多久。
先问三个问题。两颗电容怎么连接?电路允许放到多少伏?放电末段还能否维持负载要求?少问其中一个,算出的时间就可能很漂亮,用起来却提前掉电。

下面用一块 5V 超级电容 UPS 的真实工程,把这三件事算清,再给出一段完整的 Python 预算工具。重点是建立能重复核对的模型,适合给数据记录器、控制板和短时供电维护做初步预算。它不代替电源动态测试。
容量先减半,耐压还要逐节检查
工程使用两颗标称 2.7V、10F 的超级电容,串联接到 VCAP、MID、GND。原理图没有画出这两颗器件,PCB 留有对应连接位置;不能把图上的 22µF 陶瓷电容当作储能电容。
串联等效容量满足 1/Ceq = 1/C1 + 1/C2,因此两颗 10F 得到 5F。若两颗容量不同,应代入各自的实际值,不能继续按 5F 处理。ESR 则相加,连线、焊点等额外串联电阻还要另计。
两颗的标称耐压相加为 5.4V,也不等于任意情况下每颗都安全。串联充电时,容量与漏电流不一致会改变分压。总电压合格,仍可能有一颗过压。CN3125 的 MID 引脚参与双电容管理,但其均衡能力有限,不能代替匹配电容和逐节电压核验。
充到多少伏,不能取一个方便的整数
U1 是 CN3125。图中 R1 为 62kΩ、R3 为 20kΩ,按照手册的反馈关系,充电总压典型值为 1.205 × (1 + 62/20) = 4.9405V。
R2 为 2.4kΩ,对应设置电流 1188/2400 = 0.495A。这只是设定值,输入压差、芯片热调节以及接近充满时的恒压阶段都会改变实际充电过程,不能拿它保证固定充满时间。

预算工具先取 4.9405V 作为起始内部电压,这是典型参数假设。量产或实物评估时,应换成在目标条件下测得或有公差依据的较低起始电压,并同时检查两节电容电压。储能与电压的平方相关,起始电压估得偏高,收益会被放大。
电容里还有能量,升压器却可能已经越界
U2 为 AP2007SPER,VCAP 直接进入其 VIN。R7 为 100kΩ、R8 为 33kΩ,结合 1.23V 的典型反馈基准,得到约 4.957V 输出。芯片基准、阻值和负载都会影响实际结果,不能把“5V”三个字符理解为精密且恒定的输出。

AP2007 V2.0 手册给出的输入工作范围下限是 2.5V。首页的 5V、2A 输出说明有输入 3.3V 的条件;不能据此保证整个电容放电区间都能输出 2A。手册中的 5A 峰值限流也不是 5A 输出能力,还要考虑电感纹波、饱和、开关损耗和温升。
再看控制其 EN 的 CN302。实际导出图仍是 R9=49.9kΩ、R11=36kΩ、R10=15kΩ。按连线关系,从 VCAP 到 GND 的电阻顺序为 R9、R11、R10;FTH 接前一分点,RTH 接后一分点。

CN302 手册中的上行门槛为 1.211 × (R9+R11+R10)/R10,下行门槛为 1.211 × (R9+R11+R10)/(R11+R10)。按图上原值,上行门槛约 8.146V,已经高于这套储能端的目标总压,显然不能照图期待正常启用。
把 R10 与 R11 按工程页面的勘误对调后,上行约 3.394V,下行仍约 2.396V。问题只修好了一部分——2.396V 已低于 AP2007 的 2.5V 输入下限,而且 CN302 基准还有约 ±2% 的规格范围,电阻和输入漏电流也会影响门槛。
因此,不能用“还能放到 2.396V”继续计算可保证的 5V 续航。本文的工具会拒绝低于转换器输入下限的截止参数;示例选择 2.7V 作为分析边界。这个值没有写入原板,也不代表已经完成 2.7V 保护改板。要做可复现硬件,还须重新设计、核对公差并验证实际关断和重启行为。
同一个电流,放电越到后面越难维持
先忽略 ESR,等效 5F 从 4.9405V 放到 2.7V,能释放的电容能量为 0.5 × 5 × (4.9405² - 2.7²) ≈ 42.80J。
假设从转换器输入端到负载的有效效率固定为 85%,1W 负载对应约 36.38s;2.5W 对应约 14.55s。这里已经扣除了截止电压以下的储能,不能再从 0V 开始算一遍,把同一份能量重复使用。
但恒功率负载不是恒电流负载。设电容内部电压为 Vc,加载后的转换器输入端电压为 Vt,串联电阻为 R,则 Vt = Vc - I×R,同时 Vt×I = Pout/η。
求解后,正常低电流分支为 I = 2Pin / (Vc + sqrt(Vc² - 4RPin))。电压往下走时,维持同一份功率需要更大的电流,ESR 压降也跟着增加。端口已经跌到 2.7V 时,电容内部电压还会高一些,剩下的那部分能量并不能继续供给这个工作条件。
例如,2.5W、效率 85%、整组 ESR 假设为 0.40Ω,端口降至 2.7V 时,电流约 1.089A,内部电压约为 3.136V。把内部电压误当成端口电压,会把截止前可用区间算长。

表中的 0.15Ω、0.40Ω 是敏感性分析输入,没有被当作该型号电容的实测值或手册保证值。效率同样是假设。工具会计算这些条件下的时间,不会因此确认某颗电感、某块 PCB 或某个负载已经满足要求。
把计算边界写进程序
下面的工具使用 Python 3.11 或更新版本,只依赖标准库。保存为 supercap_budget.py,整段代码可直接复制运行。
输入是每颗串联电容的容量、整组 ESR、起始内部电压、负载功率、有效效率和端口截止电压。它按 dt = -C×dVc/I 积分,并把截止点换算回内部电压;输出同时保留端口起始电压和末段电流,便于检查假设。
"""Constant-power supercapacitor budget, Python 3.11+, MIT license.
Not a hardware simulation or a guarantee of converter/load compatibility.
"""
import argparse
import json
import math
def budget(caps, esr, start, cutoff, power, eta, vin_min=2.5, steps=4096):
vals = [*caps, esr, start, cutoff, power, eta, vin_min]
if not caps or not all(math.isfinite(x) for x in vals):
raise ValueError("finite inputs and at least one capacitor required")
if min(caps) <= 0 or esr < 0 or power <= 0 or start <= 0:
raise ValueError("positive capacitance, voltage and power required")
if not 0 < eta <= 1 or vin_min <= 0 or cutoff < vin_min:
raise ValueError("efficiency or converter input limit violated")
if not isinstance(steps, int) or isinstance(steps, bool) or steps < 16:
raise ValueError("steps must be an integer >= 16")
capacitance = 1.0 / sum(1.0 / c for c in caps)
pin = power / eta
# Stay on the high-terminal-voltage, low-current branch.
if cutoff * cutoff <= esr * pin:
raise ValueError("power collapse occurs before requested cutoff")
stop = cutoff + esr * pin / cutoff
if start <= stop:
return {"C_F": capacitance, "seconds": 0.0,
"stop_internal_V": stop, "reason": "no_valid_window"}
def current(v):
return 2.0 * pin / (v + math.sqrt(v * v - 4.0 * esr * pin))
# Integrate dt = -C*dVc/I. Vc is internal capacitor voltage;
# cutoff is the loaded converter-input terminal voltage.
dv = (start - stop) / steps
seconds = capacitance * dv * sum(
1.0 / current(stop + (n + 0.5) * dv) for n in range(steps))
initial_i = current(start)
return {"C_F": capacitance, "seconds": seconds,
"start_terminal_V": start - esr * initial_i,
"stop_internal_V": stop, "end_current_A": pin / cutoff,
"usable_cap_energy_J": 0.5 * capacitance * (start**2 - stop**2),
"delivered_energy_J": power * seconds,
"reason": "terminal_cutoff"}
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("power", type=float, help="load power in watts")
parser.add_argument("--caps", type=float, nargs="+", default=[10.0, 10.0])
parser.add_argument("--esr", type=float, default=0.15, help="bank ESR, ohm")
parser.add_argument("--start", type=float, default=4.9405)
parser.add_argument("--cutoff", type=float, default=2.7)
parser.add_argument("--eta", type=float, default=0.85)
parser.add_argument("--vin-min", type=float, default=2.5)
args = parser.parse_args()
try:
result = budget(args.caps, args.esr, args.start, args.cutoff,
args.power, args.eta, args.vin_min)
except ValueError as error:
parser.error(str(error))
print(json.dumps(result, indent=2))
if __name__ == "__main__":
main()
例如运行 python supercap_budget.py 1 --caps 10 10 --esr 0.15 --start 4.9405 --cutoff 2.7 --eta 0.85 --vin-min 2.5,返回的 C_F 为 5,seconds 约 35.1765,stop_internal_V 约 2.76536。把 ESR 改为 0,可回到理想能量式的约 36.3769s。
把截止值改成 --cutoff 2.396,程序会报输入下限错误;若功率与 ESR 的组合使工作分支在截止点前就失去解,也会拒绝计算。起始电压已经不足以建立有效区间时返回零秒,不会给出负的续航数字。
本地完成了 12 项测试,覆盖串联容量、零 ESR 的解析能量式、输入功率平衡、截止端口电压、损耗方向、负载与容量变化、效率与截止值影响、积分收敛、无有效区间、功率分支失效及非法输入。2.5W、0.40Ω 条件下,将积分段数从 2048 加到 4096,时间差小于 1µs。这个收敛结果只验证数值计算,没有证明物理参数足够准确。
还有一关是负载能否熬过切换瞬间
续航预算回答“进入稳定备电状态后能撑多久”。它还没回答外部电源断开的一瞬间,输出会不会先跌到负载复位门槛。
U4 使用 TPS2116,两路输入分别为 VIN 与 VGEN,MODE 接 VIN,PR1 通过分压决定输入优先级。原图 R15=100kΩ、R16=25.5kΩ,对应典型选择门槛约 4.922V;工程页面建议 R16 改为 33kΩ,典型值变为约 4.030V。这两套阻值必须分开记录,不能拿说明文字代替实际图纸。

TPS2116 手册中选择基准的范围是 0.92~1.08V,实际门槛还需合并电阻公差。芯片切换采用先断后通,输出电容、负载瞬态和切换条件共同决定电压下陷。本文没有示波器波形,不能把它写成已经验证的“无缝”。
下面两张图来自同一份实际 EDA PCB,顶面用于找储能焊盘、电感和电源路径,底面已镜像为从底面观察。它们保留了原始工程状态,没有把尚未完成的电阻修订画成已打板的事实。


进入实物阶段,先核对器件与装配值,再分别检查两节电压、有效容量和相关放电电流条件下的 ESR。随后用目标负载检查切换下陷、末段输出、欠压关断和重新充电;将得到的有效效率、起始电压与串联电阻回填工具。容量容差、温度、老化、漏电、静态消耗、动态效率及限流均可能缩短结果,示例没有覆盖这些变化。
对几秒到几十秒的备电需求,这样的模型足以帮助判断方案是否值得继续验证。更有用的结论往往不是某个小数点后的时间,而是知道下一步该测哪一个参数,以及哪一段放电区间原本就不能拿来作保证。
资料与验证范围
实际工程为睇睇床底(mura)的《5V 超级电容 UPS》,页面标注 GPL 3.0。本文使用 Sheet_1 Rev.1.0(图框日期 2022-11-01)及对应 PCB,原始电阻值保留;工程图素材沿用 GPL-3.0 许可与原署名。未复用原文照片、叙述或程序。
项目、上游工程和附件入口 https://oshwhub.com/mura/5v-chao-ji-dian-rong-UPS
实际 EDA 工程 https://lceda.cn/editor#id=553acf9659ad4ddd8b94f80092f86b59|1c9bdc40470749b4852fa5e6ace3f090
厂商依据包括 CN3125 Rev.1.0(充电与均衡)、CN302 Rev.1.0 第5页(迟滞公式)、AP2007 V2.0(输入范围及负载条件)、TI TPS2116 ZHCSN31A(选择基准与切换)。资料入口分别为 https://consonance-elec.com/115.html 、https://www.consonance-elec.com/10.html 、https://offer-product.oss-cn-beijing.aliyuncs.com/product/offer/attachment/4040532570/file/subPdf_136550_62385_20211108-111850535.pdf 、https://www.ti.com.cn/cn/lit/ds/symlink/tps2116.pdf 。
原理图与 PCB 从真实 EDA 导出 SVG,母图分别渲染至 4800px、3600px,再裁剪分区及缩放;原理图中文字体替换为微软雅黑,器件值和连线未改写。串联示意、结果表及预算程序为本文独立完成,程序可按 MIT 许可使用。验证限于图纸、厂商参数、计算和离线测试,未改动原云工程,未完成保护改板、实板测试或续航实测。
技术交流,欢迎关注微信公众号:美男子玩编程。



