第 05 讲 / 共 09 讲 · 建模与仿真
下垂构网型控制
功率偏差如何形成电压角度?
从一个实际问题出发
功率偏差如何形成电压角度?
调度将 P* 提高 0.03 pu。GFM 电压源无法直接指定端口功率:它必须先改变频率,再推进角度,由网络传输更多功率。本讲沿着这条闭环解释 droop。
学完本讲,你应该能够…
- 解释 P–f 与 Q–V 反馈链路。
- 识别标准 13 状态模型的组成。
05.01 机理与推导
功率闭环由网络完成
三状态实现保留 δ、P_f、Q_f。有功滤波偏差设定频率,无功滤波偏差设定电压幅值,再通过积分频率形成内部源角度。内部电压 U = Ee^{jδ} 位于 Z_f = 0.00625 + j0.1 pu 后方。
正 P* 阶跃发生后,P_f 不能突变,因此频率先升高,角度向前移动,网络传输功率增加,滤波量随后跟上。指令是功率改变的原因,并不直接赋值给实际功率轨迹。
\tau_p\dot P_f=P_{PoC}-P_f,\qquad\tau_q\dot Q_f=Q_{PoC}-Q_f\omega=1-m_p(P_f-P^*),\quad E=E_0-n_q(Q_f-Q^*),\quad\dot\delta=\omega_b(\omega-\omega_g)I=\frac{Ee^{j\delta}-V}{Z_f},\qquad P+jQ=VI^*05.02 机理与推导
区分端口目标与控制指令
在额定频率锁定的稳态,P_f = P*。无功匹配则更容易被忽视:内部源幅值必须支撑 Z_f 上的电压降。如果 E₀ 固定为 1,即使端口 Q 为零,也需要用 Q* 补偿所需幅值。
SCR = 5 时,默认匹配得到 Q* 约为 0.316795 pu,而 PoC Q = 0。这是控制器偏置。强行让所有控制器使用相同原始 Q*,会悄悄改变工作点,使比较失去基础。
05.03 机理与推导
频率扰动揭示稳态斜率
新的锁定稳态中,内部频率等于电网频率。整理 droop 规律得到 P = P* − (ω_g − 1)/m_p。在 50 Hz 下,+0.1 Hz 等于 +0.002 pu;m_p = 0.02 时,预期功率变化为 −0.1 pu。
同一 m_p 也改变暂态环路增益。当 τ_p = 0.1 s、τ_q = 0.05 s 固定时,峰值与阻尼的变化还反映了网络、滤波和控制的交互。只知道稳态斜率,无法确定暂态形状。
05.04 机理与推导
问题需要时,再恢复级联内环
完整实现设置 v* = [E,0],由电压 PI、输出电流前馈和电容解耦生成 i₁*,再由电流 PI 生成 LCL 的输入 u。F 为输出电流前馈增益,K_p、K_i 表示相应 PI 参数。六个电气状态、四个积分、两个功率滤波与一个角度,共 13 个状态。
源仓库的 canonical 模型用 v_c 与 i₂ 计算滤波功率,而 benchmark 输出在 PoC 重建;浏览器教学实验则特意采用 PoC 反馈。复现完整模型时,应保留原测量端口,并将 PI 积分初始化为支撑稳态电压、电流所需的数值。零跟踪误差并不意味着积分状态为零。
在未触发限幅、且电压和电流误差为零的稳态,将两条 PI 方程反解为积分状态,得到下式。这些非零偏置用于支撑所需电容电流与变流器电压。若将积分设为零,原本的稳态比较就会混入不必要的启动暂态。
e_v=v^*-v_c,\quad\dot\xi_v=e_v,\quad i_1^*=F i_2-\omega_b\omega cJv_c+K_{pv}e_v+K_{iv}\xi_ve_i=i_1^*-i_1,\quad\dot\xi_i=e_i,\quad u=v_c-\omega_b\omega\ell_1Ji_1+K_{pi}e_i+K_{ii}\xi_i\xi_v=\frac{i_1-Fi_2+\omega_b\omega cJv_c}{K_{iv}},\qquad\xi_i=\frac{u-v_c+\omega_b\omega\ell_1Ji_1}{K_{ii}}把推导变成数量判断
把案例算清楚
设 P* = 0.6 pu、m_p = 0.02,电网从 50 升至 50.1 Hz。预测锁定后的稳态功率。
- 标幺频率升幅为 0.1/50 = 0.002。
- droop 导致的功率降幅为 0.002/0.02 = 0.1 pu。
- 从指令 0.6 pu 中减去这一降幅。
预测锁定功率为 0.5 pu。这个计算以本模型能够到达新稳态为前提。
从预测走向证据
功率通过角度运动改变
+0.03 pu 的 P* 阶跃先产生频率偏差,再提高传输功率;暂态体现滤波与网络反馈。
- 指令阶跃时,滤波功率不能突变,因此频率先改变。
- 源角度前移,通过网络提高功率,测量功率随后反馈。
- 额定频率稳态要求 P = P*,但需要核对观察窗口是否已足够长。
你的实验任务
- 运行 +0.03 pu P* 阶跃,观察频率并解释为何它先变化。
- 检查匹配后的 Q*,与初始测量 Q 比较。
- 施加 +0.1 Hz,比较最终 P 变化与 −0.1/(50 m_p)。
实验室 · Python 在浏览器内运行
预测 → 运行 → 检查
先预测响应,再修改参数并点击运行。初始曲线是由同一求解器生成的基准结果。首次计算需要联网加载 Python,之后无需重新下载。
正在读取基准结果…
数值检查与采样结果
低频教学模型:额定频率代数网络、理想电流 / 电压实现。50 Hz,10 kVA,400 V;PCC 初始总 P = 0.6、Q = 0;X/R = 10。τᵢ = 0.02 s,τₚ = 0.1 s,τq = 0.05 s,nq = 0.0325;GFM 源阻抗 0.00625 + j0.1 pu。未保留 LCL、内部 PI、直流动态或限流。
检查推理,再形成判断
你能解释,也能算对吗?
本讲的工程判断
用一次功率指令阶跃和一次频率阶跃,区分暂态机理与稳态斜率;解释为什么该 droop 同步规律不需要 PLL。
复现与拓展
把证据带回你的模型
核心方程速查
\tau_p\dot P_f=P_{PoC}-P_f,\qquad\tau_q\dot Q_f=Q_{PoC}-Q_f\omega=1-m_p(P_f-P^*),\quad E=E_0-n_q(Q_f-Q^*),\quad\dot\delta=\omega_b(\omega-\omega_g)I=\frac{Ee^{j\delta}-V}{Z_f},\qquad P+jQ=VI^*e_v=v^*-v_c,\quad\dot\xi_v=e_v,\quad i_1^*=F i_2-\omega_b\omega cJv_c+K_{pv}e_v+K_{iv}\xi_ve_i=i_1^*-i_1,\quad\dot\xi_i=e_i,\quad u=v_c-\omega_b\omega\ell_1Ji_1+K_{pi}e_i+K_{ii}\xi_i\xi_v=\frac{i_1-Fi_2+\omega_b\omega cJv_c}{K_{iv}},\qquad\xi_i=\frac{u-v_c+\omega_b\omega\ell_1Ji_1}{K_{ii}}打开 Python 实验与模型源码
代码读取上方实验参数,结果独立绘制。修改实验或展开模型源码,检验自己的预测。下载实验可得到含参数、完整求解器与实验的单个 .py 文件,本地只需 Python 3。
case 是点击运行时的参数快照。调用 solve(case),将最终解赋给 result,即可绘制代码结果。
首次运行需联网下载 Python 环境。计算在浏览器内完成,求解器只用 Python 标准库。
准备运行。
输出将在这里显示。
Python 计算结果
查看并编辑模型源码(进阶)
修改源码影响下次 Python 实验;上方实验继续使用原始教学方程。
对应的源仓库材料与模型范围
基于 PINN-IBR 本地材料整理,审阅日期 2026-10-03。网页采用独立教学实现;低频模型保留额定频率代数网络与理想执行器。下列材料用于继续研究完整模型。
Coding/Modeling/src/ibrsim/models/droop_gfm.pyCoding/Modeling/Single-IBR-Infinite-Bus/00_Droop_GFM_Infinite_Bus_Model_Library.ipynb
下一步
droop 以代数方式设定频率。下一讲增加速度状态,研究虚拟惯量改变了什么,以及还有哪些问题需要额外证据。