下面每一节都由 python/pe_core/derive/ 中的一个脚本生成。同一脚本也在 pytest 下运行:除非推导结果(derived result)与 equations.yaml 中存储的表达式之差(symbolic difference)经符号化简后为零,否则测试不通过。文字说明和标题由人工撰写;本页的每个公式都由 sympy 从这些脚本中输出。
在恒定激励下对元件的伏安关系积分;由这些关系的相量形式得到阻抗;在一个周期内计算脉冲序列的傅里叶系数和有效值;理想变压器则在磁芯无损、磁阻为零的条件下由法拉第定律和安培环路定律导出。
电感的伏安关系:v=Ldi/dt。电压 VL 恒定时,电流的斜率恒定;在区间 t 上对其积分。
0∫tLVLdτ 计算该积分。
Δi=LVLt ✓ 复现的公式 ind.di(pytest 用 sympy 验证两者相等)
与之对偶的电容伏安关系:i=Cdv/dt,在电流 IC 恒定时积分。
0∫tCICdτ 计算该积分。
ΔvC=CICt ✓ 复现的公式 cap.dv(pytest 用 sympy 验证两者相等)
送入电感的能量:∫vidt=∫Lidi,从电流为零积分到 IL。
0∫ILLidi 计算该积分。
EL=2LIL2 ✓ 复现的公式 ind.E(pytest 用 sympy 验证两者相等)
送入电容的能量:∫vidt=∫Cvdv,从电压为零积分到 VC。
0∫VCCvdv 计算该积分。
EC=2CVC2 ✓ 复现的公式 cap.E(pytest 用 sympy 验证两者相等)
在正弦稳态下,d/dt 变为乘以 jω,其中 ω=2πf。由电感的伏安关系得到电感的阻抗。
ZL=2πiLf 其模值。
∣ZL∣=2πfL ✓ 复现的公式 imp.ZL(pytest 用 sympy 验证两者相等)
由电容的伏安关系得到电容的阻抗。
ZC=−2πCfi 其模值。
∣ZC∣=2πfC1 ✓ 复现的公式 imp.ZC(pytest 用 sympy 验证两者相等)
空载 R-C 低通滤波器:输出为 Rf 与电容阻抗构成的分压器中电容上分得的电压。
G(jω)=−2πCfRff−ii 模值的平方。
∣G(jω)∣2=1+4π2Cf2Rf2f21 转折(-3 dB)频率是模值平方降为一半时的频率。
fc=2πRfCf1 ✓ 复现的公式 rc.fc(pytest 用 sympy 验证两者相等)
用 fc 代替 RfCf 表示模值。
∣G∣=f2+fc2fc=1+(fcf)21 ✓ 复现的公式 rc.gain(pytest 用 sympy 验证两者相等)
并联寄生电容的电感:导纳相加。
Y=2πiCpf−2πLfi 谐振时导纳为零(对无损模型,阻抗为无穷大)。
fsrf=2πLCp1 ✓ 复现的公式 passive.f_srf(pytest 用 sympy 验证两者相等)
高度为 Vpk、宽度为 DT、每个周期 T 出现一次的脉冲序列。其第 h 次谐波的余弦系数:
ah,cos=πhVpksin(2πDh) 以及正弦系数:
ah,sin=πh2Vpksin2(πDh) 谐波幅值的平方等于两系数的平方和;利用 1−cos2x=2sin2x,可化为完全平方式。
ah2=π2h24Vpk2sin2(πDh) 取非负的平方根。
ah=πh2Vpk∣sin(πhD)∣ ✓ 复现的公式 fourier.pulse.harm(pytest 用 sympy 验证两者相等)
一个周期内的均方值:脉冲贡献 Vpk2,持续 DT。
Vrms2=DVpk2 有效值为其平方根。
Vrms=VpkD ✓ 复现的公式 fourier.pulse.rms(pytest 用 sympy 验证两者相等)
纹波电流流过电容的串联电阻,该电阻上的电压每一时刻都随电流变化。其最大值与最小值之差:
ΔvESR=iC,maxRESR−iC,minRESR 电流的峰峰值等于其最大值减去最小值。
ΔvESR=RESRΔiL,pp ✓ 复现的公式 cap.esr.ripple(pytest 用 sympy 验证两者相等)
绕磁芯一周应用安培环路定律:H 的线积分等于所包围的电流,即 N 匝、每匝流过 Iw。在磁场均匀的无气隙磁芯中,该线积分等于 H 乘以磁路长度。
Hle=IwN 解出 H。
H=leNIw ✓ 复现的公式 mag.H_ampere(pytest 用 sympy 验证两者相等)
对同一磁芯上的两个绕组应用法拉第定律:每个绕组的电压等于其匝数乘以公共磁通的变化率。一次绕组:
V1=NpdΦ/dt 以及二次绕组:
V2=NsdΦ/dt 两式相除:磁通项消去,匝数之比为 n(1:n 约定)。
V2=nV1 ✓ 复现的公式 xfmr.V2(pytest 用 sympy 验证两者相等)
磁芯磁阻为零(理想)时的安培环路定律:净磁动势为零。
I1Np−I2Ns=0 代入 Ns=nNp,解出二次侧电流。
I2=nI1 ✓ 复现的公式 xfmr.I2(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/foundations.py
开关变换器将直流输入斩波为脉冲序列,低通滤波器保留其平均值。将每个电路方程在一个周期内取平均,开关电路即变为直流模型,其中电感绕组电阻 RL 等损耗表现为普通电阻。
降压变换器的开关节点电压为 Vg(0<t<DTs)或 0(DTs<t<Ts);在一个周期内对其取平均。
⟨vs⟩=Ts0∫Tsvsdt 计算两段积分。
⟨vs⟩=DVg ✓ 复现的公式 sw.v_avg(pytest 用 sympy 验证两者相等)
电感满足 vL=Ldi/dt。在一个周期内积分,电流的变化量等于电压的积分除以 L。
Δi=L0∫TsvLdt 若电压为 vL,on,持续 DTs,其余时间为 vL,off,则该积分等于 Ts 乘以一个周期内的平均值。
⟨vL⟩=vL,off+vL,onD−vL,offD 因此一个周期内的变化量等于平均电压乘以 Ts 再除以 L;只有平均电压为零时,变化量才为零(伏秒平衡)。
Δi=L⟨vL⟩Ts ✓ 复现的公式 vsb.drift(pytest 用 sympy 验证两者相等)
在小纹波近似下,电感电压(或电容电流)先取值 xon,持续 DTs,再取值 xoff,持续 (1−D)Ts;其平均值必须为零。
xoff(1−D)+xonD=0 对电感电压(x=vL):伏秒平衡。
vL,off=−1+DDvL,on=−1−DDvL,on ✓ 复现的公式 vsb.v_off(pytest 用 sympy 验证两者相等)
对电容电流(x=iC):电荷平衡。
iC,off=−1+DDiC,on=−1−DDiC,on ✓ 复现的公式 csb.i_off(pytest 用 sympy 验证两者相等)
含电感绕组电阻 RL 的升压变换器,伏秒平衡:开关管导通期间电感电压为 Vg−IRL,二极管导通期间为 Vg−IRL−V(I 为电感直流电流)。
D(Vg−IRL)+(1−D)(Vg−V−IRL)=0 输出电容的电荷平衡:开关管导通期间为 −V/R,二极管导通期间为 I−V/R。
(1−D)(I−RV)−RDV=0 由这两个线性方程解出 I。
I=R+RL−2DR+RD2Vg 并解出 M=V/Vg。
M=R+RL−2DR+RD2R(1−D)=(1−D)(1+(1−D)2RRL)1 ✓ 复现的公式 boost.ccm.M_RL(pytest 用 sympy 验证两者相等)
效率等于输出功率 V2/R 除以输入功率 VgI。
η=R+RL−2DR+RD2R(−1+D)2=1+(1−D)2RRL1 ✓ 复现的公式 boost.ccm.eta_RL(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/averaging.py
在周期稳态下,每个电感电流在一个开关周期结束时都回到起始值,因此一个周期内电感电压的平均值为零。在小纹波近似下,每个区间施加的电压恒定,平衡条件成为关于输出电压 V 的线性方程。
伏秒平衡:电感电压在一个开关周期内的平均值为零。
⟨vL⟩=0 降压变换器:开关管导通期间电感电压为 Vg−V(占比 D),二极管导通期间为 −V(1−D)。
D(Vg−V)−V(1−D)=0 解出 V,再除以 Vg。
✓ 复现的公式 buck.ccm.M(pytest 用 sympy 验证两者相等)
升压变换器:开关管导通期间为 Vg,二极管导通期间为 Vg−V。
DVg+(1−D)(Vg−V)=0 解出 V。
M=−−1+D1=1−D1 ✓ 复现的公式 boost.ccm.M(pytest 用 sympy 验证两者相等)
升降压变换器:开关管导通期间为 Vg,二极管导通期间为(负的)输出电压 V。
V(1−D)+DVg=0 解出 V;输出反相。
M=−1+DD=−1−DD ✓ 复现的公式 buckboost.ccm.M(pytest 用 sympy 验证两者相等)
反激变换器(1:n,励磁电感在一次侧):开关管导通期间为 Vg;二极管导通期间二次侧被钳位在 V,反射到一次侧为 −V/n。
DVg−nV(1−D)=0 解出 V。
M=−−1+DDn=1−DnD ✓ 复现的公式 flyback.ccm.M(pytest 用 sympy 验证两者相等)
正激变换器:开关管导通期间,二次侧向输出滤波器施加 nVg,因此输出电感电压为 nVg−V;随后在续流二极管导通期间为 −V。
D(−V+Vgn)−V(1−D)=0 解出 V。
✓ 复现的公式 forward.ccm.M(pytest 用 sympy 验证两者相等)
正激变换器的磁复位:励磁电感电压为 Vg,持续 DTs;随后复位绕组(Nr 匝)将其钳位在 −Vg/nr,持续 D2Ts,直到励磁电流回到零。
DVg−nrD2Vg=0 解出复位区间。
D2=Dnr 复位必须在一个周期内完成,即 D+D2≤1;取等号得到最大占空比。
Dmax=1+nr1 ✓ 复现的公式 forward.reset.Dmax(pytest 用 sympy 验证两者相等)
降压变换器的纹波:导通区间内电感电流以斜率 (Vg−V)/L 上升,持续 DTs,上升量即整个纹波峰峰值,也就是 2ΔiL。
2ΔiL=LDTs(Vg−V) 其一半即 Erickson 的 ΔiL。
ΔiL=2L(Vg−V)DTs ✓ 复现的公式 buck.ripple.iL(pytest 用 sympy 验证两者相等)
代入 Ts=1/fs 后的峰峰值。
ΔiL,pp=Lfs(Vg−V)D ✓ 复现的公式 buck.ripple.iL_pp(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/ccm_ratios.py
当电感电流纹波大到使电流降至零时,变换器退出 CCM:临界时,纹波峰峰值的一半 ΔiL 等于电感直流电流。DCM 中出现第三个区间 D3Ts,其间开关管和二极管均关断;该区间长度未知,因此须将伏秒平衡与电容电荷平衡联立(二极管或电感的平均电流必须等于负载所取的电流)。
通篇采用的定义:K=2L/(RTs),即 L=KRTs/2。
K=RTs2L 降压变换器:电感直流电流等于负载电流 V/R,CCM 下 V=DVg。
IL=RDVg 代入 CCM 工作点后,由导通区间得到的纹波峰峰值的一半。
ΔiL=2LDTs(Vg−DVg) 临界条件 ΔiL=IL,代入 L=KRTs/2,解出 K。
Kcrit=1−D ✓ 复现的公式 Kcrit.buck(pytest 用 sympy 验证两者相等)
升压变换器:电感流过输入电流 V/((1−D)R),其中 V=Vg/(1−D)。
IL=R(1−D)2Vg 代入 CCM 工作点后,由导通区间得到的纹波峰峰值的一半。
ΔiL=2LDTsVg 临界条件 ΔiL=IL,代入 L=KRTs/2,解出 K。
Kcrit=D(−1+D)2=D(1−D)2 ✓ 复现的公式 Kcrit.boost(pytest 用 sympy 验证两者相等)
升降压变换器:电感电流为 ∣V∣/((1−D)R),其中 ∣V∣=DVg/(1−D)。
IL=R(1−D)2DVg 代入 CCM 工作点后,由导通区间得到的纹波峰峰值的一半。
ΔiL=2LDTsVg 临界条件 ΔiL=IL,代入 L=KRTs/2,解出 K。
Kcrit=(−1+D)2=(1−D)2 ✓ 复现的公式 Kcrit.buckboost(pytest 用 sympy 验证两者相等)
临界时 K 等于 Kcrit;由 K 的定义解出 L。
Lcrit=2KcritRTs ✓ 复现的公式 L.crit(pytest 用 sympy 验证两者相等)
DCM 降压变换器,以 V=MVg 表示的伏秒平衡:Vg−V 持续 DTs,−V 持续 D2Ts,0 持续 D3Ts。
D(Vg−MVg)−D2MVg=0 解出 D2。
D2=−D+MD=MD(1−M) ✓ 复现的公式 buck.dcm.D2(pytest 用 sympy 验证两者相等)
导通区间结束时的电感峰值电流。
ipk=LDTs(Vg−MVg) 电荷平衡:电感平均电流(高为 ipk、底为 (D+D2)Ts 的三角形)等于负载电流 V/R。
2LMTsD2(Vg−MVg)=RMVg 代入 L=KRTs/2,取关于 M 的二次方程的正根。
M=2KD(−D+4K+D2)=1+1+D24K2 ✓ 复现的公式 buck.dcm.M(pytest 用 sympy 验证两者相等)
DCM 升压变换器,伏秒平衡:Vg 持续 DTs,Vg−V 持续 D2Ts。
DVg+D2(Vg−MVg)=0 解出 D2。
D2=−1+MD 输出端的电荷平衡:二极管平均电流(高为 ipk、底为 D2Ts 的三角形)等于负载电流。
2L(−1+M)TsVgD2=RMVg 代入 L=KRTs/2,保留 M>1 的根。
M=21+2KK+4D2=21+1+K4D2 ✓ 复现的公式 boost.dcm.M(pytest 用 sympy 验证两者相等)
DCM 升降压变换器,以负输出 V=MVg 表示的伏秒平衡:Vg 持续 DTs,V 持续 D2Ts。
DVg+D2VgM=0 解出 D2。
D2=−MD 电荷平衡:二极管平均电流等于负载电流 ∣V∣/R。
−2LMTsVgD2=−RVgM 代入 L=KRTs/2 并求解(M<0)。
M=−KD ✓ 复现的公式 buckboost.dcm.M(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/dcm.py
反激变换器在开关管导通期间将能量储存在励磁电感 LM 中,在开关管关断期间经二极管将其释放到输出。对于 1:n 变压器(n=Ns/Np),二次侧电压除以 n 后反射到一次侧,二次侧电流等于折算到一次侧的励磁电流除以 n。
导通区间:Vg 加在 LM 两端,因此励磁电流从零(DCM)上升到 ipk。
ipk=LMDTsVg LM 的伏秒平衡:Vg 持续 DTs,随后反射的输出电压 −V/n 持续 D2Ts。
DVg−nD2V=0 解出 D2。
D2=VDVgn 电荷平衡:二次侧电流从 ipk/n 开始,在 D2Ts 内降到零;其平均值等于负载电流 V/R。
2LMVTsD2Vg2=RV 代入 LM=KRTs/2,解出 V/Vg;n 被消去。
M=KD ✓ 复现的公式 flyback.dcm.M(pytest 用 sympy 验证两者相等)
代入 DCM 输出电压后的 DCM 去磁(demagnetizing)区间。
D2=nK 当去磁区间占满周期的其余部分,即 D+D2=1 时,达到临界。
Kcrit=n2(−1+D)2=n2(1−D)2 ✓ 复现的公式 Kcrit.flyback(pytest 用 sympy 验证两者相等)
输出保持在 V(电池或稳压母线),二极管压降为 VD:去磁期间反射电压为 −(V+VD)/n。
DVg+nD2(−V−VD)=0 令 D+D2=1,得到变换器进入 CCM 时的输入电压;高于该电压时,CCM 伏秒平衡使 Vg 保持在这一数值。
Vg,crit=DnV+VD−D(V+VD)=nD(V+VD)(1−D) ✓ 复现的公式 flyback.V_crit(pytest 用 sympy 验证两者相等)
二极管导通期间,一次绕组上的反射电压 (V+VD)/n 叠加在 Vg 上,因此开关管关断时的电压为两者之和(漏感尖峰再叠加在此之上)。
VDS=Vg+nV+VD ✓ 复现的公式 flyback.Vds_off(pytest 用 sympy 验证两者相等)
输入被固定在 Vg,crit 时,开关管关断电压可以化简。
VDS=nDV+VD ✓ 复现的公式 flyback.Vds_clamped(pytest 用 sympy 验证两者相等)
开关管导通期间,二次绕组电压 nVg 与输出电压叠加,共同加在反偏的二极管两端。
VR=V+nVg ✓ 复现的公式 flyback.diode.VR(pytest 用 sympy 验证两者相等)
CCM 电荷平衡:二极管导通期间,即 (1−D)Ts 内,二次侧流过 IM/n(小纹波);其平均值等于负载电流 V/R。
nIM(1−D)=RV 解出 IM。
IM=−R(−1+D)Vn=(1−D)RnV ✓ 复现的公式 flyback.IM(pytest 用 sympy 验证两者相等)
导通区间:Vg 加在 LM 两端,持续 DTs,因此励磁电流的上升量为 ΔiM(纹波峰峰值的一半)的两倍。
2ΔiM=LMDTsVg 解出 ΔiM。
ΔiM=2LMVgDTs ✓ 复现的公式 flyback.ripple.iM(pytest 用 sympy 验证两者相等)
开关管导通期间二极管关断,因此负载电流 V/R 完全由电容提供,持续 DTs,电容电压的下降量为 Δv(纹波峰峰值的一半)的两倍。
2Δv=CRDTsV 解出 Δv。
Δv=2RCVDTs ✓ 复现的公式 flyback.ripple.v(pytest 用 sympy 验证两者相等)
代入 Ts=1/fs 后的 DCM 励磁电流峰值。
Ipk=LMfsVgD ✓ 复现的公式 flyback.Ipk.dcm(pytest 用 sympy 验证两者相等)
每个导通区间结束时 LM 中储存的能量(DCM 下每个周期全部传递出去)。
E=2LMD2Ts2Vg2 功率 = 每周期能量 × 开关频率;它取决于 Vg、D、LM、fs,而与负载无关。
P=2LMfsVg2D2 ✓ 复现的公式 dcm.P_in(pytest 用 sympy 验证两者相等)
由于 P=Vg2/Rin,输入端表现为一个不耗散任何功率的电阻(无损电阻)。
Rin=D22LMfs ✓ 复现的公式 lfr.R_in(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/flyback.py
反激变换器的开关管关断时,励磁电流转移到二次侧,但漏感 Llk 中的电流除了跨接在一次绕组两端的钳位电路外无处可去。钳位电路将一次绕组电压钳位在 Vclamp,直到该电流降到零。
输出二极管导通期间,二次绕组上的电压为输出电压加二极管压降。
vs=V+VD 理想 1:n 变压器将二次侧电压除以 n 折算到一次侧。
VOR=nV+VD ✓ 复现的公式 flyback.V_OR(pytest 用 sympy 验证两者相等)
开关管位于输入与一次绕组之间,钳位电路导通期间将一次绕组电压钳位在 Vclamp。
VDS=Vg+Vclamp ✓ 复现的公式 clamp.Vds(pytest 用 sympy 验证两者相等)
输出二极管导通期间励磁电感两端电压保持为 VOR,因此漏感两端电压为 Vclamp−VOR,其电流从 Ipk 线性下降。
ilk=Ipk−Llkt(Vclamp−VOR) 电流经过这段时间降到零,这段时间不能超过关断时间。
tr=Vclamp−VORLlkIpk ✓ 复现的公式 clamp.t_reset(pytest 用 sympy 验证两者相等)
钳位电路吸收其电压与这一下降电流之积对应的能量:大于漏感能量 21LlkIpk2,因为在此期间反射电压仍在推动电流。
Eclamp=2(Vclamp−VOR)LlkVclampIpk2 每个开关周期一次。
Pclamp=2(Vclamp−VOR)LlkVclampfsIpk2=2(Vclamp−VOR)LlkIpk2fsVclamp ✓ 复现的公式 clamp.P(pytest 用 sympy 验证两者相等)
在 RCD 钳位电路中,电容保持 Vclamp,电阻耗散钳位功率。
RclampVclamp2=2(Vclamp−VOR)LlkVclampfsIpk2 大于 VOR 的根。
Vclamp=2VOR+VOR2+2RclampLlkIpk2fs ✓ 复现的公式 clamp.rcd.V(pytest 用 sympy 验证两者相等)
负载断开且无稳压控制时,输出持续充电,其反射电压不断升高,直至达到钳位电压;此后钳位电路吸收全部输入功率。这适用于电压与该功率无关的钳位器件(TVS);RCD 钳位电路的电压随该功率升高。
nVD+Vo,max=Vclamp 解出输出电压。
Vo,max=nVclamp−VD ✓ 复现的公式 flyback.V_ceiling(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/clamp.py
开关边沿使节点的寄生电感和寄生电容产生振铃。它们的数值无法从布局中读出,但可由两次测得的振铃频率求出:一次在原电路上测量,一次在并入一个已知电容后测量。
原电路中,节点以其电感与电容的谐振频率振铃:
fr0=2πCparLpar1 在节点上并联一个已知电容,电容随之增大,而电感不变:
fr1=2πLparCadd+Cpar1 在两频率之比 x=fr0/fr1 中,电感被消去:
x2=CparCadd+Cpar 解出节点电容:
Cpar=fr02−fr12Caddfr12=(fr1fr0)2−1Cadd ✓ 复现的公式 snub.C_par(pytest 用 sympy 验证两者相等)
再由第一个谐振频率得到电感:
Lpar=4π2fr02Cpar1 ✓ 复现的公式 snub.L_par(pytest 用 sympy 验证两者相等)
AN11160 取寄生电感、缓冲电阻与缓冲电容串联回路的阻尼比,不计节点自身的电容。该回路的固有频率满足
1+sCsnubRsnub+CsnubLpars2=0 除以 LparCsnub 并写成 s2+2ζω0s+ω02=0 的形式,其中 ω0=1/LparCsnub,其阻尼比为
ζ=2LparRsnubCsnub 解出电阻:
Rsnub=2ζCsnubLpar ✓ 复现的公式 snub.R(pytest 用 sympy 验证两者相等)
在一个边沿,节点电压跳变 Vsnub,缓冲电容经电阻充电,i=(Vsnub/R)e−t/(RCsnub);电阻吸收的能量与 R 无关:
ER=2CsnubVsnub2 下一个边沿,电容经电阻和正在开通的开关管放电,失去其储存的能量,即又损失同样多,因此每个周期损失
2ER=CsnubVsnub2 每秒 fs 个周期:
P=CsnubVsnub2fs ✓ 复现的公式 snub.P(pytest 用 sympy 验证两者相等)
AN11160 依据给电容充电、且寄生电感中流过电流 Iring 的那个边沿来确定电阻的额定功率。电源提供电容的电荷 CsnubVsnub,电压为 Vsnub:
Es=CsnubVsnub2 电容保留其中一半能量,电感释放其全部储能 LparIring2/2;其余能量由电阻吸收,与其阻值无关:
WR=2CsnubVsnub2+2LparIring2 每个周期一次:
PR,snub=2fs(CsnubVsnub2+LparIring2) ✓ 复现的公式 snub.P_R(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/snubbers.py
由输出电容的电荷平衡得到各变换器的电感直流电流。导通区间内电感电压恒定,因此电流线性变化,变化量为 ΔiL(纹波峰峰值的一半)的两倍;同理,由电容每周期的电荷得到电压纹波 Δv。开关管利用率 U 将负载功率与开关管峰值电压和电流有效值之积相比较。
降压变换器,电荷平衡:两个区间内电容电流均为 IL−V/R(小纹波)。
⟨iC⟩=IL−RV 令平均值为零。
IL=RV ✓ 复现的公式 buck.IL(pytest 用 sympy 验证两者相等)
降压变换器的输出纹波:电容流过电感电流中的三角波交流分量。其正半部分持续 Ts/2,峰值为 ΔiL,因此输送电荷 q。
q=4ΔiLTs 该电荷使电容电压从最小值升到最大值,即升高 2Δv。
2CΔv=4ΔiLTs 解出 Δv。
Δv=8CΔiLTs ✓ 复现的公式 buck.ripple.v(pytest 用 sympy 验证两者相等)
升压变换器,电荷平衡:开关管导通期间为 −V/R,二极管导通期间为 IL−V/R。
(1−D)(IL−RV)−RDV=0 解出 IL。
IL=−R(−1+D)V=(1−D)RV ✓ 复现的公式 boost.IL(pytest 用 sympy 验证两者相等)
升压变换器的电流纹波:电感电压为 Vg,持续 DTs,因此电流上升 VgDTs/L,即 2ΔiL。
2ΔiL=LDTsVg 解出 ΔiL。
ΔiL=2LVgDTs ✓ 复现的公式 boost.ripple.iL(pytest 用 sympy 验证两者相等)
升压变换器的电压纹波:开关管导通期间,负载电流 V/R 仅由电容提供,持续 DTs,因此电容电压下降 2Δv。
2Δv=CRDTsV 解出 Δv。
Δv=2RCVDTs ✓ 复现的公式 boost.ripple.v(pytest 用 sympy 验证两者相等)
以输出电压的大小 V 表示的升降压变换器:开关管导通期间电感电压为 Vg,二极管导通期间为 −V。
DVg−V(1−D)=0 解出 V。
V=−−1+DDVg=1−DDVg ✓ 复现的公式 buckboost.V(pytest 用 sympy 验证两者相等)
电荷平衡与升压变换器相同:开关管导通期间电容向负载供电,二极管导通期间电容接收 IL。
IL=−R(−1+D)V=(1−D)RV ✓ 复现的公式 buckboost.IL(pytest 用 sympy 验证两者相等)
与升压变换器相同,电感电压为 Vg,持续 DTs。
ΔiL=2LVgDTs ✓ 复现的公式 buckboost.ripple.iL(pytest 用 sympy 验证两者相等)
与升压变换器相同,在 DTs 内仅由电容向负载供电。
Δv=2RCVDTs ✓ 复现的公式 buckboost.ripple.v(pytest 用 sympy 验证两者相等)
降压变换器:二极管导通期间,开关节点处于地电位(理想二极管);位于输入与该节点之间的开关管阻断 Vg。
VDS=Vg ✓ 复现的公式 buck.Vds(pytest 用 sympy 验证两者相等)
升压变换器:二极管导通期间,开关节点接到输出;该节点与地之间的开关管阻断 V。
VDS=V ✓ 复现的公式 boost.Vds(pytest 用 sympy 验证两者相等)
二极管导通期间,开关管的另一端处于输出电位 −V;开关管阻断 Vg−(−V)。
VDS=Vg+V ✓ 复现的公式 buckboost.Vds(pytest 用 sympy 验证两者相等)
正激变换器,复位区间:复位绕组(Nr 匝)以相反极性接到 Vg,因此一次绕组(Np 匝)上的电压为 −VgNp/Nr。
vpri=−nrVg 开关管阻断输入电压与一次绕组电压之差。
VDS=nrVg(1+nr)=Vg(1+nr1) ✓ 复现的公式 forward.Vds(pytest 用 sympy 验证两者相等)
正激变换器的输出电感:开关管导通期间,二次侧施加 nVg,因此电感电压为 nVg−V,持续 DTs。
2ΔiL=LDTs(−V+Vgn) 解出 ΔiL。
ΔiL=2L(nVg−V)DTs ✓ 复现的公式 forward.ripple.iL(pytest 用 sympy 验证两者相等)
开关管利用率:负载功率 P=VI 除以开关管峰值电压与其电流有效值之积。小纹波下,开关管电流是高为 IQ、持续 DTs 的平顶脉冲,其有效值为 IQD。
降压变换器:V=DVg,开关管阻断 Vg,流过电感电流 I。
化简。
✓ 复现的公式 util.buck(pytest 用 sympy 验证两者相等)
升压变换器:开关管阻断 V,流过电感电流 I/(1−D)。
U=D1−D 化简。
U=D1−D ✓ 复现的公式 util.boost(pytest 用 sympy 验证两者相等)
升降压变换器:V=DVg/(1−D),开关管阻断 Vg+V,流过 I/(1−D)。
U=Vg+1−DDVgVgD 化简。
U=(1−D)D ✓ 复现的公式 util.buckboost(pytest 用 sympy 验证两者相等)
反激变换器:V=nDVg/(1−D),开关管阻断 Vg+V/n,流过折算到一次侧的励磁电流 nI/(1−D);匝比消去,结果与升降压变换器相同。
U=D(1−D) 正激变换器:V=nDVg,开关管阻断 Vg(1+1/nr),流过反射的电感电流 nI(忽略励磁电流)。
U=1+nr1D 化简。
U=1+nrnrD=1+nr1D ✓ 复现的公式 util.forward(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/topologies.py
取平均消除了开关纹波;在工作点附近对平均方程施加扰动(d=D+d^,v=V+v^,i=I+i^)并略去二阶乘积项,得到线性方程,对其作拉普拉斯变换即得 v^/d^。下面各变换器最终都化为标准二阶形式:增益为 Gd0,极点位于 ω0、品质因数为 Q,升压和升降压变换器还有一个位于右半平面的零点 ωz。
降压变换器,线性化平均方程(v^g=0):电感电压为 dvg−v,电容电流为 i−v/R。
(i^sL=−v^+d^Vg, sv^C=i^−Rv^) 解出 v^/d^。
Gvd(s)=R+sL+CLRs2RVg 直流增益:s=0 处的值。
Gd0=Vg ✓ 复现的公式 buck.ss.Gd0(pytest 用 sympy 验证两者相等)
极点:ω0=1/a2,由 s2 项的系数 a2 得到。
ω0=LC1 ✓ 复现的公式 buck.ss.w0(pytest 用 sympy 验证两者相等)
Q=a2/a1,由 s 项的系数 a1 得到。
Q=RLC ✓ 复现的公式 buck.ss.Q(pytest 用 sympy 验证两者相等)
升压变换器:平均电感电压为 vg−d′v,电容电流为 d′i−v/R(d′=1−d)。按 d′=D′−d^ 施加扰动并线性化:
(i^sL=d^V−v^D′, sv^C=i^D′−d^I−Rv^) 由稳态得到工作点,记 D′=1−D:V=Vg/D′,I=V/(D′R)。
(V=D′Vg, I=D′2RVg) 解出 v^/d^。
Gvd(s)=D′2(sL+RD′2+CLRs2)Vg(−sL+RD′2) 直流增益(结果中已代回 D′=1−D)。
Gd0=(1−D)2Vg ✓ 复现的公式 boost.ss.Gd0(pytest 用 sympy 验证两者相等)
极点频率。
ω0=LC1−D ✓ 复现的公式 boost.ss.w0(pytest 用 sympy 验证两者相等)
品质因数。
Q=(1−D)RLC ✓ 复现的公式 boost.ss.Q(pytest 用 sympy 验证两者相等)
分子在正实数 s 处为零:右半平面零点。
ωz=L(1−D)2R ✓ 复现的公式 boost.ss.wz(pytest 用 sympy 验证两者相等)
升降压变换器:平均电感电压为 dvg+d′v,电容电流为 −d′i−v/R,输出 v 为负。线性化:
(i^sL=d^(Vg−V)+v^D′, sv^C=d^I−i^D′−Rv^) 工作点,记 D′=1−D:V=−DVg/D′,I=DVg/(D′2R)。
(V=D′Vg(−1+D′), I=D′2RVg(1−D′)) 解出 v^/d^。
Gvd(s)=D′2(sL+RD′2+CLRs2)Vg(−sL(−1+D′)−RD′2) 直流增益为负(反相输出);其大小为:
Gd0=(1−D)2Vg ✓ 复现的公式 buckboost.ss.Gd0(pytest 用 sympy 验证两者相等)
极点频率。
ω0=LC1−D ✓ 复现的公式 buckboost.ss.w0(pytest 用 sympy 验证两者相等)
品质因数。
Q=(1−D)RLC ✓ 复现的公式 buckboost.ss.Q(pytest 用 sympy 验证两者相等)
右半平面零点。
ωz=DLR(−1+D)2=DL(1−D)2R ✓ 复现的公式 buckboost.ss.wz(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/small_signal.py
电压模式控制器将控制电压与周期性锯齿波比较,以确定占空比。沿环路绕行一周,补偿器、调制器、功率级和传感器的增益相乘;这一乘积即环路增益 T,它决定环路抑制扰动的强弱。
锯齿波从 0 上升到 VM,历时 Ts;锯齿波越过 Vctrl 时开关管关断。
TsVMtoff=Vctrl 导通时间占比为 D=toff/Ts。
D=VMVctrl ✓ 复现的公式 pwm.d(pytest 用 sympy 验证两者相等)
沿环路:补偿器输出驱动调制器(增益 1/VM),功率级将 d^ 转换为 v^(增益 Gvd),传感器反馈 Hv^。
环路增益是沿环路各增益的乘积。
T=VMGcGvdH ✓ 复现的公式 loop.T(pytest 用 sympy 验证两者相等)
输出扰动 v^dist 叠加在受控输出上;控制器根据误差 v^ref−Hv^ 动作。
v^=v^dist+VMGcGvd(v^ref−v^H) 到达输出端的扰动减小到原来的 1+T 分之一。
S=1+T1 ✓ 复现的公式 loop.suppression(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/control.py
电感或电容储存的能量是送入它的功率 vi 的积分。每个开关周期重复发生的损耗等于每周期损失的能量乘以 fs;导通损耗是瞬时功率的周期平均值。
送入电感的能量:p=vi,其中 v=Ldi/dt,因此 dE=Lidi。从零积分到关断电流。
Elk=0∫IpkiLlkdi 计算该积分。
Elk=2LlkIpk2 ✓ 复现的公式 flyback.leak.E(pytest 用 sympy 验证两者相等)
若每个周期都将这部分能量移除(钳位或耗散),平均功率为 Elkfs。
Plk=Elkfs ✓ 复现的公式 flyback.leak.P(pytest 用 sympy 验证两者相等)
充电到 Vsw 的开关节点电容储存的能量:dE=vdq=Cvdv。
EC=0∫VswvCnodedv 硬开通每个周期都使其经开关管沟道放电:P=ECfs。
P=2CnodeVsw2fs ✓ 复现的公式 loss.sw.cap(pytest 用 sympy 验证两者相等)
导通损耗是瞬时功率 i(t)2Rx 的周期平均值。
P=Ts0∫TsRxi2(t)dt 按定义,电流有效值(rms)是 i(t)2 周期平均值的平方根。
Irms2=Ts0∫Tsi2(t)dt Rx 为常数,因此可移到平均运算之外。
P=Irms2Rx ✓ 复现的公式 loss.cond(pytest 用 sympy 验证两者相等)
导通的二极管建模为正向电压截距加动态电阻,vD=VF+rdi,因此 p=VFi+rdi2。
P=Ts0∫Ts(VFi(t)+rdi2(t))dt i 的平均值为 Iavg,i2 的平均值为 Irms2。
P=VFIavg+rdIrms2 ✓ 复现的公式 loss.diode(pytest 用 sympy 验证两者相等)
每个周期,驱动器所取的栅极电荷 Qg 来自其 VGS 电源;从电源取得的能量为 VGSdq 的积分。
EG=0∫QgVGSdq 这些能量最终全部在驱动器与栅极的电阻中转化为热量;再乘以 fs。
P=QgVGSfs ✓ 复现的公式 loss.gate(pytest 用 sympy 验证两者相等)
无阻尼 L-C 回路满足 LCd2v/dt2+v=0;其特征方程为 LCs2+1=0。
1+CnodeLMs2=0 其根为 ±jω0。
ω0=CnodeLM1 f=ω0/(2π)。
fring=2πLMCnode1 ✓ 复现的公式 dcm.ring.f(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/energy.py
磁路的特性类似电阻电路:磁动势 Ni 驱动磁通 Φ 流过磁阻 R=l/(μA)。若有效截面积 Ae 上的磁通密度均匀,则 B=Φ/Ae。
磁芯磁阻(相对磁导率 μi)。
Rc=Aeμ0μile 气隙磁阻(忽略边缘磁通:气隙面积等于 Ae)。
Rg=Aeμ0lg 两者串联。
R=Aeμ0lg+Aeμ0μile 磁链 λ=NΦ=N(Ni/R),因此 L=λ/i=N2/R。
L=RN2 电感系数是每匝平方的电感,AL=L/N2=1/R。
AL=R1 代入两个磁阻。
AL=le+lgμiAeμ0μi=lg+μileμ0Ae ✓ 复现的公式 mag.AL_gap(pytest 用 sympy 验证两者相等)
因此 L=ALN2。
L=ALN2 ✓ 复现的公式 mag.L_from_AL(pytest 用 sympy 验证两者相等)
磁链与电感:λ=NΦ=Li,因此 Φ=Li/N。
在峰值电流处,Bpk=Φpk/Ae=LIpk/(NAe)。
Bpk=NAeLIpk ✓ 复现的公式 mag.B_pk(pytest 用 sympy 验证两者相等)
磁通密度随电流变化,B=Li/(NAe)。围绕直流电流的 ±ΔiL 纹波使磁通密度围绕其直流值变化 ±LΔiL/(NAe):该幅值即 Bac。
Bac=NAeLΔiL ✓ 复现的公式 mag.B_ac(pytest 用 sympy 验证两者相等)
令 Bpk 等于限值 Bmax 并解出匝数,得到不超过该限值的最少匝数。
N=BmaxAeLIpk ✓ 复现的公式 mag.N_Bmax(pytest 用 sympy 验证两者相等)
N 确定后,电感 L=N2/(Rc+Rg) 决定气隙磁阻,从而决定气隙长度。
lg=Lμ0AeN2−μile ✓ 复现的公式 mag.gap_length(pytest 用 sympy 验证两者相等)
选择磁芯。绕组 N 匝、铜截面积为 Aw 的导线只能按比例 Ku 填充窗口 WA:
KuWA=AwN 在极限情况下,其电阻(N 匝,平均匝长 MLT)等于铜损预算 Rdc,max:
Rdc,max=AwMLTNρw 窗口决定导线截面积,Aw=KuWA/N,因此电阻随匝数的平方增大:
Rdc,max=KuWAMLTρwN2 磁通限值决定匝数,N=LIpk/(BmaxAe):
Rdc,max=Ae2Bmax2KuWAMLTρwIpk2L2 将磁芯尺寸归到等式一侧,即定义了磁芯几何常数;另一侧只取决于设计指标。
Kg=MLTWAAe2 磁芯要同时满足磁通限值、窗口和电阻预算,其 Kg 至少应为:
Kg=Bmax2Rdc,maxKuρwL2Ipk2 ✓ 复现的公式 mag.Kg_req(pytest 用 sympy 验证两者相等)
法拉第定律:v=NAedB/dt,因此导通时间内 B 的变化量是 v/(NAe) 的积分。
ΔB=0∫tonAeNVwdt 绕组电压 Vw 恒定时,摆幅与伏秒积 Vwton 成正比。
ΔB=NAeVwton ✓ 复现的公式 mag.dB_faraday(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/magnetics.py
绕组是分层绕制的长导体。其电阻由长度和截面积决定;高频时电流集中到导体表层;绕组之间的磁场储存能量,这部分能量表现为漏感。
绕组是一根导体,共 N 匝,平均匝长为 MLT:
lw=MLTN 其直流电阻等于电阻率乘以长度再除以导体截面积。
Rdc=AwρwNMLT ✓ 复现的公式 wind.dcr(pytest 用 sympy 验证两者相等)
在良导体(电导率 1/ρw)中,正弦电流密度满足 d2J/dx2=jωμ0J/ρw,因此按 e−kx 变化,其中
k2=ρw2πifμ0 实部为正的根:
k=ρwπfμ0+ρwiπfμ0 幅值每经过一个集肤深度减小到原来的 e 分之一,集肤深度即 k 实部的倒数。
δ=πμ0fρw ✓ 复现的公式 wind.skin_depth(pytest 用 sympy 验证两者相等)
Mℓ 层、每层厚 φ 个集肤深度时的 Dowell 交流电阻系数(`wind.dowell`):
FR=φ−cos(2φ)+cosh(2φ)sin(2φ)+sinh(2φ)+cos(φ)+cosh(φ)(−32+32Mℓ2)(−sin(φ)+sinh(φ)) 对于薄层,将双曲函数和三角函数按 φ 的幂展开:直到 φ3 的各项相互抵消,超出部分的首项为四阶。
FR=1−45φ4+9Mℓ2φ4=1+45(5Mℓ2−1)φ4 ✓ 复现的公式 wind.dowell_low(pytest 用 sympy 验证两者相等)
频率给定时集肤深度固定,因此厚 φ 个集肤深度的层,其直流电阻为 Rδ/φ,Rδ 为厚一个集肤深度的层的直流电阻。流过电流 I 时,其损耗为
P=φFRRδI2 相对于厚一个集肤深度、以直流形式流过同一电流的层的损耗 RδI2:
P/Pδ=φFR ✓ 复现的公式 wind.loss_rel(pytest 用 sympy 验证两者相等)
代入薄层的级数展开:
P/Pδ=φ1−45φ4+9Mℓ2φ4 其导数为零处取最小值:
φopt=(5Mℓ2−115)41 ✓ 复现的公式 wind.phi_opt(pytest 用 sympy 验证两者相等)
在该处,交流电阻系数对任意层数都相同:
FR=34 窗口内的磁场沿宽度 bw 方向,因此 H=F/bw,其中 F 为该高度处所包围的磁动势;它在匝长 MLT 上储存的能量为
E=2bwMLTμ0∫F2dy 先一次绕组、后二次绕组:磁动势在一次绕组中线性上升到 NI,在间距中保持不变,在二次绕组中降回零。
F=IN 由 Llk=2E/I2,每个绕组按其高度的三分之一计入,间距则全部计入。
Llk=3bwMLTμ0N2(hp+hs+3hg)=bwμ0N2MLT(3hp+hg+3hs) ✓ 复现的公式 xfmr.leakage.ps(pytest 用 sympy 验证两者相等)
一次绕组分成两半置于二次绕组两侧:磁动势在前一半中上升到 NI/2,穿过二次绕组时从 NI/2 变为 −NI/2,在后一半中回到零。
F=2IN 峰值磁动势减半,因此能量和漏感都降到约四分之一;两处间距都要计入。
Llk=12bwMLTμ0N2(hp+hs+6hg)=4bwμ0N2MLT(3hp+2hg+3hs) ✓ 复现的公式 xfmr.leakage.psp(pytest 用 sympy 验证两者相等)
两个耦合绕组,各有自感,两者之间的互感为 L12:
v1=dtdi1L11+dtdi2L12 以及绕组 2 上:
v2=dtdi1L12+dtdi2L22 将绕组 2 短路使 v2=0,因此其电流与绕组 1 的电流反向变化:
dtdi2=−L22dtdi1L12 此时从绕组 1 看进去的电感为 v1/(di1/dt):
Lsc=L11−L22L122 用耦合系数 k=L12/L11L22(`xfmr.k`)表示:
Lsc=L11(1−k2) ✓ 复现的公式 xfmr.L_sc(pytest 用 sympy 验证两者相等)
在变压器模型中(1:n,励磁电感 LM 与各漏感均折算到一次侧),绕组电感为
L11=LM+Lℓ1 互感为
L12=LMn 以及绕组 2 的电感(其漏感 Lℓ2=n2Lℓ2′):
L22=n2(LM+Lℓ2′) 代入后匝比消去:一次侧漏感,与二次侧漏感和 LM 的并联相串联。
Lsc=Lℓ1+Lℓ2′+LMLℓ2′LM ✓ 复现的公式 xfmr.L_sc_T(pytest 用 sympy 验证两者相等)
绕组 2 开路时其中无电流(di2/dt=0),两电压之比为
V2/V1=L11L12 在变压器模型中:略低于匝比,因为一次侧漏感分担了一部分电压。
V2/V1=Lℓ1+LMnLM ✓ 复现的公式 xfmr.V_oc(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/windings.py
绕组是并联了匝间电容的电感。阻抗测量仪将测得的电抗除以 ω,并将结果显示为电感。
电感与电容并联:
Z=iCpω−Lωi1 它是纯电抗,
Z=−−1+CpLω2iLω 因此仪表读出的电感为 Z/(jω):
Lapp=−−1+CpLω2L 用自谐振频率(`passive.f_srf`)表示,得 ω2LCp=(f/fsrf)2:
fsrf=2πCpL1 代入 ω=2πf:
Lapp=−f2−fsrf2Lfsrf2=1−(fsrff)2L ✓ 复现的公式 meas.L_app(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/measurement.py
线性能量源用其戴维南等效电路建模:开路电压 Voc 串联源内阻 Rs。其可用功率有多少到达变换器,取决于变换器输入端呈现的特性。
送入负载电阻 RL 的功率。
PL=(RL+Rs)2RLVoc2 由 dPL/dRL=0 得到匹配负载。
代入 RL=Rs。
Pmax=4RsVoc2 ✓ 复现的公式 src.Pmax(pytest 用 sympy 验证两者相等)
电压为 Vc 的恒压负载(例如输入被固定在某一电压的变换器)汲取电流 I=(Voc−Vc)/Rs。
I=RsVoc−Vc 其吸收的功率:当 Vc>Voc 时为负,此时负载将能量回馈给源。
P=RsVc(Voc−Vc) ✓ 复现的公式 src.cv_power(pytest 用 sympy 验证两者相等)
以 Pmax 归一化。
ηext=Voc24Vc(Voc−Vc) ✓ 复现的公式 src.cv_extraction(pytest 用 sympy 验证两者相等)
工作在 DCM 的变换器汲取的平均输入电流与其输入电压成正比:其输入端相当于电阻 Rin,即无损电阻,它取代 RL 的位置。
源内阻与 Rin 对源电压分压。
Vg=Rs+RinVocRin ✓ 复现的公式 lfr.Vg(pytest 用 sympy 验证两者相等)
在 PL 中令 RL=Rin,并以 Pmax 归一化:源电压被消去。
ηext=(Rs+Rin)24RsRin ✓ 复现的公式 lfr.eta(pytest 用 sympy 验证两者相等)
无损电阻吸取的功率等于一个电阻在其输入电压下消耗的功率。
P=RinVg2 解出 Vg:功率越大,所需输入电压越高。
Vg=PRin ✓ 复现的公式 lfr.Vg_power(pytest 用 sympy 验证两者相等)
DCM 反激变换器的输入电阻为 Rin=2LMfs/D2(在反激变换器部分推导)。
Rin=D22LMfs 解出 LM:即呈现所需 Rin 的电感,例如为与源匹配而取 Rs。
LM=2fsRinD2 ✓ 复现的公式 lfr.L_M(pytest 用 sympy 验证两者相等)
包络相对母线变化缓慢时,无损电阻每一时刻吸取 ηextVoc2/(4Rs);取 Voc(t)=V^ocsin(πt/Tenv),即包络的一个半波(整流后的正弦波重复这一半波)。
P=4RsηextV^oc2sin2(Tenvπt) 在半波内取平均:正弦波平方的平均值为其峰值平方的一半。
Pˉ=8RsηextV^oc2 ✓ 复现的公式 lfr.P_env(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/harvesting.py
在幅值恒定的稳态正弦振动下,压电元件等效为电流源 Ipsinωt 与其夹持电容 C0 并联。负载或接口电路取得多少能量,取决于每个半周期内该电流的电荷流向何处。
未接任何电路时,全部电流为 C0 充电:v=C01∫Ipsinωtdt。
v=−C0ωIpcos(ωt) 其幅值。
Vp=ωC0Ip ✓ 复现的公式 piezo.Vp(pytest 用 sympy 验证两者相等)
并接在元件两端的电阻 R 与 C0 分流:其电压幅值为 Ip∣R∥1/(jωC0)∣,电阻吸收的功率为该幅值平方的一半除以 R。
P=2(1+C02R2ω2)RIp2 dP/dR=0。
R=ωC01 ✓ 复现的公式 piezo.R_opt(pytest 用 sympy 验证两者相等)
将其代入。
P=4ωC0Ip2 ✓ 复现的公式 piezo.P_R(pytest 用 sympy 验证两者相等)
源在每个半周期内,即位移的两个极值之间,输送 2Ip/ω 的电荷。
q=ω2Ip 经全波整流桥接到 VDC 时,元件电压须从 −VDC 摆到 VDC,整流桥才导通,这需要 2C0VDC 的电荷;其余电荷流入 VDC。
E1/2=VDC(−2C0VDC+ω2Ip) 折算到单位时间:每 π/ω 一个这样的半周期。
P=π2IpVDC−π2C0ωVDC2=π2VDC(Ip−ωC0VDC) ✓ 复现的公式 piezo.P_std(pytest 用 sympy 验证两者相等)
dP/dVDC=0:开路电压幅值的一半。
VDC=2C0ωIp 将其代入。
Pstd,max=2πωC0Ip2 ✓ 复现的公式 piezo.P_std_max(pytest 用 sympy 验证两者相等)
SECE 在两个极值之间使元件开路,因此其电压从零升到 2Ip/(ωC0);在极值处取走全部 21C0v2,与负载无关。
E1/2=C0ω22Ip2 折算到单位时间。
P=πωC02Ip2 ✓ 复现的公式 piezo.P_sece(pytest 用 sympy 验证两者相等)
并联 SSHI 在每个极值处将元件电压从 ∓VDC 翻转到 ±γVDC,因此摆向另一侧电源轨只需 (1−γ)C0VDC 的电荷。
E1/2=VDC(−C0VDC(1−γ)+ω2Ip) 折算到单位时间。
P=π2IpVDC−πC0ωVDC2+πC0γωVDC2=π2VDC(Ip−2ωC0VDC(1−γ)) ✓ 复现的公式 piezo.P_sshi(pytest 用 sympy 验证两者相等)
dP/dVDC=0。
VDC=C0ω(1−γ)Ip 将其代入。
PSSHI,max=πωC0(1−γ)Ip2 ✓ 复现的公式 piezo.P_sshi_max(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/piezo.py
电流输出型高侧监控器将分流电阻两端的小电压转换为电流,再由输出电阻将该电流转换回以地为参考的电压。
分流电阻两端的欧姆定律:这一电压既是信号,也是分流电阻从被测电路中占去的电压。
VSENSE=ISENSERSENSE ✓ 复现的公式 sense.burden(pytest 用 sympy 验证两者相等)
理想放大器迫使 RIN 两端出现相同的电压,因此流过 RIN 的电流为 VSENSE/RIN。
IOUT=RINVSENSE 该电流经 ROUT 流出:VOUT=IOUTROUT。
VOUT=RINISENSERSENSEROUT ✓ 复现的公式 sense.current_out_monitor(pytest 用 sympy 验证两者相等)
电压输出型放大器将检测电压乘以固定增益 G,再加上 REF 引脚上的电压,该电压决定电流为零时的输出。
VOUT=GISENSERSENSE+VREF ✓ 复现的公式 sense.voltage_out_monitor(pytest 用 sympy 验证两者相等)
输入失调电压直接叠加在检测电压上,因此两种放大器的输出所读出的电流均为
Imeas=RSENSEVOS+ISENSERSENSE 无论电流多大,读数都比实际电流大出失调电压除以检测电阻的值。
IOS,eq=RSENSEVOS ✓ 复现的公式 sense.offset_current(pytest 用 sympy 验证两者相等)
没有开尔文连接时,检测连接点位于焊盘和焊点之外,其电阻 Rpad 流过同一电流;按 RSENSE 换算的读数为
Imeas=RSENSEISENSE(RSENSE+Rpad) 其相对误差:与电流无关,分流电阻越小,误差越大。
εpad=RSENSERpad ✓ 复现的公式 sense.pad_error(pytest 用 sympy 验证两者相等)
两者同时存在时,放大器检测到 ISENSE(RSENSE+Rpad)+VOS,并将其读作流过 RSENSE 的电流。输出等于输出方程在该电流下的值;使输出升高的失调符号给出输出上限,另一符号给出下限。
Imeas=RSENSEVOS+ISENSE(RSENSE+Rpad)=RSENSEISENSE(RSENSE+Rpad)+RSENSEVOS ✓ 复现的公式 sense.reading(pytest 用 sympy 验证两者相等)
其相对误差为两者之和,无交叉项:失调所占部分按 1/ISENSE 减小,焊盘所占部分不变。
εI=ISENSERSENSEVOS+ISENSERpad=ISENSERSENSEVOS+RSENSERpad ✓ 复现的公式 sense.rel_error(pytest 用 sympy 验证两者相等)
电流输出型放大器在节点 A 将其电流 IOUT 注入 ROUT。其后接 R-C 滤波器:Rf 接在节点 A 与节点 B 之间,Cf 接在节点 B 与地之间,节点 B 上无其他负载。节点 A 的电流平衡(拉普拉斯域):
IOUT=RfVA−VB+ROUTVA 以及节点 B:
RfVA−VB=VBsCf 解出电容电压,得到单个极点;直流时输出仍为 IOUTROUT:
IOUTVB=1+sCfROUT+sCfRfROUT 该极点的时间常数为 Cf(ROUT+Rf):从电容看进去是 ROUT 与 Rf 串联。ROUT 是其所接电流源的戴维南电阻。
Rfilt=ROUT+Rf ✓ 复现的公式 sense.filter_R(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/sensing.py
由电感和电容的伏安关系、一阶电路的阶跃响应、栅极电阻上的欧姆定律、串联热路以及 Rint 电池模型得到的结果,以实验台上使用的形式给出。
电感两端的电压与其电流的变化率成正比:
v=Lloopdtdi(t) 变化量为 ΔI、在边沿 tedge 内线性变化的电流,其变化率恒定:
dtdi(t)=tedgeΔI 因此在整个边沿期间,回路电感上产生的电压为
Vspike=tedgeLloopΔI ✓ 复现的公式 layout.v_spike(pytest 用 sympy 验证两者相等)
关断边沿之后,回路电感与开关节点电容构成串联 L-C 并产生振铃,其频率为
fring=2πCnodeLloop1 因此由振铃频率可得回路电感:
Lloop=4π2fring2Cnode1 ✓ 复现的公式 layout.L_ring(pytest 用 sympy 验证两者相等)
漏极电压跳变期间,栅极保持在平台电压 Vpl。驱动器将其输出切换到 VGS(开通)或 0(关断),与栅极之间隔着栅极回路电阻 RG,因此根据欧姆定律,此期间栅极电流恒定:
开通时
IG=RGVGS−Vpl ✓ 复现的公式 gate.I_on(pytest 用 sympy 验证两者相等)
以及关断时
IG=RGVpl ✓ 复现的公式 gate.I_off(pytest 用 sympy 验证两者相等)
恒定电流以恒定速率输送电荷:
因此平台期(栅极在此期间吸收栅漏电荷 QGD)的持续时间为
tpl=IGQGD ✓ 复现的公式 gate.t_pl(pytest 用 sympy 验证两者相等)
电容的电荷等于电容量乘以电压,因此提供电荷 Qboot 会使其电压降低
ΔVboot=CbootQboot 要使电压跌落不超过 ΔVboot,电容至少应为
Cboot=ΔVbootQboot ✓ 复现的公式 boot.C(pytest 用 sympy 验证两者相等)
单极点系统对单位阶跃的响应为
y=1−e−τt 它到达终值的 10 % 和 90 % 的时刻为
(t10=τln(910), t90=τln(10)) 因此其 10-90 % 上升时间为
trise=2τln(3) 其 -3 dB 带宽为同一极点的转折频率:
fBW=2πτ1 消去 τ:
trise=πfBWln(3)=2πfBWln(9) ✓ 复现的公式 probe.t_rise(pytest 用 sympy 验证两者相等)
探头尖端与接地线构成的回路电感和探头输入电容组成串联 L-C;无损耗时其电流 i 满足
Lgnddt2d2i(t)+Cprobei(t)=0 其解的振铃角频率为
ω0=CprobeLgnd1 即频率为
fprobe=2πLgndCprobe1 ✓ 复现的公式 probe.f_ring(pytest 用 sympy 验证两者相等)
未充电的电容经串联电阻接入阶跃电压 Vg,其充电电流为
i=RserVge−CinRsert 该电流在阶跃瞬间最大,此时电容两端电压为零:
Iinrush=RserVg ✓ 复现的公式 inrush.I_pk(pytest 用 sympy 验证两者相等)
其平方在整个脉冲上的积分为
I2t=2RserVg2Cin ✓ 复现的公式 inrush.I2t(pytest 用 sympy 验证两者相等)
电容电流等于电容量乘以其电压的变化率:
i=Cindtdv(t) 因此电压从零线性上升到 Vg、历时 tramp 时,电流恒定:
Iramp=trampCinVg ✓ 复现的公式 inrush.I_ramp(pytest 用 sympy 验证两者相等)
热阻是热流路径中某一段上每瓦流经功率对应的温差。器件的全部功率依次从结流到外壳、从外壳流到散热器、再从散热器流到环境时,
(TJ−TC=PDθJC, TC−TS=PDθCS, TS−TA=PDθSA) 各段温升从环境温度起逐级相加:
TJ=TA+PD(θJC+θCS+θSA) ✓ 复现的公式 therm.Tj(pytest 用 sympy 验证两者相等)
Rint 模型为开路电压串联内阻;充电电流经内阻流入正极端子(`bat.rint`):
Ib=RbV−Vb 因此端电压为
V=Vb+IbRb ✓ 复现的公式 bat.v_term(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/bench.py
仿真器按时间步长逐步计算电路的状态。在一个时间步长内,开关变换器是电源恒定的线性电路;一阶电路的例子表明,这样的电路可以逐步精确计算。常用的积分方法在一个衰减模态上比较,即试验方程(test equation),每种方法在每一步都将偏差乘以一个固定因子。随后由输出滤波器振铃的包络得出:从零初始状态开始的仿真需要多少个开关周期,其最后几个周期才能呈现稳态。
在一个时间步长内,电路是线性的,电源恒定。于是经电阻充电的电容趋近电压 v∞,其速率等于剩余差值除以时间常数 τ:
dtdv(t)=τv∞−v(t) 以该步起点的电压 v0 为初值求解:
v(t)=v∞+(v0−v∞)e−τt 在该步终点,t=Δt。此处未作任何近似,因此步长可以与整个区间一样长:
v1=v∞+(v0−v∞)e−τΔt ✓ 复现的公式 sim.exact_step(pytest 用 sympy 验证两者相等)
单独取一个衰减模态来比较常用方法:即电路偏离其趋向值的偏差 x,其变化率为 −x/τ(试验方程)。某种方法将其从 x0 计算到 x1,历经 Δt,则每一步都将其乘以因子 g=x1/x0:
dtdx(t)=−τx(t) 前向欧拉法(forward Euler)取该步起点的斜率:
x1=x0−τx0Δt 其每步的因子:
gFE=1−τΔt ✓ 复现的公式 num.gain_fe(pytest 用 sympy 验证两者相等)
梯形法(trapezoidal rule)取该步两端斜率的平均值,因此 x1 出现在等式两边:
x1=x0+2Δt(−τx0−τx1) 解出 x1,再除以 x0:
gTR=−Δt+2τΔt−2τ=1+2τΔt1−2τΔt ✓ 复现的公式 num.gain_tr(pytest 用 sympy 验证两者相等)
后向欧拉法(backward Euler)取该步终点的斜率:
x1=x0−τx1Δt 其每步的因子:
gBE=Δt+ττ=1+τΔt1 ✓ 复现的公式 num.gain_be(pytest 用 sympy 验证两者相等)
步长远大于 τ 时,即对于刚性(stiff)模态,精确因子 e−Δt/τ 接近零。前向欧拉法的因子无限增大;梯形法的因子趋于 −1,因此该模态大小不变而每步变号;后向欧拉法的因子则与精确因子一样趋于零:
(Δt→∞lim(−Δt+2τΔt−2τ)=−1, Δt→∞lim(Δt+ττ)=0) 后向欧拉法用该步终点的斜率计算电感电流,即电感两端电压 vL,1 除以电感:
i1=i0+LvL,1Δt 二极管关断之前,其电流已越过零点,到达 −Ios。若没有其他支路承接该电流,下一步结束时电流必须为零:
0=−Ios+LvL,1Δt 解出该步中电感两端的电压:
vjump=ΔtLIos ✓ 复现的公式 sim.step_jump(pytest 用 sympy 验证两者相等)
取一个由理想元件构成的降压变换器。电源置零时(电压源视为短路),滤波器的电感、电容与负载电阻并联。该并联 RLC 电路的固有响应按 est 变化,s 为其特征方程的根:
CL1+CRs+s2=0 滤波器振铃时,两根为一对共轭复数。它们的公共实部即两根之和的一半,为 −α;α 是振铃包络的衰减率,即奈培频率(neper frequency):
α=2CR1 包络按 e−αt 衰减,时间常数为 1/α,与电感无关(理想元件):
τenv=2RC ✓ 复现的公式 filter.tau_env(pytest 用 sympy 验证两者相等)
从零初始状态开始的仿真,初始误差与稳态值本身一样大。经过 N 个开关周期后,误差衰减为初始值的 εr 倍:
εr=e−τenvNTs 解出 N:
Nset=−Tsτenvln(εr)=Tsτenvln(εr1) ✓ 复现的公式 sim.periods_settle(pytest 用 sympy 验证两者相等)
推导脚本:python/pe_core/derive/numerics.py