|
16 | 16 | % is the SROTM node temperatures and Tmcad is the Motor-CAD node
|
17 | 17 | % temperature, in the transient simulation.
|
18 | 18 |
|
19 |
| - % Copyright 2022 The MathWorks, Inc. |
| 19 | + % Copyright 2022-2025 The MathWorks, Inc. |
20 | 20 |
|
21 | 21 | mdlWks = get_param(modelName,'ModelWorkspace');
|
22 | 22 | StateSpaceND = mdlWks.getVariable('StateSpaceND');
|
23 | 23 | samplingGrid = StateSpaceND.SamplingGrid;
|
24 | 24 |
|
25 |
| - if length(bkptIdxComb)==3 % one cooling system |
| 25 | + % Obtain Simulink results ------------------------------------------ |
| 26 | + if length(bkptIdxComb)==3 % one cooling system - e5_IM_HWJ case |
26 | 27 | wBkpts = squeeze(samplingGrid.w(:,1,1))';
|
27 | 28 | fr1Bkpts = squeeze(samplingGrid.fr1(1,:,1));
|
28 | 29 | Tin1Bkpts = squeeze(samplingGrid.Tin1(1,1,:))';
|
29 | 30 | rpmVal = wBkpts(bkptIdxComb(1));
|
30 | 31 | fr1Val = fr1Bkpts(bkptIdxComb(2));
|
31 |
| - Tin1Val = Tin1Bkpts(bkptIdxComb(3)); |
32 |
| - elseif length(bkptIdxComb)==5 % two cooling systems |
| 32 | + Tin1Val = Tin1Bkpts(bkptIdxComb(3)); |
| 33 | + set_param(strcat(modelName, '/HousingWaterJacket_Flowrate_lpm'), 'Value', num2str(fr1Val)); |
| 34 | + set_param(strcat(modelName, '/HousingWaterJacket_InletTemp_degC'), 'Value', num2str(Tin1Val)); |
| 35 | + elseif length(bkptIdxComb)==5 % two cooling systems - e8_IPMSM_HWJandVent case |
33 | 36 | wBkpts = squeeze(samplingGrid.w(:,1,1,1,1))';
|
34 | 37 | fr1Bkpts = squeeze(samplingGrid.fr1(1,:,1,1,1));
|
35 | 38 | fr2Bkpts = squeeze(samplingGrid.fr2(1,1,:,1,1))';
|
|
40 | 43 | fr2Val = fr2Bkpts(bkptIdxComb(3));
|
41 | 44 | Tin1Val = Tin1Bkpts(bkptIdxComb(4));
|
42 | 45 | Tin2Val = Tin2Bkpts(bkptIdxComb(5));
|
43 |
| - end |
44 |
| - |
45 |
| - set_param(strcat(modelName, '/TorqueNm'), 'Value', num2str(torqueVal)); |
46 |
| - set_param(strcat(modelName, '/SpeedRPM'), 'Value', num2str(rpmVal)); |
47 |
| - % set HWJ for e8 model |
48 |
| - try |
49 | 46 | set_param(strcat(modelName, '/HousingWaterJacket_Flowrate_lpm'), 'Value', num2str(fr1Val));
|
50 | 47 | set_param(strcat(modelName, '/HousingWaterJacket_InletTemp_degC'), 'Value', num2str(Tin1Val));
|
51 |
| - catch |
52 |
| - % just continue |
53 |
| - end |
54 |
| - % set spray cooling for e8 model |
55 |
| - try |
| 48 | + set_param(strcat(modelName, '/Ventilated_Flowrate_lpm'), 'Value', num2str(fr2Val)); |
| 49 | + set_param(strcat(modelName, '/Ventilated_InletTemp_degC'), 'Value', num2str(Tin2Val)); |
| 50 | + elseif length(bkptIdxComb)==7 % three cooling systems - e8_IPMSM_SprayMultiNozzle case |
| 51 | + wBkpts = squeeze(samplingGrid.w(:,1,1,1,1,1,1))'; |
| 52 | + fr1Bkpts = squeeze(samplingGrid.fr1(1,:,1,1,1,1,1)); |
| 53 | + Tin1Bkpts = squeeze(samplingGrid.Tin1(1,1,:,1,1,1,1))'; |
| 54 | + fr2Bkpts = squeeze(samplingGrid.fr2(1,1,1,:,1,1,1))'; |
| 55 | + Tin2Bkpts = squeeze(samplingGrid.Tin2(1,1,1,1,:,1,1))'; |
| 56 | + fr3Bkpts = squeeze(samplingGrid.fr3(1,1,1,1,1,:,1))'; |
| 57 | + Tin3Bkpts = squeeze(samplingGrid.Tin3(1,1,1,1,1,1,:))'; |
| 58 | + rpmVal = wBkpts(bkptIdxComb(1)); |
| 59 | + fr1Val = fr1Bkpts(bkptIdxComb(2)); |
| 60 | + fr2Val = fr2Bkpts(bkptIdxComb(3)); |
| 61 | + fr3Val = fr3Bkpts(bkptIdxComb(4)); |
| 62 | + Tin1Val = Tin1Bkpts(bkptIdxComb(5)); |
| 63 | + Tin2Val = Tin2Bkpts(bkptIdxComb(6)); |
| 64 | + Tin3Val = Tin3Bkpts(bkptIdxComb(7)); |
56 | 65 | set_param(strcat(modelName, '/Spray_RadialHousing_Flowrate_lpm'), 'Value', num2str(fr1Val));
|
57 | 66 | set_param(strcat(modelName, '/Spray_RadialHousing_InletTemp_degC'), 'Value', num2str(Tin1Val));
|
58 |
| - catch |
59 |
| - % just continue |
| 67 | + set_param(strcat(modelName, '/HousingWaterJacket_Flowrate_lpm'), 'Value', num2str(fr2Val)); |
| 68 | + set_param(strcat(modelName, '/HousingWaterJacket_InletTemp_degC'), 'Value', num2str(Tin2Val)); |
| 69 | + set_param(strcat(modelName, '/Spray_RadialRotor_Flowrate_lpm'), 'Value', num2str(fr3Val)); |
| 70 | + set_param(strcat(modelName, '/Spray_RadialRotor_InletTemp_degC'), 'Value', num2str(Tin3Val)); |
60 | 71 | end
|
61 | 72 |
|
62 |
| - if length(bkptIdxComb)==5 |
63 |
| - set_param(strcat(modelName, '/Ventilated_Flowrate_lpm'), 'Value', num2str(fr2Val)); |
64 |
| - set_param(strcat(modelName, '/Ventilated_InletTemp_degC'), 'Value', num2str(Tin2Val)); |
65 |
| - end |
| 73 | + set_param(strcat(modelName, '/TorqueNm'), 'Value', num2str(torqueVal)); |
| 74 | + set_param(strcat(modelName, '/SpeedRPM'), 'Value', num2str(rpmVal)); |
66 | 75 |
|
67 | 76 | stopTime = 1000; % s
|
68 | 77 | out = sim(modelName, 'StopTime', num2str(stopTime));
|
69 | 78 | TnodesSeries = out.yout{1}.Values;
|
70 |
| - |
71 | 79 | TnodesInit = mdlWks.getVariable('TnodesInit');
|
| 80 | + |
| 81 | + % Obtain Motor-CAD baseline ------------------------------------------ |
72 | 82 | mcadIntf.Tambient_degC = TnodesInit(1);
|
73 | 83 | mcadIntf.Shaft_Speed_RPM = rpmVal;
|
74 |
| - mcadIntf.HousingWaterJacket_FlowRate_m3ps = fr1Val/60/1000; % lpm to m3ps |
75 |
| - mcadIntf.HousingWaterJacket_InletTemperature_degC = Tin1Val; |
76 |
| - mcadIntf.Spray_RadialHousing_FlowRate_m3ps = fr1Val/60/1000; % lpm to m3ps |
77 |
| - mcadIntf.Spray_RadialHousing_InletTemperature_F_degC = Tin1Val; |
78 |
| - mcadIntf.Spray_RadialHousing_InletTemperature_R_degC = Tin1Val; |
79 |
| - if length(bkptIdxComb)==5 |
| 84 | + if length(bkptIdxComb)==3 % one cooling system - e5_IM_HWJ case |
| 85 | + mcadIntf.HousingWaterJacket_FlowRate_m3ps = fr1Val/60/1000; % lpm to m3ps |
| 86 | + mcadIntf.HousingWaterJacket_InletTemperature_degC = Tin1Val; |
| 87 | + elseif length(bkptIdxComb)==5 % two cooling systems - e8_IPMSM_HWJandVent case |
| 88 | + mcadIntf.HousingWaterJacket_FlowRate_m3ps = fr1Val/60/1000; % lpm to m3ps |
| 89 | + mcadIntf.HousingWaterJacket_InletTemperature_degC = Tin1Val; |
80 | 90 | mcadIntf.Ventilated_FlowRate_m3ps = fr2Val/60/1000; % lpm to m3ps
|
81 | 91 | mcadIntf.Ventilated_InletTemperature_degC = Tin2Val;
|
| 92 | + elseif length(bkptIdxComb)==7 % three cooling systems - e8_IPMSM_SprayMultiNozzle case |
| 93 | + mcadIntf.Spray_RadialHousing_FlowRate_m3ps = fr1Val/60/1000; % lpm to m3ps |
| 94 | + mcadIntf.Spray_RadialHousing_InletTemperature_F_degC = Tin1Val; |
| 95 | + mcadIntf.Spray_RadialHousing_InletTemperature_R_degC = Tin1Val; |
| 96 | + mcadIntf.HousingWaterJacket_FlowRate_m3ps = fr2Val/60/1000; % lpm to m3ps |
| 97 | + mcadIntf.HousingWaterJacket_InletTemperature_degC = Tin2Val; |
| 98 | + mcadIntf.Spray_RadialRotor_FlowRate_m3ps = fr3Val/60/1000; % lpm to m3ps |
| 99 | + mcadIntf.Spray_RadialRotor_InletTemperature_F_degC = Tin3Val; |
| 100 | + mcadIntf.Spray_RadialRotor_InletTemperature_R_degC = Tin3Val; |
82 | 101 | end
|
| 102 | + |
83 | 103 | mcadIntf.EnableStatorTempCoeffRes = 1;
|
84 | 104 | mcadIntf.EnableRotorTempCoeffRes = 1;
|
85 | 105 | mcadIntf.updateModel();
|
|
88 | 108 | allMcadIdxs = [mcadIntf.NodeNamesAndMcadIdx{:,2}];
|
89 | 109 | [tVecMcad, TnodesMcad] = mcadIntf.getTransientTemperatureForNodeMcadIdxs(allMcadIdxs);
|
90 | 110 |
|
| 111 | + % Plot results ------------------------------------------------------ |
91 | 112 | TnodesMcadSeries = timeseries(TnodesMcad', tVecMcad);
|
92 | 113 | [TnodesMcadSeries,TnodesSeries] = synchronize(TnodesMcadSeries,TnodesSeries,'Union');
|
93 | 114 | TnodesMcadSeries.Name = 'Motor-CAD';
|
|
0 commit comments