双向DC-AC变换器电压稳定控制与能量流仿真系统 (README)
项目简介
本项目是一个基于MATLAB脚本(纯代码实现,不依赖Simulink图形化模块)开发的低压双向DC/AC变换器仿真系统。该系统在离散时间域内模拟了单相全桥变换器在整流与逆变模式下的运行特性。通过构建包含物理电路模型、双闭环控制策略以及SPWM调制算法的完整数学模型,不仅验证了控制算法在维持直流母线电压稳定方面的有效性,还模拟了系统在负载突变情况下的动态响应与能量双向流动特性。
功能特性
- 纯脚本仿真架构:完全脱离Simulink图形界面,仅使用MATLAB基础语言实现主元器件物理建模与控制逻辑,便于深入理解算法底层原理与离散化过程。
- 双闭环控制策略:
*
电压外环:使用PI控制器监测直流母线电压,消除稳态误差,输出指令电流幅值。
*
电流内环:结合电网电压前馈的PI控制,实现对网侧正弦电流的无静差跟踪,不仅控制功率因数,还提升了系统动态性能。
- SPWM调制技术:内建自定义三角载波生成器与脉宽调制逻辑,模拟真实控制器中的单极性或双极性调制过程。
- 物理电路离散化模型:基于欧拉法(Euler Method)建立L滤波电感与DC储能电容的微分方程离散模型,模拟真实的电压/电流变化率。
- 抗扰动能力测试:内置负载阶跃扰动模拟(默认0.15秒时刻),用于测试系统的电压恢复能力与鲁棒性。
- 多维度数据可视化:提供直流电压响应、交流侧波形对比、功率流向监测以及电流谐波(THD)频谱分析。
系统要求
- MATLAB R2016b 或更高版本。
- 不需要额外的工具箱(如Simscape或Power Systems),所有模型均为数学方程原生实现。
代码核心逻辑说明 (基于main.m)
该脚本采用固定步长迭代(Time-Stepping)的方式进行时域仿真。
1. 参数初始化
脚本首先定义了系统的物理与控制参数:
- 电网侧:220V RMS / 50Hz 单相交流电。
- 主电路:L型滤波器(3mH, 包含内阻),直流母线电容(2200uF)。
- 负载:初始100欧姆,在0.15秒时突变为50欧姆以模拟重载扰动。
- 控制器:开关频率10kHz,双PI参数配置,目标直流电压设定为400V。
2. 仿真主循环 (离散时间迭代)
程序在
for 循环中逐点计算系统状态,模拟真实的数字控制流程:
A. 环境生成
- 根据仿真时间计算电网相位 $theta$ 和瞬时网侧电压 $v_g$。
- 判断当前时间是否由于过负载突变点,进而切换负载电阻值 $R_{load}$。
B. 双闭环控制计算
- 电压外环:计算 $V_{dc_ref} - V_{dc}$ 误差,通过PI控制器计算并输出有功电流参考幅值。代码中加入了 $pm50A$ 的限幅保护。
- 参考电流合成:将电流幅值与电网相位正弦值相乘,生成与电网电压同相的瞬时电流指令 $i_{ref}$,以实现单位功率因数控制。
- 电流内环:计算 $i_{ref} - i_L$ 误差,通过PI控制器调节,并叠加电网电压前馈量 $v_g$,生成最终的控制电压信号 $u_{control}$。
C. SPWM 调制
- 计算调制指数 $m_{idx}$(归一化到-1至1),并限制最大调制深度为0.95。
- 载波生成:通过代码逻辑模拟三角波发生器,产生在 -1 到 1 之间震荡的载波信号。
- PWM比较:将调制波与载波比较,确定IGBT开关状态。如果调制波大于载波,输出 $+V_{dc}$,否则输出 $-V_{dc}$。
D. 物理电路求解
- AC侧方程:根据 $L frac{di}{dt} = v_g - iR - v_{pwm}$,利用欧拉法更新电感电流 $i_L$。
- DC侧方程:根据开关状态确定流入直流侧的电流 $i_{dc_in}$(能量守恒),结合负载电流 $i_{load}$,利用 $C frac{dv}{dt} = i_{dc_in} - i_{load}$ 更新直流母线电压 $V_{dc}$。
3. 结果记录与处理
- 仿真过程中采用下采样策略(每10个点记录一次)以降低内存消耗。
- 记录包括电网电压、电感电流、直流电压、PWM状态以及瞬时功率。
结果可视化
脚本运行结束后会自动生成包含四个子图的分析窗口:
- 直流母线电压响应:展示电压从启动到稳定的过程,以及在0.15秒负载突变时电压跌落与恢复的动态曲线,验证电压外环的调节能力。
- 交流侧电压与电流:双Y轴绘制。展示网侧电压与电流的波形,重点观察电流是否跟随电压相位(功率因数)以及波形的光滑度。
- 有功功率流向:展示系统瞬时功率的变化,直观反映能量传输的波动与稳态值。
- 网侧电流频谱分析:对仿真最后两个周期的电流波形进行FFT变换,计算并标注总谐波失真(THD)数值,评估电能质量。
使用方法
- 确保MATLAB已正确安装。
- 将
main.m 文件放置在工作目录中。 - 在MATLAB命令行窗口输入
main 并回车,或直接点击运行按钮。 - 等待控制台输出 "仿真开始..." 及 "仿真完成..." 提示。
- 不仅可以查看弹出的波形图,还可以直接在工作区分析
v_dc_arr, i_grid_arr 等数据变量。