| 1 | within ;
|
|---|
| 2 | package DC_Drive "Library of controlled DCPM drives"
|
|---|
| 3 | extends Modelica.Icons.Package;
|
|---|
| 4 | package Examples "Application and test examples of DCPM drives"
|
|---|
| 5 | extends Modelica.Icons.ExamplesPackage;
|
|---|
| 6 |
|
|---|
| 7 | model DCPMCurrentControlled "DCPM drive fed by ideal DC/DC inverter"
|
|---|
| 8 | extends Modelica.Icons.Example;
|
|---|
| 9 | import Modelica.Constants.pi;
|
|---|
| 10 | parameter DriveParameters.DriveData driveData(redeclare
|
|---|
| 11 | DC_Drive.DriveParameters.MachineDataSets.M48V machineData)
|
|---|
| 12 | annotation (Placement(transformation(extent={{-80,60},{-60,80}})));
|
|---|
| 13 | Modelica.Electrical.Analog.Basic.Ground ground annotation (Placement(
|
|---|
| 14 | transformation(
|
|---|
| 15 | extent={{-10,-10},{10,10}},
|
|---|
| 16 | rotation=270,
|
|---|
| 17 | origin={0,-40})));
|
|---|
| 18 | Modelica.Blocks.Sources.Step iRef(
|
|---|
| 19 | height=driveData.machineData.IANominal,
|
|---|
| 20 | offset=0,
|
|---|
| 21 | startTime=0.1)
|
|---|
| 22 | annotation (Placement(transformation(extent={{-80,10},{-60,30}})));
|
|---|
| 23 | Modelica.Mechanics.Rotational.Components.Inertia inertiaLoad(
|
|---|
| 24 | J=driveData.JL,
|
|---|
| 25 | phi(fixed=false, start=0),
|
|---|
| 26 | w(fixed=false, start=0))
|
|---|
| 27 | annotation (Placement(transformation(extent={{40,-70},{60,-50}})));
|
|---|
| 28 | Modelica.Mechanics.Rotational.Sources.LinearSpeedDependentTorque
|
|---|
| 29 | linearSpeedDependentTorque(
|
|---|
| 30 | tau_nominal=-driveData.machineData.tauNominal,
|
|---|
| 31 | TorqueDirection=false,
|
|---|
| 32 | w_nominal=driveData.machineData.wNominal)
|
|---|
| 33 | annotation (Placement(transformation(extent={{90,-70},{70,-50}})));
|
|---|
| 34 | Components.DCPM dCPM(machineData=driveData.machineData)
|
|---|
| 35 | annotation (Placement(transformation(extent={{10,-70},{30,-50}})));
|
|---|
| 36 | Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage
|
|---|
| 37 | annotation (Placement(transformation(extent={{30,-10},{10,10}})));
|
|---|
| 38 | Modelica.Electrical.Analog.Sensors.CurrentSensor currentSensor
|
|---|
| 39 | annotation (Placement(transformation(
|
|---|
| 40 | extent={{-10,10},{10,-10}},
|
|---|
| 41 | rotation=90,
|
|---|
| 42 | origin={10,-20})));
|
|---|
| 43 | Modelica.Blocks.Continuous.FirstOrder firstOrder(k=1, T=driveData.Td)
|
|---|
| 44 | annotation (Placement(transformation(extent={{-10,10},{10,30}})));
|
|---|
| 45 | Modelica.Electrical.Machines.Examples.ControlledDCDrives.Utilities.LimitedPI
|
|---|
| 46 | limitedPI(
|
|---|
| 47 | k=driveData.controllerData.kpI,
|
|---|
| 48 | Ti=driveData.controllerData.TiI,
|
|---|
| 49 | useFF=true,
|
|---|
| 50 | KFF=driveData.machineData.kPhi,
|
|---|
| 51 | yMax=driveData.VBat)
|
|---|
| 52 | annotation (Placement(transformation(extent={{-40,10},{-20,30}})));
|
|---|
| 53 | equation
|
|---|
| 54 | connect(dCPM.shaft, inertiaLoad.flange_a)
|
|---|
| 55 | annotation (Line(points={{30,-60},{40,-60}},
|
|---|
| 56 | color={0,0,0}));
|
|---|
| 57 | connect(linearSpeedDependentTorque.flange, inertiaLoad.flange_b)
|
|---|
| 58 | annotation (Line(points={{70,-60},{60,-60}}, color={0,0,0}));
|
|---|
| 59 | connect(ground.p, dCPM.pin_n) annotation (Line(points={{10,-40},{14,-40},
|
|---|
| 60 | {14,-50}}, color={0,0,255}));
|
|---|
| 61 | connect(ground.p, currentSensor.p)
|
|---|
| 62 | annotation (Line(points={{10,-40},{10,-30}}, color={0,0,255}));
|
|---|
| 63 | connect(currentSensor.n, signalVoltage.n)
|
|---|
| 64 | annotation (Line(points={{10,-10},{10,0}}, color={0,0,255}));
|
|---|
| 65 | connect(signalVoltage.p, dCPM.pin_p) annotation (Line(points={{30,0},{30,
|
|---|
| 66 | -40},{26,-40},{26,-50}}, color={0,0,255}));
|
|---|
| 67 | connect(firstOrder.y, signalVoltage.v)
|
|---|
| 68 | annotation (Line(points={{11,20},{20,20},{20,12}}, color={0,0,127}));
|
|---|
| 69 | connect(limitedPI.y, firstOrder.u)
|
|---|
| 70 | annotation (Line(points={{-19,20},{-12,20}}, color={0,0,127}));
|
|---|
| 71 | connect(iRef.y, limitedPI.u)
|
|---|
| 72 | annotation (Line(points={{-59,20},{-42,20}}, color={0,0,127}));
|
|---|
| 73 | connect(currentSensor.i, limitedPI.u_m) annotation (Line(points={{-1,-20},
|
|---|
| 74 | {-36,-20},{-36,8}}, color={0,0,127}));
|
|---|
| 75 | connect(dCPM.w, limitedPI.feedForward)
|
|---|
| 76 | annotation (Line(points={{9,-60},{-30,-60},{-30,8}}, color={0,0,127}));
|
|---|
| 77 | annotation (experiment(
|
|---|
| 78 | StopTime=1,
|
|---|
| 79 | Interval=0.0001,
|
|---|
| 80 | Tolerance=1e-06));
|
|---|
| 81 | end DCPMCurrentControlled;
|
|---|
| 82 | end Examples;
|
|---|
| 83 |
|
|---|
| 84 | package Components "Components for DCPM drives"
|
|---|
| 85 | extends Modelica.Icons.Package;
|
|---|
| 86 | model DCPM
|
|---|
| 87 | extends Modelica.Electrical.Machines.Icons.Machine;
|
|---|
| 88 | Modelica.Electrical.Analog.Basic.Resistor resistor(R=machineData.RA,
|
|---|
| 89 | T_ref=293.15)
|
|---|
| 90 | annotation (Placement(transformation(extent={{-10,-10},{10,10}},
|
|---|
| 91 | rotation=270,
|
|---|
| 92 | origin={0,60})));
|
|---|
| 93 | Modelica.Electrical.Analog.Basic.Inductor inductor(L=machineData.LA)
|
|---|
| 94 | annotation (Placement(transformation(extent={{-10,-10},{10,10}},
|
|---|
| 95 | rotation=270,
|
|---|
| 96 | origin={0,30})));
|
|---|
| 97 | Modelica.Electrical.Analog.Basic.EMF emf(k=machineData.kPhi)
|
|---|
| 98 | annotation (Placement(
|
|---|
| 99 | transformation(
|
|---|
| 100 | extent={{-10,-10},{10,10}},
|
|---|
| 101 | rotation=0,
|
|---|
| 102 | origin={0,0})));
|
|---|
| 103 | Modelica.Mechanics.Rotational.Components.Inertia inertia(J=machineData.J)
|
|---|
| 104 | annotation (Placement(transformation(extent={{40,-10},{60,10}})));
|
|---|
| 105 | Modelica.Electrical.Analog.Interfaces.PositivePin pin_p "Positive armature pin"
|
|---|
| 106 | annotation (Placement(transformation(extent={{50,90},{70,110}})));
|
|---|
| 107 | Modelica.Electrical.Analog.Interfaces.NegativePin pin_n "Negative armature pin"
|
|---|
| 108 | annotation (Placement(transformation(extent={{-70,90},{-50,110}})));
|
|---|
| 109 | Modelica.Mechanics.Rotational.Interfaces.Flange_a shaft "Shaft"
|
|---|
| 110 | annotation (Placement(transformation(extent={{90,-10},{110,10}})));
|
|---|
| 111 | Modelica.Mechanics.Rotational.Sensors.SpeedSensor speedSensor annotation (
|
|---|
| 112 | Placement(transformation(
|
|---|
| 113 | extent={{-10,-10},{10,10}},
|
|---|
| 114 | rotation=270,
|
|---|
| 115 | origin={80,-30})));
|
|---|
| 116 | Modelica.Blocks.Interfaces.RealOutput w annotation (Placement(transformation(
|
|---|
| 117 | extent={{-10,-10},{10,10}},
|
|---|
| 118 | rotation=180,
|
|---|
| 119 | origin={-110,0})));
|
|---|
| 120 | parameter DriveParameters.MachineDataSets.MachineData machineData
|
|---|
| 121 | annotation (Placement(transformation(extent={{60,40},{80,60}})));
|
|---|
| 122 | equation
|
|---|
| 123 | connect(resistor.n, inductor.p)
|
|---|
| 124 | annotation (Line(points={{-1.77636e-15,50},{0,50},{0,40},{1.77636e-15,40}},
|
|---|
| 125 | color={0,0,255}));
|
|---|
| 126 | connect(inductor.n, emf.p)
|
|---|
| 127 | annotation (Line(points={{-1.77636e-15,20},{0,20},{0,10}},
|
|---|
| 128 | color={0,0,255}));
|
|---|
| 129 | connect(emf.flange, inertia.flange_a)
|
|---|
| 130 | annotation (Line(points={{10,0},{40,0}}, color={0,0,0}));
|
|---|
| 131 | connect(resistor.p, pin_p) annotation (Line(points={{0,70},{0,80},{60,80},{60,
|
|---|
| 132 | 100}}, color={0,0,255}));
|
|---|
| 133 | connect(emf.n, pin_n) annotation (Line(points={{0,-10},{0,-20},{-60,-20},{-60,
|
|---|
| 134 | 100}}, color={0,0,255}));
|
|---|
| 135 | connect(inertia.flange_b, shaft)
|
|---|
| 136 | annotation (Line(points={{60,0},{100,0}}, color={0,0,0}));
|
|---|
| 137 | connect(inertia.flange_b, speedSensor.flange)
|
|---|
| 138 | annotation (Line(points={{60,0},{80,0},{80,-20}}, color={0,0,0}));
|
|---|
| 139 | connect(speedSensor.w, w) annotation (Line(points={{80,-41},{80,-60},{-80,-60},
|
|---|
| 140 | {-80,0},{-110,0}}, color={0,0,127}));
|
|---|
| 141 | annotation (
|
|---|
| 142 | Icon(graphics={Text(
|
|---|
| 143 | extent={{-100,-100},{100,-140}},
|
|---|
| 144 | lineColor={28,108,200},
|
|---|
| 145 | textString="%name")}));
|
|---|
| 146 | end DCPM;
|
|---|
| 147 |
|
|---|
| 148 | end Components;
|
|---|
| 149 |
|
|---|
| 150 | package DriveParameters "Library with drive parameter data sets"
|
|---|
| 151 | extends Modelica.Icons.RecordsPackage;
|
|---|
| 152 | record DriveData
|
|---|
| 153 | extends Modelica.Icons.Record;
|
|---|
| 154 | import Modelica.Constants.pi;
|
|---|
| 155 | replaceable parameter DC_Drive.DriveParameters.MachineDataSets.MachineData machineData
|
|---|
| 156 | annotation (choicesAllMatching=true, Placement(transformation(extent={{-10,40},{10,60}})));
|
|---|
| 157 | parameter ControllerData controllerData(
|
|---|
| 158 | kpI=machineData.LA/(2*Td),
|
|---|
| 159 | TiI=machineData.LA/machineData.RA,
|
|---|
| 160 | Tsub=2*Td,
|
|---|
| 161 | kpw=(machineData.J + JL)/(2*controllerData.Tsub),
|
|---|
| 162 | Tiw=4*controllerData.Tsub)
|
|---|
| 163 | annotation (Placement(transformation(extent={{-10,0},{10,20}})));
|
|---|
| 164 | parameter Modelica.SIunits.Inertia JL=machineData.J "Load inertia";
|
|---|
| 165 | parameter Modelica.SIunits.Voltage VBat=1.2*machineData.VANominal "Battery voltage";
|
|---|
| 166 | parameter Modelica.SIunits.Frequency fSwitch=1e3 "Switching frequency";
|
|---|
| 167 | parameter Modelica.SIunits.Time Td=0.5/fSwitch "Dead time of inverter"
|
|---|
| 168 | annotation(Dialog(enable=false));
|
|---|
| 169 | annotation(defaultComponentPrefixes="parameter", defaultComponentName="driveData");
|
|---|
| 170 | end DriveData;
|
|---|
| 171 |
|
|---|
| 172 | record ControllerData
|
|---|
| 173 | extends Modelica.Icons.Record;
|
|---|
| 174 | parameter Real kpI "Proportional gain of current controller";
|
|---|
| 175 | parameter Modelica.SIunits.Time TiI "Integral time constant of current controller";
|
|---|
| 176 | parameter Modelica.SIunits.Time Tsub "Substitute time constant";
|
|---|
| 177 | parameter Real kpw "Porportional gain of speed controller";
|
|---|
| 178 | parameter Modelica.SIunits.Time Tiw "Integral time constant of speed controller";
|
|---|
| 179 | annotation(defaultComponentPrefixes="parameter", defaultComponentName="controllerData");
|
|---|
| 180 | end ControllerData;
|
|---|
| 181 |
|
|---|
| 182 | package MachineDataSets
|
|---|
| 183 | extends Modelica.Icons.RecordsPackage;
|
|---|
| 184 | record MachineData
|
|---|
| 185 | extends Modelica.Icons.Record;
|
|---|
| 186 | import Modelica.Constants.pi;
|
|---|
| 187 | parameter Modelica.SIunits.Voltage VANominal=100 "Nominal armature voltage";
|
|---|
| 188 | parameter Modelica.SIunits.Current IANominal=100 "Nominal armature current";
|
|---|
| 189 | parameter Modelica.SIunits.AngularVelocity wNominal=1425*pi/30 "Nominal speed";
|
|---|
| 190 | parameter Modelica.SIunits.Resistance RA=0.05 "Armature resistance";
|
|---|
| 191 | parameter Modelica.SIunits.Inductance LA=0.0015 "Armature inductance";
|
|---|
| 192 | parameter Modelica.SIunits.Voltage ViNominal=VANominal - RA*IANominal "Nominal induced voltage"
|
|---|
| 193 | annotation(Dialog(enable=false));
|
|---|
| 194 | parameter Modelica.SIunits.ElectricalTorqueConstant kPhi=ViNominal/wNominal "Flux constant";
|
|---|
| 195 | parameter Modelica.SIunits.Inertia J=0.29 "Rotor inertia";
|
|---|
| 196 | parameter Modelica.SIunits.Torque tauNominal=kPhi*IANominal "Nominal torque"
|
|---|
| 197 | annotation(Dialog(enable=false));
|
|---|
| 198 | annotation(defaultComponentPrefixes="parameter", defaultComponentName="machineData");
|
|---|
| 199 | end MachineData;
|
|---|
| 200 |
|
|---|
| 201 | record M48V
|
|---|
| 202 | import Modelica.Constants.pi;
|
|---|
| 203 | extends DC_Drive.DriveParameters.MachineDataSets.MachineData(
|
|---|
| 204 | VANominal=48,
|
|---|
| 205 | IANominal=25,
|
|---|
| 206 | wNominal=3500*pi/30,
|
|---|
| 207 | RA=0.24,
|
|---|
| 208 | LA=0.004,
|
|---|
| 209 | J=0.0008);
|
|---|
| 210 | annotation(defaultComponentPrefixes="parameter", defaultComponentName="machineData");
|
|---|
| 211 | end M48V;
|
|---|
| 212 | end MachineDataSets;
|
|---|
| 213 | end DriveParameters;
|
|---|
| 214 | annotation (uses(Modelica(version="3.2.3")));
|
|---|
| 215 | end DC_Drive;
|
|---|