两颗10F超级电容到底能给5V负载撑多久

2026-11-054
AI 快速预览详细 收起
本文通过真实工程案例,详细解析了使用两颗10F超级电容为5V负载提供短时备电的方法。文章首先介绍了超级电容的串联连接方式及其等效容量,然后讨论了充电电压的设定和升压器的工作范围。接着,通过Python预算工具,展示了如何准确估算备电时间。最后,文章还讨论了负载切换瞬间的影响。关键词包括超级电容、5V负载、备电时间、串联连接、充电电压、升压器、Python预算工具。

拔掉外部电源后,只要设备再坚持十几秒,保存一份数据、结束一次写入,事情就完全不同了。超级电容适合这种短时备电,但“用了两颗 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。这只是设定值,输入压差、芯片热调节以及接近充满时的恒压阶段都会改变实际充电过程,不能拿它保证固定充满时间。

从实际EDA重新导出的CN3125充电支路

预算工具先取 4.9405V 作为起始内部电压,这是典型参数假设。量产或实物评估时,应换成在目标条件下测得或有公差依据的较低起始电压,并同时检查两节电容电压。储能与电压的平方相关,起始电压估得偏高,收益会被放大。

电容里还有能量,升压器却可能已经越界

U2 为 AP2007SPER,VCAP 直接进入其 VIN。R7 为 100kΩ、R8 为 33kΩ,结合 1.23V 的典型反馈基准,得到约 4.957V 输出。芯片基准、阻值和负载都会影响实际结果,不能把“5V”三个字符理解为精密且恒定的输出。

AP2007升压器的输入输出及反馈电阻

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迟滞网络的原始阻值和引脚连接

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。把内部电压误当成端口电压,会把截止前可用区间算长。

不同负载和ESR假设下的预算结果

表中的 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的实际电源选择网络

TPS2116 手册中选择基准的范围是 0.92~1.08V,实际门槛还需合并电阻公差。芯片切换采用先断后通,输出电容、负载瞬态和切换条件共同决定电压下陷。本文没有示波器波形,不能把它写成已经验证的“无缝”。

下面两张图来自同一份实际 EDA PCB,顶面用于找储能焊盘、电感和电源路径,底面已镜像为从底面观察。它们保留了原始工程状态,没有把尚未完成的电阻修订画成已打板的事实。

实际EDA导出的PCB顶面

实际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 许可使用。验证限于图纸、厂商参数、计算和离线测试,未改动原云工程,未完成保护改板、实板测试或续航实测。

技术交流,欢迎关注微信公众号:美男子玩编程。

创作许可协议

本项目采用 CC BY(署名) 进行许可。

评论(0)
- 没有更多了 -