| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- % This MATLAB script was used to extract the PMSM flux linkage data and
- % other parameters from Motor-CAD that are required by example model
- % ee_import_fem_motorcad.slx. Lines that call Motor-CAD are commented
- % out and return data loaded from a previously-created mat file.
- % Copyright 2018 The MathWorks, Inc. Portions Copyright Motor Design Ltd 2018.
- %% Start MotorCAD ActiveX server and load design data
- %mcad = actxserver('motorcad.appautomation');
- %invoke (mcad,'LoadFromFile','C:\PMSM.mot' );
- clear;
- % Clear workspace
- close all
- clear
- clc
- % Load model parameters
- Ts = 5e-7; % [s] Model sampling time (200 KHz)
- Ts_ctrl = 2e-5; % [s] Controller sampling time (50us)5e-5
- f_speed_ctrl = 500; % [Hz] Speed/torque Controller frequency = (500 Hz)
- Ts_Spd_ctl = 1/f_speed_ctrl;
- PWM_Cnt = 6000;
- PWM_Half_Cnt = PWM_Cnt/2;
- DeatTime = 0;
- DT_PWM_CNT = PWM_Cnt/(Ts_ctrl)*DeatTime;
- Torque_Mode = 1;
- Speed_Mode = 2;
- Ctrl_Mode = Torque_Mode;
- %Simulink provider Motor parameters
- n_polePairs = 4; % [-] Number of motor pole pairs
- PM = 0.01688; % Permanent magnet flux linkage,
- Ld = 0.7e-4;%0.07e-3;% d-axis inductance,
- Lq = 0.178e-3; % q-axis inductance,
- Rs = 0.011; % Stator resistance,
- J = 0.03945; % Moment of inertia,
- bandwith = 600*2*pi;
- i_Udc = 96; % DCbus max voltage
- Rload = 1e6;
- % A1 6匝电机数据
- %Current=xlsread('E:\works\项目\MC100\电机仿真数据\PhiD-I230405.xlsx','Sheet1','B2:N2');
- %FluxD = xlsread('E:\works\项目\MC100\电机仿真数据\PhiD-I230405.xlsx','Sheet1','B4:N40');
- %FluxQ = xlsread('E:\works\项目\MC100\电机仿真数据\PhiQ-I230405.xlsx','Sheet1','B4:N40');
- %Torque = xlsread('E:\works\项目\MC100\电机仿真数据\T-I230405.xlsx','Sheet1','B4:N40');
- % A1 5匝电机数据
- % FluxD = xlsread('E:\works\项目\MC100\电机仿真数据\5N-phiD-Current.xlsx','Sheet1','B4:N40');
- % FluxQ = xlsread('E:\works\项目\MC100\电机仿真数据\5N-phiQ-Current.xlsx','Sheet1','B4:N40');
- % Torque = xlsread('E:\works\项目\MC100\电机仿真数据\5N-Torque-Current.xlsx','Sheet1','B4:N40');
- % 五菱电机数据
- % FluxD = xlsread('E:\works\项目\MC100\电机仿真数据\96-9000\M155-phiD-IS.xlsx','Sheet1','B4:N40');
- % FluxQ = xlsread('E:\works\项目\MC100\电机仿真数据\96-9000\M155-phiQ-IS.xlsx','Sheet1','B4:N40');
- % Torque = xlsread('E:\works\项目\MC100\电机仿真数据\96-9000\M155-Torque-IS.xlsx','Sheet1','B4:N40');
- %% Define operating point and flux linkage table breakpoints
- PointsPerCycle = 36; % Number of angle data points
- Shaft_Speed = 3500; % Nominal shaft speed (RPM)
- DCBusVoltage = 96; % DC bus voltage
- magVec = linspace(0,300,13); % Current magnitude vector
- gammaVec = linspace(0,360,PointsPerCycle+1); % Current advance angle
- angleVec = linspace(0,360/n_polePairs,PointsPerCycle+1); % Rotor angle vector
- nMag = length(magVec);
- nGamma = length(gammaVec);
- nAngle = length(angleVec);
- fluxDmat = zeros(nMag,nGamma,nAngle);
- fluxQmat = zeros(nMag,nGamma,nAngle);
- torqueMat = zeros(nMag,nGamma,nAngle);
- % for i = 1:nMag
- % for j = 1:nGamma
- % for m = 1:nAngle
- % fluxDmat(i,j,m) = FluxD(j, i);
- % fluxQmat(i,j,m) = FluxQ(j, i);
- % torqueMat(i,j,m) = Torque(j, i);
- % end
- % end
- % end
- load A1_motor_flux_data
- %load A1_motor_flux_data
- %load M155_motor_flux_data
- % fluxDmat=fluxDmat.*0.707;
- % fluxQmat=fluxQmat.*0.707;
- % torqueMat=torqueMat.*0.707;
- %% Extract flux linkdage data from Motor-CAD
- % nMag = length(magVec);
- % nGamma = length(gammaVec);
- % nX = length(angleVec);
- % fluxDmat = zeros(nMag,nGamma,nX);
- % fluxQmat = zeros(nMag,nGamma,nX);
- % torqueMat = zeros(nMag,nGamma,nX);
- % fluxAmat = zeros(nMag,nGamma,nX);
- % for i = 1:nMag
- % for j = 1:nGamma
- % invoke(mcad,'SetVariable','PeakCurrent',magVec(i));
- % invoke(mcad,'SetVariable','DCBusVoltage',DCBusVoltage);
- % invoke(mcad,'SetVariable','Shaft_Speed_[RPM]',Shaft_Speed);
- % invoke(mcad,'SetVariable','TorqueCalculation',1);
- % invoke(mcad,'SetVariable','TorquePointsPerCycle',PointsPerCycle);
- % invoke(mcad,'SetVariable','PhaseAdvance',gammaVec(j));
- % invoke(mcad,'DoMagneticCalculation');
- % for m = 1:nX % Loop over rotor angles
- % xe = N*angleVec(m)*pi/180; % Electrical angle in radians
- % [res1, x1, torque] = invoke(mcad, 'GetMagneticGraphPoint', 'TorqueVW',m-1);
- % [res2, x2, fluxD] = invoke(mcad, 'GetMagneticGraphPoint', 'FluxLinkageLoadTotalD',m-1);
- % [res3, x3, fluxQ] = invoke(mcad, 'GetMagneticGraphPoint', 'FluxLinkageLoadTotalQ',m-1);
- % fluxDmat(i,j,m) = fluxD;
- % fluxQmat(i,j,m) = fluxQ;
- % torqueMat(i,j,m) = torque;
- % % Optional calculation of A-phase flux linkage. Note Park's
- % % transform for MotorCAD is Q leads D, rotor angle measured
- % % from A-phase flux axis to Q-axis.
- % invP = [sin(xe+[0;-2*pi/3;2*pi/3]),cos(xe+[0;-2*pi/3;2*pi/3])];
- % fluxes = invP*[fluxD;fluxQ];
- % fluxAmat(i,j,m) = fluxes(1);
- % end
- % end
- % end
|