Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Eddy current sources #3976

Merged
merged 9 commits into from
Jun 10, 2022
3 changes: 0 additions & 3 deletions Modelica/Electrical/Analog/Examples/DemonstrateLightning.mo
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ model DemonstrateLightning
parameter Modelica.Units.SI.Time T2=350e-6 "Decay time to half value";
Sources.LightningImpulseVoltage lightning1(
approximation=Modelica.Electrical.Analog.Types.ImpulseApproximation.DoubleExp,

V=100e3,
T1=T1,
T2=T2,
Expand All @@ -16,15 +15,13 @@ model DemonstrateLightning
origin={-70,40})));
Sources.LightningImpulseCurrent lightning2(
approximation=Modelica.Electrical.Analog.Types.ImpulseApproximation.Heidler,

I=100e3,
T1=T1,
T2=T2,
startTime=10e-6) annotation (Placement(transformation(
extent={{-10,-10},{10,10}},
rotation=90,
origin={-70,-60})));

Basic.Ground ground1
annotation (Placement(transformation(extent={{-80,0},{-60,20}})));
Basic.Ground ground2
Expand Down
9 changes: 9 additions & 0 deletions Modelica/Mechanics/Rotational/Examples/EddyCurrentBrake.mo
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ within Modelica.Mechanics.Rotational.Examples;
model EddyCurrentBrake "Demonstrate the usage of the rotational eddy current brake"
extends Modelica.Icons.Example;
Modelica.Mechanics.Rotational.Sources.EddyCurrentTorque eddyCurrentTorque(
useExcitationInput=true,
tau_nominal=100,
w_nominal=10,
useSupport=false,
Expand All @@ -19,11 +20,19 @@ model EddyCurrentBrake "Demonstrate the usage of the rotational eddy current bra
extent={{-10,-10},{10,10}},
rotation=180,
origin={-10,-30})));
Blocks.Sources.Ramp ramp(
height=1,
duration=0.1,
offset=0,
startTime=0.1)
annotation (Placement(transformation(extent={{-50,-10},{-30,10}})));
equation
connect(eddyCurrentTorque.flange, inertia.flange_a)
annotation (Line(points={{10,0},{16,0},{20,0}}));
connect(eddyCurrentTorque.heatPort, heatCapacitor.port) annotation (Line(
points={{-10,-10},{-10,-15},{-10,-20}}, color={191,0,0}));
connect(ramp.y, eddyCurrentTorque.excitation)
annotation (Line(points={{-29,0},{-12,0}}, color={0,0,127}));
annotation (
experiment(StopTime=1.0, Interval=0.001),
Documentation(info="<html>
Expand Down
27 changes: 18 additions & 9 deletions Modelica/Mechanics/Rotational/Sources/EddyCurrentTorque.mo
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
within Modelica.Mechanics.Rotational.Sources;
model EddyCurrentTorque "Simple model of a rotational eddy current brake"
import Modelica.Electrical.Machines.Thermal.linearTemperatureDependency;
parameter SI.Torque tau_nominal
"Maximum torque (always braking)";
parameter Boolean useExcitationInput=false "Enable signal input for excitation";
parameter Real constantExcitation=1 "Excitation=1 to reach maximum torque"
annotation(Dialog(enable=not useExcitationInput));
parameter SI.Torque tau_nominal "Maximum torque (always braking)";
parameter SI.AngularVelocity w_nominal(min=Modelica.Constants.eps)
"Nominal speed (leads to maximum torque) at reference temperature";
parameter SI.Temperature TRef(start=293.15)
Expand All @@ -11,18 +13,23 @@ model EddyCurrentTorque "Simple model of a rotational eddy current brake"
Modelica.Electrical.Machines.Thermal.LinearTemperatureCoefficient20
alpha20(start=0) "Temperature coefficient of material";
extends Modelica.Mechanics.Rotational.Interfaces.PartialTorque;
extends
Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPort;
SI.Torque tau
"Accelerating torque acting at flange (= flange.tau)";
SI.AngularVelocity w
"Angular velocity of flange with respect to support (= der(phi))";
extends Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPort;
SI.Torque tau "Accelerating torque acting at flange (= flange.tau)";
SI.AngularVelocity w "Angular velocity of flange with respect to support (= der(phi))";
Real w_normalized "Relative speed w/w_nominal";
Blocks.Interfaces.RealInput excitation = excitationInternal if useExcitationInput
"Excitation"
annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
protected
Real excitationInternal "Excitation";
equation
if not useExcitationInput then
excitationInternal = constantExcitation;
end if;
tau = flange.tau;
w = der(phi);
w_normalized = w/(w_nominal*linearTemperatureDependency(1, TRef, alpha20, TheatPort));
tau = 2*tau_nominal*w_normalized/(1 + w_normalized*w_normalized);
tau = 2*tau_nominal*excitationInternal^2*w_normalized/(1 + w_normalized*w_normalized);
lossPower = tau*w;
annotation (
Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
Expand All @@ -33,6 +40,8 @@ equation
Line(points={{0,0},{-4,-25},{-8,-41},{-12,-48},{-16,-50},{-20,-49},{-24,-46},{-28,-42},{-32,-38},{-36,-34},{-46,-25},{-56,-18},{-66,-12},{-76,-8}}, color={0,0,127}, smooth=Smooth.Bezier)}),
Documentation(info="<html>
<p>This is a simple model of a rotational <strong>eddy current brake</strong>. The torque versus speed characteristic is defined by Kloss' equation.</p>
<p>The influence of excitation is either constant (<code>useExcitationInput=false</code>) or given by the optional input <code>excitation</code> (<code>useExcitationInput=true</code>).
Note that maximum torque depends on square of excitation (magnetic field).</p>
<p><strong>Thermal behaviour:</strong><br>
The resistance of the braking disc is influenced by the actual temperature Theatport, which in turn shifts the speed w_nominal at which the (unchanged) maximum torque occurs.<br>
If the heatPort is not used (useHeatPort = false), the operational temperature remains at the given temperature T.<br>
Expand Down
9 changes: 9 additions & 0 deletions Modelica/Mechanics/Translational/Examples/EddyCurrentBrake.mo
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ model EddyCurrentBrake "Demonstrate the usage of the translational eddy current
extends Modelica.Icons.Example;
Modelica.Mechanics.Translational.Sources.EddyCurrentForce
eddyCurrentForce(
useExcitationInput=true,
f_nominal=100,
v_nominal=10,
useHeatPort=true,
Expand All @@ -19,11 +20,19 @@ model EddyCurrentBrake "Demonstrate the usage of the translational eddy current
extent={{-10,-10},{10,10}},
rotation=180,
origin={-10,-30})));
Blocks.Sources.Ramp ramp(
height=1,
duration=0.1,
offset=0,
startTime=0.1)
annotation (Placement(transformation(extent={{-50,-10},{-30,10}})));
equation
connect(eddyCurrentForce.flange, mass.flange_a)
annotation (Line(points={{10,0},{20,0}}, color={0,127,0}));
connect(eddyCurrentForce.heatPort, heatCapacitor.port) annotation (Line(
points={{-10,-10},{-10,-15},{-10,-20}}, color={191,0,0}));
connect(ramp.y, eddyCurrentForce.excitation)
annotation (Line(points={{-29,0},{-12,0}}, color={0,0,127}));
annotation (
experiment(StopTime=1.0, Interval=0.001),
Documentation(info="<html>
Expand Down
24 changes: 17 additions & 7 deletions Modelica/Mechanics/Translational/Sources/EddyCurrentForce.mo
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
within Modelica.Mechanics.Translational.Sources;
model EddyCurrentForce "Simple model of a translational eddy current brake"
import Modelica.Electrical.Machines.Thermal.linearTemperatureDependency;
parameter SI.Force f_nominal
"Maximum force (always braking)";
parameter Boolean useExcitationInput=false "Enable signal input for excitation";
parameter Real constantExcitation=1 "Excitation=1 to reach maximum force"
annotation(Dialog(enable=not useExcitationInput));
parameter SI.Force f_nominal "Constant maximum force (always braking)";
parameter SI.Velocity v_nominal(min=Modelica.Constants.eps)
"Nominal speed (leads to maximum force) at reference temperature";
parameter SI.Temperature TRef(start=293.15)
"Reference temperature";
parameter
Modelica.Electrical.Machines.Thermal.LinearTemperatureCoefficient20
parameter Modelica.Electrical.Machines.Thermal.LinearTemperatureCoefficient20
alpha20(start=0) "Temperature coefficient of material";
extends Modelica.Mechanics.Translational.Interfaces.PartialForce;
extends Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPort;
SI.Velocity v
"Velocity of flange with respect to support (= der(s))";
SI.Velocity v "Velocity of flange with respect to support (= der(s))";
Real v_normalized "Relative speed v/v_nominal";
Blocks.Interfaces.RealInput excitation = excitationInternal if useExcitationInput
"Excitation"
annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
protected
Real excitationInternal "Excitation";
equation
if not useExcitationInput then
excitationInternal = constantExcitation;
end if;
v = der(s);
v_normalized = v/(v_nominal*linearTemperatureDependency(1, TRef, alpha20, TheatPort));
f = 2*f_nominal*v_normalized/(1 + v_normalized*v_normalized);
f = 2*f_nominal*excitationInternal^2*v_normalized/(1 + v_normalized*v_normalized);
lossPower = f*v;
annotation (
Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,
Expand All @@ -29,6 +37,8 @@ equation
Line(points={{0,0},{-4,-25},{-8,-41},{-12,-48},{-16,-50},{-20,-49},{-24,-46},{-28,-42},{-32,-38},{-36,-34},{-46,-25},{-56,-18},{-66,-12},{-76,-8}}, color={0,0,127}, smooth=Smooth.Bezier)}),
Documentation(info="<html>
<p>This is a simple model of a translational <strong>eddy current brake</strong>. The force versus speed characteristic is defined by Kloss' equation.</p>
<p>The influence of excitation is either constant (<code>useExcitationInput=false</code>) or given by the optional input <code>excitation</code> (<code>useExcitationInput=true</code>).
Note that maximum force depends on square of excitation (magnetic field).</p>
<p><strong>Thermal behaviour:</strong><br>
The resistance of the braking fin is influenced by the actual temperature Theatport, which in turn shifts the speed v_nominal at which the (unchanged) maximum torque occurs.<br>
If the heatPort is not used (useHeatPort = false), the operational temperature remains at the given temperature T.<br>
Expand Down