Skip to content

Commit

Permalink
Eddy current sources (modelica#3976)
Browse files Browse the repository at this point in the history
  • Loading branch information
AHaumer committed Jun 10, 2022
1 parent 8690ef6 commit 569c525
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 16 deletions.
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

0 comments on commit 569c525

Please sign in to comment.