diff --git a/Modelica/Mechanics/Rotational/Examples/EddyCurrentBrake.mo b/Modelica/Mechanics/Rotational/Examples/EddyCurrentBrake.mo index e96a58aeff..bdaee86dd0 100644 --- a/Modelica/Mechanics/Rotational/Examples/EddyCurrentBrake.mo +++ b/Modelica/Mechanics/Rotational/Examples/EddyCurrentBrake.mo @@ -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, @@ -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=" diff --git a/Modelica/Mechanics/Rotational/Sources/EddyCurrentTorque.mo b/Modelica/Mechanics/Rotational/Sources/EddyCurrentTorque.mo index a455e36674..7496f4c535 100644 --- a/Modelica/Mechanics/Rotational/Sources/EddyCurrentTorque.mo +++ b/Modelica/Mechanics/Rotational/Sources/EddyCurrentTorque.mo @@ -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) @@ -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, @@ -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="
This is a simple model of a rotational eddy current brake. The torque versus speed characteristic is defined by Kloss' equation.
+The influence of excitation is either constant (useExcitationInput=false
) or given by the optional input excitation
(useExcitationInput=true
).
+Note that maximum torque depends on square of excitation (magnetic field).
Thermal behaviour:
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.
If the heatPort is not used (useHeatPort = false), the operational temperature remains at the given temperature T.
diff --git a/Modelica/Mechanics/Translational/Examples/EddyCurrentBrake.mo b/Modelica/Mechanics/Translational/Examples/EddyCurrentBrake.mo
index 5a81142d11..731c53329c 100644
--- a/Modelica/Mechanics/Translational/Examples/EddyCurrentBrake.mo
+++ b/Modelica/Mechanics/Translational/Examples/EddyCurrentBrake.mo
@@ -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,
@@ -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="
diff --git a/Modelica/Mechanics/Translational/Sources/EddyCurrentForce.mo b/Modelica/Mechanics/Translational/Sources/EddyCurrentForce.mo
index 40004d538c..afd1da1a3b 100644
--- a/Modelica/Mechanics/Translational/Sources/EddyCurrentForce.mo
+++ b/Modelica/Mechanics/Translational/Sources/EddyCurrentForce.mo
@@ -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,
@@ -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="
This is a simple model of a translational eddy current brake. The force versus speed characteristic is defined by Kloss' equation.
+The influence of excitation is either constant (useExcitationInput=false
) or given by the optional input excitation
(useExcitationInput=true
).
+Note that maximum force depends on square of excitation (magnetic field).
Thermal behaviour:
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.
If the heatPort is not used (useHeatPort = false), the operational temperature remains at the given temperature T.