基于Simulink原理的异步电机数字PWM控制系统仿真
项目简介
本项目利用MATLAB脚本(非Simulink图形化界面)底层实现了一个完整的异步电机交流调速系统仿真。项目严格遵循陈伯时《电力电子与运动控制》教材中的经典理论,模拟了从数字控制器采样、矢量控制算法运算、PWM脉宽调制到电机物理模型动态响应的全过程。
系统采用转子磁场定向矢量控制(FOC)策略,配合SPWM(正弦脉宽调制)技术,实现了对三相异步电机转速和电流的高精度双闭环控制。代码完全基于数学方程构建,独立实现了四阶Runge-Kutta求解器,不依赖Simulink工具箱,适合深入理解电机控制底层算法与离散化系统特性。
主要功能特性
- 纯代码实现的数学模型:不依赖Simulink模块,通过MATLAB脚本构建系统全微分方程组。
- 高精度数值求解:内置四阶Runge-Kutta (RK4) 求解器,以5μs的精细步长模拟电机连续域物理动态。
- 数模混合仿真架构:精确模拟了物理对象的连续变化(步长h)与数字控制器的离散采样(采样周期T_sample)之间的时间尺度差异。
- 矢量控制(FOC)策略:实现了包含Clark变换、Park变换、反Park变换及前馈解耦的完整矢量控制流程。
- 双闭环PI控制:包含转速外环和d-q轴电流内环,具有积分限幅(Anti-windup)功能。
- 数字PWM调制:模拟了三角载波与调制波比较生成PWM波形的过程,逼真还原逆变器的开关特性。
- 多工况动态模拟:预设了空载启动、负载突变、制动减速等典型工况,用于验证系统的动态性能。
系统要求
- MATLAB R2016b 或更高版本
- 无需额外工具箱(核心逻辑均为原生矩阵运算)
使用方法
- 直接运行
main.m 文件。 - 控制台将输出仿真进度信息。
- 仿真结束后将自动弹出图形窗口,显示转速响应、电流波形及PWM信号等关键曲线(需确保绘图函数完整)。
代码实现逻辑详解
本项目在 main 函数中通过时间步进循环实现了整个控制系统的时序逻辑,核心流程如下:
1. 系统参数与初始化
代码首先定义了3kW异步电机的物理参数(定转子电阻、电感、惯量等)和控制器参数(开关频率10kHz、直流母线600V、PI增益)。状态变量初始化为零,建立了基于$alpha-beta$坐标系的电机状态空间模型。
2. 数模混合仿真主循环
主循环模拟了时间从0到0.8秒的演变,包含两个不同时间尺度的子过程:
*
逆变器模型:根据当前PWM占空比和三角载波比较,生成开关信号 $S_a, S_b, S_c$,并根据直流母线电压 $V_{dc}$ 计算输出到电机的实际三相电压。
*
电机动力学解算:调用
rk4_step 函数求解电机微分方程,更新电流、磁链和转速状态。
- 离散域数字控制(每 T_sample 执行一次):
* 利用取模运算
mod 模拟数字控制器的采样中断。
*
采样与变换:读取电流与转速,执行 Clark 变换将 $ABC$ 电流转换为 $alphabeta$ 电流。
*
磁场定向:代码中通过直接读取电机模型内部磁链状态(理想观测)计算转子磁场定向角 $theta_e$,用于 Park 变换。
*
速度环控制:根据给定转速 $omega_{ref}$ 与实际转速的误差,经PI调节输出 $q$ 轴电流给定 $i_{q,ref}$(含输出限幅)。
*
电流环控制:根据恒磁通策略设定 $i_{d,ref}$,结合实际反馈电流进行PI调节。关键点在于实现了
电压前馈解耦:
* $u_d$ 包含 $-omega cdot sigma L_s cdot i_q$ 项
* $u_q$ 包含 $+omega cdot L_s cdot i_d$ 项
*
空间变换与调制:经过反 Park 变换得到 $u_alpha, u_beta$,归一化后生成用于PWM比较的占空比指令。
3. SPWM 调制生成
代码通过数学公式生成高频三角载波(Triangle Wave),并与控制环输出的占空比进行实时比较:
- 当 占空比 > 载波 时,上桥臂导通(输出1)。
- 利用公式 $U_{motor} = V_{dc} cdot (S - frac{S_a+S_b+S_c}{3})$ 计算包含中点电压漂移的实际相电压。
4. 工况时序控制
代码内部通过
if-else 逻辑硬编码了实验工况:
- 0 - 0.3s:给定转速 100 rad/s,空载启动。
- 0.3 - 0.4s:转速保持,突加负载 $T_L = 10 Ncdot m$。
- 0.6s 后:转速给定降至 50 rad/s,模拟制动过程。
关键算法与函数说明
电机微分方程模型 (motor_ode)
实现了异步电机在静止 $alpha-beta$ 坐标系下的五阶状态方程。
- 输入:电压矢量 $[u_alpha, u_beta]$,负载转矩 $T_L$。
- 状态变量:$x = [i_{salpha}, i_{sbeta}, psi_{ralpha}, psi_{rbeta}, omega_m]^T$。
- 核心方程:
* 电流微分方程包含电阻压降、反电动势及控制电压项。
* 磁链微分方程描述了转子磁场的衰减与旋转。
* 运动方程遵循牛顿第二定律:$Jfrac{domega}{dt} = T_e - T_L - Bomega$。
* 电磁转矩计算公式:$T_e = 1.5 cdot p cdot frac{L_m}{L_r} cdot (psi_{ralpha} i_{sbeta} - psi_{rbeta} i_{salpha})$。
四阶 Runge-Kutta 求解器 (rk4_step)
手动实现了经典的 RK4 数值积分算法。
- 用于在每个仿真步长 $h$ 内,根据当前的电机状态 $x$ 和输入电压 $u$,高精度地预测下一时刻的状态 $x_{next}$。
- 相比欧拉法,极大提高了仿真在处理非线性电机模型和谐波分量时的数值稳定性。
谐波与数据分析
代码在运行过程中实时记录所有关键变量至
data 结构体,包括三相电流、转速、电磁转矩、PWM开关状态及 $d-q$ 轴电压输出,为后续的FFT谐波分析(
analyze_thd)和波形绘制(
plot_results)提供原始数据。