跳转到内容

M1 · 推导并验证降压变换器

  • 由伏秒平衡(volt-second balance)推导降压(buck)变换器在 CCM 下的电压变换比,分别用手工和 sympy 完成。
  • 由导通区间(on-interval)内电流的斜率推导其电感电流纹波。
  • 以一个公式为例,走一遍本站的检查:它在 equations.yaml 中的条目、它的测试值、必须复现它的 sympy 推导,以及生成器(generator)。逐一故意破坏,看哪项检查失败。
  • 阅读伏秒平衡与电荷平衡和降压变换器。
  • 克隆本仓库并安装其 Python 包(按 README 所述,pip install -e "python[dev,figures]")。以下命令均在克隆的根目录下运行。
  • 本站中,ΔiL\Delta i_L 表示电感电流纹波峰峰值的一半,与 Erickson 相同。

在 CCM 下,开关管在 DTsD T_s 内把电感接到 VgV_g,二极管在周期的其余时间内把它接地。将输出电压 VV 视为恒定(小纹波近似,small-ripple approximation),写出每个区间内的电感电压。求它在一个周期内的平均值,令平均值为零,解出 VV。将 V/VgV/V_g 与降压变换器的电压变换比比较。

让 sympy 完成同样的代数运算。填入两个电感电压:

import sympy as sp
D, Vg, V = sp.symbols('D V_g V', positive=True)
v_on = ... # 开关管导通期间的电感电压
v_off = ... # 二极管导通期间的电感电压
print(sp.solve(sp.Eq(D * v_on + (1 - D) * v_off, 0), V))

本仓库自己的推导是 python/pe_core/derive/ccm_ratios.py,推导页面逐步展示了它。

在导通区间内,电感电流以恒定斜率上升。它在 DTsD T_s 内的上升量就是纹波峰峰值,其一半即 ΔiL\Delta i_L。将结果与降压变换器的电感纹波比较。

降压变换器示例的参数为 VgV_g = 24 V、DD = 0.5、LL = 100 µH 和 fsf_s = 100 kHz。求出它的输出电压和 ΔiL\Delta i_L,填入“验收标准”中。然后在公式浏览器中打开纹波公式并扫描电感量:纹波按 1/L1/L 减小。

▶ 在公式浏览器中打开:降压变换器电感电流纹波(峰峰值的一半),CCM
预设取自例题 buck-basic

在你的克隆中运行 python scripts/gen_equations.py、pytest 和 python scripts/mathlint.py。三者均通过,且 git status 显示生成器没有改动 packages/pe-core/equations/。

在 packages/pe-core/equations/equations.yaml 中,修改 buck.ccm.M 的 tests 里的第一个期望值。运行 python scripts/gen_equations.py:它拒绝执行,其消息指出该条目、该测试以及表达式给出的值。用 git checkout -- packages/pe-core/equations/ 撤销修改。

现在修改 buck.ccm.M 的表达式及其两个期望值,使三者彼此一致(例如三者都减半)。生成器接受这一修改,但 pytest 在 test_derivation_reproduces_yaml[buck.ccm.M] 处失败:sympy 推导给出的仍是你在第 1 步中求得的变换比。按前面的方法撤销修改;同一次 checkout 也会恢复生成器改写过的文件。

  • 显示例题中的值

    12 V(出自 buck-basic:降压变换器示例)

  • 显示例题中的值

    300 mA(出自 buck-basic:降压变换器示例)

勾选记录只保存在此浏览器中:无需账号,也不发送任何数据。

  • 此处的 ΔiL\Delta i_L 是纹波峰峰值的一半。电流的完整摆幅是该项检查所期望值的两倍。
  • 该变换比只在 CCM 下成立。电感电流在周期结束前降到零时,输出会升到 DVgD V_g 以上(CCM 与 DCM,以及任务 M2)。
  • 用安装了 pe_core 的 Python 运行 pytest。换用其他解释器,会在任何检查运行之前就在导入时失败。
  • 生成器接受的实验修改也改写了生成器的输出文件。git checkout -- packages/pe-core/equations/ 会同时恢复 YAML 和这些文件。
  1. 稳态下,电感电压在一个开关周期内的平均值为什么为零?

    1. 因为输出电容使输出电压保持恒定
    2. 因为电感电流在每个周期结束时回到其起始值
    3. 因为开关管和二极管导通的时间相等
    4. 因为输入电压恒定
    答案与解析

    正确答案:B 电感电流在一个周期内的变化量,等于其平均电压乘以周期再除以电感量。逐周期重复的电流变化量为零,因此平均电压为零:这就是伏秒平衡。

  2. 一个 CCM 降压变换器由 48 V 供电,占空比为 0.25。其输出电压是多少?

    1. 36 V
    2. 64 V
    3. 12 V
    4. 16 V
    答案与解析

    正确答案:C 电压变换比等于占空比:0.25 乘以 48 V 为 12 V。

  3. 一个降压变换器的电感电流在 1.0 A 与 1.6 A 之间变化。按本站的约定,ΔiL\Delta i_L 是多少?

    1. 0.6 A
    2. 0.3 A
    3. 1.3 A
    4. 1.6 A
    答案与解析

    正确答案:B 纹波峰峰值为 0.6 A,ΔiL\Delta i_L 是它的一半,即 0.3 A,与 Erickson 相同。平均电流为 1.3 A。

  4. 将 CCM 降压变换器的电感量加倍,其余不变。ΔiL\Delta i_L 如何变化?

    1. 减半
    2. 加倍
    3. 不变
    4. 降为四分之一
    答案与解析

    正确答案:A 导通区间内电流的斜率等于电感电压除以电感量,因此在同样时间内的上升量减半。

  5. 修改 equations.yaml 中某个公式的一个测试的期望值,而不改动其表达式。结果如何?

    1. 在构建站点之前什么也不会发生
    2. 只有 TypeScript 测试失败
    3. 生成器拒绝执行,并指出该条目、该测试以及表达式给出的值
    4. mathlint 报告一个手工输入的公式
    答案与解析

    正确答案:C 加载目录时会用表达式计算每个测试,因此生成器和 pytest 都会在第一个不一致处停止,并指出其位置。

  6. 修改一个表达式及其期望值,使它们彼此一致。哪项检查仍能发现这一错误?

    1. 没有:测试都能通过
    2. 推导测试:sympy 推导必须复现 equations.yaml 中的表达式
    3. 隐私扫描
    4. 链接检查器
    答案与解析

    正确答案:B 测试值只是拿表达式与其自身核对。python/pe_core/derive/ 中的推导独立于 YAML,由 pytest 比较两者。

本站例题、预设和练习中的数值均为合成值:为教学而凑整的数值,并非来自任何实际设计的数据。