Motor_A1_dq_t_data.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. % This MATLAB script was used to extract the PMSM flux linkage data and
  2. % other parameters from Motor-CAD that are required by example model
  3. % ee_import_fem_motorcad.slx. Lines that call Motor-CAD are commented
  4. % out and return data loaded from a previously-created mat file.
  5. % Copyright 2018 The MathWorks, Inc. Portions Copyright Motor Design Ltd 2018.
  6. %% Start MotorCAD ActiveX server and load design data
  7. %mcad = actxserver('motorcad.appautomation');
  8. %invoke (mcad,'LoadFromFile','C:\PMSM.mot' );
  9. clear;
  10. % Clear workspace
  11. close all
  12. clear
  13. clc
  14. % Load model parameters
  15. Ts = 5e-7; % [s] Model sampling time (200 KHz)
  16. Ts_ctrl = 2e-5; % [s] Controller sampling time (50us)5e-5
  17. f_speed_ctrl = 500; % [Hz] Speed/torque Controller frequency = (500 Hz)
  18. Ts_Spd_ctl = 1/f_speed_ctrl;
  19. PWM_Cnt = 6000;
  20. PWM_Half_Cnt = PWM_Cnt/2;
  21. Torque_Mode = 1;
  22. Speed_Mode = 2;
  23. Ctrl_Mode = Torque_Mode;
  24. %Simulink provider Motor parameters
  25. n_polePairs = 5; % [-] Number of motor pole pairs
  26. PM = 0.01688; % Permanent magnet flux linkage,
  27. Ld = 0.625e-4;%0.45e-4;%0.07e-3;% d-axis inductance,
  28. Lq = 0.625e-4;%0.178e-3; % q-axis inductance,
  29. Rs = 0.011; % Stator resistance,
  30. J = 0.03945; % Moment of inertia,
  31. bandwith = 1600*2*pi;
  32. i_Udc = 96; % DCbus max voltage
  33. %Current=xlsread('E:\works\项目\MC100\电机仿真数据\PhiD-I230405.xlsx','Sheet1','B2:N2');
  34. %FluxD = xlsread('E:\works\项目\MC100\电机仿真数据\PhiD-I230405.xlsx','Sheet1','B4:N40');
  35. %FluxQ = xlsread('E:\works\项目\MC100\电机仿真数据\PhiQ-I230405.xlsx','Sheet1','B4:N40');
  36. %Torque = xlsread('E:\works\项目\MC100\电机仿真数据\T-I230405.xlsx','Sheet1','B4:N40');
  37. %% Define operating point and flux linkage table breakpoints
  38. PointsPerCycle = 36; % Number of angle data points
  39. Shaft_Speed = 3500; % Nominal shaft speed (RPM)
  40. DCBusVoltage = 96; % DC bus voltage
  41. magVec = linspace(0,300,13); % Current magnitude vector
  42. gammaVec = linspace(0,360,PointsPerCycle+1); % Current advance angle
  43. angleVec = linspace(0,360/n_polePairs,PointsPerCycle+1); % Rotor angle vector
  44. nMag = length(magVec);
  45. nGamma = length(gammaVec);
  46. nAngle = length(angleVec);
  47. fluxDmat = zeros(nMag,nGamma,nAngle);
  48. fluxQmat = zeros(nMag,nGamma,nAngle);
  49. torqueMat = zeros(nMag,nGamma,nAngle);
  50. %for i = 1:nMag
  51. % for j = 1:nGamma
  52. % for m = 1:nAngle
  53. % fluxDmat(i,j,m) = FluxD(j, i);
  54. % fluxQmat(i,j,m) = FluxQ(j, i);
  55. % torqueMat(i,j,m) = Torque(j, i);
  56. % end
  57. % end
  58. %end
  59. load A1_motor_flux_data
  60. %% Extract flux linkdage data from Motor-CAD
  61. % nMag = length(magVec);
  62. % nGamma = length(gammaVec);
  63. % nX = length(angleVec);
  64. % fluxDmat = zeros(nMag,nGamma,nX);
  65. % fluxQmat = zeros(nMag,nGamma,nX);
  66. % torqueMat = zeros(nMag,nGamma,nX);
  67. % fluxAmat = zeros(nMag,nGamma,nX);
  68. % for i = 1:nMag
  69. % for j = 1:nGamma
  70. % invoke(mcad,'SetVariable','PeakCurrent',magVec(i));
  71. % invoke(mcad,'SetVariable','DCBusVoltage',DCBusVoltage);
  72. % invoke(mcad,'SetVariable','Shaft_Speed_[RPM]',Shaft_Speed);
  73. % invoke(mcad,'SetVariable','TorqueCalculation',1);
  74. % invoke(mcad,'SetVariable','TorquePointsPerCycle',PointsPerCycle);
  75. % invoke(mcad,'SetVariable','PhaseAdvance',gammaVec(j));
  76. % invoke(mcad,'DoMagneticCalculation');
  77. % for m = 1:nX % Loop over rotor angles
  78. % xe = N*angleVec(m)*pi/180; % Electrical angle in radians
  79. % [res1, x1, torque] = invoke(mcad, 'GetMagneticGraphPoint', 'TorqueVW',m-1);
  80. % [res2, x2, fluxD] = invoke(mcad, 'GetMagneticGraphPoint', 'FluxLinkageLoadTotalD',m-1);
  81. % [res3, x3, fluxQ] = invoke(mcad, 'GetMagneticGraphPoint', 'FluxLinkageLoadTotalQ',m-1);
  82. % fluxDmat(i,j,m) = fluxD;
  83. % fluxQmat(i,j,m) = fluxQ;
  84. % torqueMat(i,j,m) = torque;
  85. % % Optional calculation of A-phase flux linkage. Note Park's
  86. % % transform for MotorCAD is Q leads D, rotor angle measured
  87. % % from A-phase flux axis to Q-axis.
  88. % invP = [sin(xe+[0;-2*pi/3;2*pi/3]),cos(xe+[0;-2*pi/3;2*pi/3])];
  89. % fluxes = invP*[fluxD;fluxQ];
  90. % fluxAmat(i,j,m) = fluxes(1);
  91. % end
  92. % end
  93. % end