工具:Matlab2021a

电脑信息:Intel® Xeon® CPU E5-2603 v3 @ 1.60GHz

系统类 型:64位操作系统,基于X64的处理器 windows10 专业版
一、代码:

% FOC仿真主程序
clear; clc; close all;

% 仿真参数设置
Ts = 1e-5;          % 采样时间(s)
t_end = 0.5;        % 仿真时长(s)
t = 0:Ts:t_end;
N = length(t);

% 电机参数
R = 0.5;            % 定子电阻(Ω)
Ld = 0.001;         % d轴电感(H)
Lq = 0.001;         % q轴电感(H)
flux_pm = 0.1;      % 永磁体磁链(Wb)
J = 0.001;          % 转动惯量(kg·m²)
B = 0.0001;         % 阻尼系数(N·m·s/rad)
p = 4;              % 极对数

% 控制参数
speed_ref = 1000;   % 转速参考值(rpm)
w_ref = speed_ref * (2*pi/60) * p;  % 电角速度参考值(rad/s)

% 状态变量初始化
id = 0; iq = 0;
w = 0; theta = 0;
vd = 0; vq = 0;

% 存储数据
id_log = zeros(1,N);
iq_log = zeros(1,N);
w_log = zeros(1,N);
theta_log = zeros(1,N);
ia_log = zeros(1,N);
ib_log = zeros(1,N);
ic_log = zeros(1,N);

% PI控制器参数(电流环)
Kp_i = 20;
Ki_i = 200;
id_integral = 0;
iq_integral = 0;

% PI控制器参数(速度环)
Kp_speed = 0.05;
Ki_speed = 1;
speed_integral = 0;

% 主仿真循环
for k = 1:N
    % 转速环PI控制(生成iq_ref)
    w_err = w_ref - w;
    speed_integral = speed_integral + w_err * Ts;
    iq_ref = Kp_speed * w_err + Ki_speed * speed_integral;
    iq_ref = min(max(iq_ref, -50), 50);  % 限幅
    
    id_ref = 0;  % d轴电流参考值(MTPA控制时设为0)
    
    % 电流环PI控制(d轴)
    id_err = id_ref - id;
    id_integral = id_integral + id_err * Ts;
    vd = Kp_i * id_err + Ki_i * id_integral;
    
    % 电流环PI控制(q轴)
    iq_err = iq_ref - iq;
    iq_integral = iq_integral + iq_err * Ts;
    vq = Kp_i * iq_err + Ki_i * iq_integral;
    
    % 前馈解耦项
    vd = vd - w * Lq * iq;
    vq = vq + w * (Ld * id + flux_pm);
    
    % 逆Park变换(dq → αβ)
    cos_theta = cos(theta);
    sin_theta = sin(theta);
    valpha = vd * cos_theta - vq * sin_theta;
    vbeta = vd * sin_theta + vq * cos_theta;
    
    % 逆Clarke变换(αβ → abc)
    va = valpha;
    vb = -0.5 * valpha + 0.8660 * vbeta;
    vc = -0.5 * valpha - 0.8660 * vbeta;
    
    % 电机模型(求解电流微分方程)
    % dq轴电流动态方程
    did_dt = (vd - R*id + w*Lq*iq) / Ld;
    diq_dt = (vq - R*iq - w*Ld*id - w*flux_pm) / Lq;
    
    id = id + did_dt * Ts;
    iq = iq + diq_dt * Ts;
    
    % 电磁转矩
    Te = 1.5 * p * (flux_pm*iq + (Ld-Lq)*id*iq);
    
    % 机械动态方程
    dw_dt = (Te - B*w) / J;
    w = w + dw_dt * Ts;
    
    % 转子位置更新
    theta = theta + w * Ts;
    theta = mod(theta, 2*pi);
    
    % Clarke逆变换(dq → abc电流,用于记录)
    alpha = id * cos_theta - iq * sin_theta;
    beta = id * sin_theta + iq * cos_theta;
    ia = alpha;
    ib = -0.5*alpha + 0.8660*beta;
    ic = -0.5*alpha - 0.8660*beta;
    
    % 数据存储
    id_log(k) = id;
    iq_log(k) = iq;
    w_log(k) = w / p * 60/(2*pi);  % 转换为rpm
    theta_log(k) = theta;
    ia_log(k) = ia;
    ib_log(k) = ib;
    ic_log(k) = ic;
end

% 结果绘图
figure(1);
subplot(2,2,1);
plot(t, w_log);
xlabel('时间 (s)'); ylabel('转速 (rpm)');
title('电机转速响应'); grid on;

subplot(2,2,2);
plot(t, id_log, t, iq_log);
xlabel('时间 (s)'); ylabel('电流 (A)');
legend('id', 'iq');
title('dq轴电流'); grid on;

subplot(2,2,3);
plot(t, ia_log, t, ib_log, t, ic_log);
xlabel('时间 (s)'); ylabel('电流 (A)');
legend('ia', 'ib', 'ic');
title('三相电流'); grid on;

subplot(2,2,4);
plot(t, theta_log);
xlabel('时间 (s)'); ylabel('角度 (rad)');
title('转子电角度'); grid on;

运行结果:
在这里插入图片描述
二、修改极对数为10,电流变大了
在这里插入图片描述
三、加大阻抗 R = 1.0
在这里插入图片描述
四、加大电感 Ld = 0.01; Lq = 0.01;
在这里插入图片描述
五、增大转到惯量 J = 0.01;
在这里插入图片描述
六、减小磁链 flux_pm = 0.02;
在这里插入图片描述
七、加大阻尼系数 B = 0.001;
在这里插入图片描述

更多推荐