反Park+反Clarke变换

1.功能

演示给定id、iq后通过反Park+反Clarke变换得到三相电流ia、ib、ic,并绘图对比两种工况。

2.matlab源码

Matlab 复制代码
%% 电机控制中 id, iq 到三相电流 ia, ib, ic 的坐标变换
% 已知: 
%   工况1: id = 1 A, iq = 1 A
%   工况2: id = 1 A, iq = 2 A
% 假设: 转子位置角度 theta 从 0 到 2*pi 变化
% 采用等幅值变换(常用在电机控制中)

clear; clc; close all;

%% 参数设置
theta = linspace(0, 2*pi, 360);  % 电角度,一个完整的电气周期

%% 工况1: id = 1 A, iq = 1 A
id1 = 1;
iq1 = 1;

%% 工况2: id = 1 A, iq = 2 A
id2 = 1;
iq2 = 2;

%% 预分配数组
ia1 = zeros(size(theta));
ib1 = zeros(size(theta));
ic1 = zeros(size(theta));

ia2 = zeros(size(theta));
ib2 = zeros(size(theta));
ic2 = zeros(size(theta));

%% 对每个角度进行坐标变换
for k = 1:length(theta)
    theta_elec = theta(k);
    
    % 工况1: 反Park变换 (dq -> alpha, beta)
    [i_alpha1, i_beta1] = inv_park(id1, iq1, theta_elec);
    % 反Clarke变换 (alpha, beta -> a, b, c)
    [ia1(k), ib1(k), ic1(k)] = inv_clarke(i_alpha1, i_beta1);
    
    % 工况2: 反Park变换 (dq -> alpha, beta)
    [i_alpha2, i_beta2] = inv_park(id2, iq2, theta_elec);
    % 反Clarke变换 (alpha, beta -> a, b, c)
    [ia2(k), ib2(k), ic2(k)] = inv_clarke(i_alpha2, i_beta2);
end

%% 绘图对比
figure('Position', [100, 100, 1200, 800]);

% 工况1
subplot(2,1,1);
plot(theta*180/pi, ia1, 'r-', 'LineWidth', 1.5); hold on;
plot(theta*180/pi, ib1, 'g-', 'LineWidth', 1.5);
plot(theta*180/pi, ic1, 'b-', 'LineWidth', 1.5);
plot(theta*180/pi, id1*ones(size(theta)), 'k--', 'LineWidth', 1);
plot(theta*180/pi, iq1*ones(size(theta)), 'm--', 'LineWidth', 1);
xlabel('电角度 (deg)');
ylabel('电流 (A)');
title(['工况1: id = ', num2str(id1), ' A,  iq = ', num2str(iq1), ' A']);
legend('ia', 'ib', 'ic', 'id (参考)', 'iq (参考)', 'Location', 'best');
grid on;
xlim([0, 360]);
ylim([-3, 3]);

% 工况2
subplot(2,1,2);
plot(theta*180/pi, ia2, 'r-', 'LineWidth', 1.5); hold on;
plot(theta*180/pi, ib2, 'g-', 'LineWidth', 1.5);
plot(theta*180/pi, ic2, 'b-', 'LineWidth', 1.5);
plot(theta*180/pi, id2*ones(size(theta)), 'k--', 'LineWidth', 1);
plot(theta*180/pi, iq2*ones(size(theta)), 'm--', 'LineWidth', 1);
xlabel('电角度 (deg)');
ylabel('电流 (A)');
title(['工况2: id = ', num2str(id2), ' A,  iq = ', num2str(iq2), ' A']);
legend('ia', 'ib', 'ic', 'id (参考)', 'iq (参考)', 'Location', 'best');
grid on;
xlim([0, 360]);
ylim([-3, 3]);

sgtitle('dq轴电流到三相电流的坐标变换结果');

%% 单独画在一个图上对比ia
figure('Position', [100, 100, 900, 600]);
plot(theta*180/pi, ia1, 'r-', 'LineWidth', 1.5); hold on;
plot(theta*180/pi, ia2, 'b--', 'LineWidth', 1.5);
xlabel('电角度 (deg)');
ylabel('ia 电流 (A)');
title('ia 电流对比 (id=1A, iq=1A  vs  id=1A, iq=2A)');
legend('iq=1A', 'iq=2A', 'Location', 'best');
grid on;
xlim([0, 360]);

