三相逆变器双闭环控制系统多负载仿真
项目简介
本项目实现了一个基于MATLAB脚本的三相电压源逆变器(VSI)全系统仿真模型。不同于依赖Simulink图形化模块的仿真,本项目通过编写main.m脚本,底层实现了物理系统的离散化微分方程求解与数字控制算法。系统采用电压外环和电感电流内环的双闭环控制架构,在旋转坐标系(dq轴)下实现对输出电压幅值和相位的精确跟踪。仿真涵盖了阻性、感性(RL)及容性(RC冲击)三种负载工况的动态切换,用于验证控制算法的鲁棒性和不同负载下的稳压性能。
功能特性
- 全代码物理建模:不依赖Simulink工具箱,基于欧拉法(Euler Method)手动求解电路微分方程,模拟逆变器、LC滤波器及负载的物理行为。
- 双闭环控制策略:
*
电压外环:控制负载电压有效值,生成电流参考指令,包含积分限幅(Anti-windup)。
*
电流内环:快速跟踪电感电流,包含dq轴解耦前馈控制,提高动态响应。
*
阶段一:纯阻性负载稳态运行。
*
阶段二:并联感性负载(RL),模拟电机启动或功率因数滞后场景。
*
阶段三:突加容性负载,通过瞬间增大系统电容值模拟非线性电流冲击或整流负载特性。
- 数字控制模拟:模拟真实DSP/MCU行为,控制回路以低于物理仿真步长的开关频率(10kHz)触发运行,包含锁相、坐标变换及SPWM波形生成。
系统要求
- MATLAB R2018b 或更高版本
- 无需额外的Simulink工具箱(基于纯MATLAB语言开发)
使用方法
直接运行主函数即可启动仿真。程序将依次初始化参数、分配内存、进入时间步进循环,并最终生成涵盖电压、电流及控制中间变量(dq轴分量)的数据记录。
main.m 核心功能与代码逻辑分析
该脚本是仿真的核心引擎,涵盖了系统参数定义、控制器实现、物理对象建模以及数据记录四个主要部分。以下是代码的详细逻辑解析:
1. 系统参数定义
代码首先定义了完整的电气与控制参数:
- 电源与拓扑:定义直流母线电压为700V,电网频率50Hz,开关频率10kHz。物理仿真步长设定为1微秒以保证高精度,通过LC滤波器参数(3mH电感,50uF电容)构建输出滤波网络。
- 负载配置:预设了三种负载参数,包括基础电阻R1,后续并入的RL支路(R2+L2),以及用于模拟冲击的大电容C3。
- 控制器增益:分别为电流内环和电压外环配置了PI参数。电流环带宽较高(Kp=10),电压环响应相对较慢(Kp=0.5),符合级联控制的设计准则。
2. 初始化与预分配
在进入仿真循环前,脚本初始化了所有状态变量:
- 物理状态:三相负载电压、逆变器侧电感电流、负载电流以及RL负载支路的内部电流状态均初始化为零向量。
- 控制状态:初始化PI控制器的积分项存储变量。
- 内存优化:为了提高运行效率,对日志记录数组进行了预分配(Log_Time, Log_Va等)。
3. 主循环仿真 (时间步进推进)
仿真采用固定步长循环(1e-6s),主要由三个核心逻辑块组成:
#### A. 负载动态调度逻辑
根据当前仿真时间t,代码实现了负载类型的自动切换:
- 0 - 0.05s:仅接入电阻R1。
- 0.05 - 0.1s:在R1基础上并联RL支路,模拟感性负载突加。
- 0.1s - 结束:模拟电容C3并入系统,测试系统对容性冲击的反应。
#### B. 数字控制回路 (模拟中断)
控制算法并非每一步都执行,而是通过取模运算
mod模拟开关频率(10kHz)触发的中断机制:
- 坐标变换:利用理想PLL生成的相位
theta,将三相电压和电流从静止坐标系(abc)变换到同步旋转坐标系(dq)。 - 电压环控制:比较参考电压(d轴设为311V峰值,q轴设为0)与实际反馈电压。误差经过PI调节和限幅后,生成内环电流参考值
i_d_ref和i_q_ref。部分包含了电流参考的限幅保护。 - 电流环控制:比较参考电流与实际电感电流。误差经过PI调节后,叠加解耦前馈项。代码中明确实现了如下解耦逻辑:
* d轴输出叠加
v_d - w * L * i_q
* q轴输出叠加
v_q + w * L * i_d
- 调制波生成:将电流环输出的d、q轴电压通过逆Park变换还原为abc三相控制电压,并除以直流母线电压的一半进行归一化,生成范围在[-1, 1]之间的占空比信号
d_abc。
#### C. 物理系统离散化模型
在每个仿真步长内,利用欧拉法离散化求解电路微分方程,模拟物理对象的响应:
- 逆变桥模型:采用平均值模型,根据占空比计算桥臂输出电压,忽略了高频开关谐波,侧重于系统的基波动态响应。
- 负载电流计算:
* 对于阻性负载,直接应用欧姆定律。
* 对于感性负载(RL),引入了额外的微分方程状态更新,计算电感支路的电流动态。
* 对于容性负载,并未直接计算电容电流,而是通过修改系统总电容值(Cf + C3)来改变电压更新方程的参数。
*
电感电流更新:根据 $L frac{di}{dt} = V_{inv} - V_{load} - R_{parasitic} i$ 更新逆变器输出电流。
*
电容电压更新:根据 $C frac{dv}{dt} = I_{inv} - I_{load}$ 更新负载电压。代码中根据不同负载阶段动态调整电容值 $C$,当处于容性负载阶段时,使用更大的电容值来模拟并联效应。
4. 关键算法实现细节
- Park/Clarke变换:代码中封装了
abc2dq和dq2abc函数,实现了静止坐标系到旋转坐标系的转换,使得交流量变为直流量进行PI控制。 - 前馈解耦控制:在电流环中显式加入了解耦项,抵消了电感在旋转坐标系下的耦合电压($ omega L i $),实现了d轴和q轴电流的独立控制。
- 积分限幅:在PI控制器代码中,对积分器的累加值进行了
limit_val处理,有效防止了系统在大误差(如负载突变/启动时)下的积分饱和现象。