1.功能演示给定id、iq后通过反Park反Clarke变换得到三相电流ia、ib、ic并绘图对比两种工况。2.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 电流对比 (id1A, iq1A vs id1A, iq2A)); legend(iq1A, iq2A, Location, best); grid on; xlim([0, 360]); %% 计算有效值对比 fprintf( 电流有效值对比 \n); fprintf(工况1 (id1A, iq1A):\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 (id1A, iq2A):\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; end3.运行结果4.运行结果说明关键观察点电流幅值变化iq从1A增加到2A后三相电流幅值明显增大。根据等幅值变换合成电流幅值 Isid2iq2Is​id2iq2​工况1Is12121.414Is​1212​1.414 A工况2Is12222.236Is​1222​2.236 A相位变化保持id不变只增加iq电流矢量的相位角 θiarctan⁡(iq/id)θi​arctan(iq/id) 会增大工况145°工况2约63.4°三相电流波形标准正弦波互差120°幅值等于合成电流幅值物理意义iq增大→ 转矩分量增大 → 三相电流幅值增大id不变→ 励磁分量不变 → 但电流矢量的相位会偏移这段代码可以直接在MATLAB中运行会生成两张对比图并输出电流有效值。