%% 计算有效值对比
fprintf('========== 电流有效值对比 ==========\n');
fprintf('工况1 (id=1A, iq=1A):\n');
fprintf('  ia RMS = %.3f A\n', rms(ia1));
fprintf('  ib RMS = %.3f A\n', rms(ib1));
fprintf('  ic RMS = %.3f A\n', rms(ic1));

fprintf('\n工况2 (id=1A, iq=2A):\n');
fprintf('  ia RMS = %.3f A\n', rms(ia2));
fprintf('  ib RMS = %.3f A\n', rms(ib2));
fprintf('  ic RMS = %.3f A\n', rms(ic2));

fprintf('\n理论电流幅值:\n');
I_s1 = sqrt(id1^2 + iq1^2);
I_s2 = sqrt(id2^2 + iq2^2);
fprintf('  工况1 合成电流幅值 = %.3f A\n', I_s1);
fprintf('  工况2 合成电流幅值 = %.3f A\n', I_s2);
fprintf('  三相电流幅值 = 合成电流幅值 (等幅值变换)\n');

%% ==================== 子函数定义 ====================

% 反Park变换: dq -> alpha, beta
function [i_alpha, i_beta] = inv_park(id, iq, theta)
    % 等幅值变换的逆Park矩阵
    % [i_alpha] = [cosθ  -sinθ] [id]
    % [i_beta ]   [sinθ   cosθ] [iq]
    i_alpha = id * cos(theta) - iq * sin(theta);
    i_beta  = id * sin(theta) + iq * cos(theta);
end

% 反Clarke变换: alpha, beta -> a, b, c
function [ia, ib, ic] = inv_clarke(i_alpha, i_beta)
    % 等幅值变换的逆Clarke矩阵
    % ia = i_alpha
    % ib = -0.5*i_alpha + sqrt(3)/2 * i_beta
    % ic = -0.5*i_alpha - sqrt(3)/2 * i_beta
    ia = i_alpha;
    ib = -0.5 * i_alpha + sqrt(3)/2 * i_beta;
    ic = -0.5 * i_alpha - sqrt(3)/2 * i_beta;
end

3.运行结果

4.运行结果说明

关键观察点:

  1. 电流幅值变化:iq从1A增加到2A后,三相电流幅值明显增大。根据等幅值变换,合成电流幅值 Is=id2+iq2Is​=id2+iq2​:

    • 工况1:Is=12+12=1.414Is​=12+12​=1.414 A

    • 工况2:Is=12+22=2.236Is​=12+22​=2.236 A

  2. 相位变化:保持id不变只增加iq,电流矢量的相位角 θi=arctan⁡(iq/id)θi​=arctan(iq/id) 会增大:

    • 工况1:45°

    • 工况2:约63.4°

  3. 三相电流波形:标准正弦波,互差120°,幅值等于合成电流幅值

物理意义:

  • iq增大 → 转矩分量增大 → 三相电流幅值增大

  • id不变 → 励磁分量不变 → 但电流矢量的相位会偏移

这段代码可以直接在MATLAB中运行,会生成两张对比图并输出电流有效值。

相关推荐
用户712122751263 天前
MATLAB 自动化 Excel 转 SLDD 数据字典完整方案(适配自定义 THBPackage 存储类)
matlab
ZhengEnCi4 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi4 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
xiao5kou4chang6kai416 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
bubiyoushang88816 天前
电力线信道“五类噪声”仿真MATLAB
开发语言·matlab
cici1587416 天前
彩色图像模糊增强(Fuzzy Enhancement)MATLAB 实现
开发语言·算法·matlab
kaikaile199516 天前
图像稀疏化分解 + 压缩感知(CS)重建 MATLAB
开发语言·计算机视觉·matlab
yugi98783816 天前
PNCC(Power-Normalized Cepstral Coefficients)— MATLAB 实现
开发语言·人工智能·matlab
cooldog123pp16 天前
cplex完全安装手册,适配matlab和python!
人工智能·python·matlab·cplex
2zcode16 天前
项目文档:基于MATLAB语音信号变声算法设计与实现
算法·matlab·语音识别