modelLossyGear
Extends from Modelica.Mechanics.Rotational.Icons.Gear (Icon of a rotational gear), Modelica.Mechanics.Rotational.Interfaces.PartialElementaryTwoFlangesAndSupport2 (Partial model for a component with two rotational 1-dim. shaft flanges and a support used for textual modeling, i.e., for elementary models), Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT (Partial model to include a conditional HeatPort in order to dissipate losses, used for textual modeling, i.e., for elementary models).
Information
This component models the gear ratio and the losses of a standard gear box in a reliable way including the stuck phases that may occur at zero speed. The gear boxes that can be handled are fixed in the ground or on a moving support, have one input and one output shaft, and are essentially described by the equations:
flange_a.phi = i*flange_b.phi;
-(flange_b.tau - tau_bf_b) = i*eta_mf*(flange_a.tau - tau_bf_a);
// or -flange_b.tau = i*eta_mf*(flange_a.tau - tau_bf_a - tau_bf_b/(i*eta_mf));
where
- i is the constant gear ratio,
- eta_mf = eta_mf(w_a) is the mesh efficiency due to the friction between the teeth of the gear wheels,
- tau_bf_a = tau_bf_a(w_a) is the bearing friction torque on the flange_a side,
- tau_bf_b = tau_bf_b(w_a) is the bearing friction torque on the flange_b side, and
- w_a = der(flange_a.phi) is the speed of flange_a
The loss terms "eta_mf", "tau_bf_a" and "tau_bf_b" are functions of the absolute value of the input shaft speed w_a and of the energy flow direction. They are defined by parameter lossTable[:,5] where the columns of this table have the following meaning:
| |w_a| | eta_mf1 | eta_mf2 | |tau_bf1| | |tau_bf2| |
| … | … | … | … | … |
| … | … | … | … | … |
with
| |w_a| | Absolute value of angular velocity of input shaft flange_a |
| eta_mf1 | Mesh efficiency in case that flange_a is driving |
| eta_mf2 | Mesh efficiency in case that flange_b is driving |
| |tau_bf1| | Absolute resultant bearing friction torque with respect to flange_a
in case that flange_a is driving (= |tau_bf_a*eta_mf1 + tau_bf_b/i|) |
| |tau_bf2| | Absolute resultant bearing friction torque with respect to flange_a
in case that flange_b is driving (= |tau_bf_a/eta_mf2 + tau_bf_b/i|) |
With these variables, the mesh efficiency and the bearing friction are formally defined as:
if (flange_a.tau - tau_bf_a)*w_a > 0 or
(flange_a.tau - tau_bf_a) == 0 and w_a > 0 then
eta_mf := eta_mf1
tau_bf := tau_bf1
elseif (flange_a.tau - tau_bf_a)*w_a < 0 or
(flange_a.tau - tau_bf_a) == 0 and w_a < 0 then
eta_mf := 1/eta_mf2
tau_bf := tau_bf2
else // w_a == 0
eta_mf and tau_bf are computed such that der(w_a) = 0
end if;
-flange_b.tau = i*(eta_mf*flange_a.tau - tau_bf);
Note, that the losses are modeled in a physically meaningful way taking into account that at zero speed the movement may be locked due to the friction in the gear teeth and/or in the bearings. Due to this important property, this component can be used in situations where the combination of the components Modelica.Mechanics.Rotational.IdealGear and Modelica.Mechanics.Rotational.GearEfficiency will fail because, e.g., chattering occurs when using the Modelica.Mechanics.Rotational.GearEfficiency model.
Acknowledgement
- The essential idea to model efficiency in this way is from Christoph Pelchen, ZF Friedrichshafen.
- The article (Pelchen et.al. 2002), see Literature below, and the first implementation of LossyGear (up to version 3.1 of package Modelica) contained a bug leading to a non-converging solution in cases where the driving side is not obvious. This was pointed out by Christian Bertsch and Max Westenkirchner, Bosch, and Christian Bertsch proposed a concrete solution how to fix this bug, see Literature below.
Literature
- Pelchen C., Schweiger C., and Otter M.: "Modeling and Simulating the Efficiency of Gearboxes and of Planetary Gearboxes," in Proceedings of the 2nd International Modelica Conference, Oberpfaffenhofen, Germany, pp. 257-266, The Modelica Association and Institute of Robotics and Mechatronics, Deutsches Zentrum für Luft- und Raumfahrt e. V., March 18-19, 2002.
- Bertsch C. (2009): "Problem with model LossyGear and a proposed solution", Ticket #108, Sept. 11, 2009.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | useSupport (from PartialElementaryTwoFlangesAndSupport2) | false | = true, if support flange enabled, otherwise implicitly grounded |
| Real | ratio | Transmission ratio (flange_a.phi/flange_b.phi) | |
| Real[:,5] | lossTable | [0, 1, 1, 0, 0] | Array for mesh efficiencies and bearing friction depending on speed |
| Smoothness | smoothness | Smoothness.LinearSegments | Smoothness of interpolation in lossTable table |
| Boolean | useHeatPort (from PartialElementaryConditionalHeatPortWithoutT) | false | = true, if heatPort is enabled |
| Integer | Unknown | 3 | Value of mode is not known |
| Integer | Free | 2 | Element is not active |
| Integer | Forward | 1 | w_a > 0 (forward rolling) |
| Integer | Stuck | 0 | w_a = 0 (forward rolling, locked or backward rolling) |
| Integer | Backward | -1 | w_a < 0 (backward rolling) |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Flange_a | flange_a (from PartialElementaryTwoFlangesAndSupport2) | Flange of left shaft | |
| Flange_b | flange_b (from PartialElementaryTwoFlangesAndSupport2) | Flange of right shaft | |
| Support | support (from PartialElementaryTwoFlangesAndSupport2) | Support/housing of component | |
| HeatTransfer.Interfaces.HeatPort_a | heatPort (from PartialElementaryConditionalHeatPortWithoutT) | Optional port to which dissipated losses are transported in form of heat |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| SI.Power | lossPower (from PartialElementaryConditionalHeatPortWithoutT) | Loss power leaving component via heatPort (> 0, if heat is flowing out of component) | |
| SI.Angle | phi_a | Angle between left shaft flange and support | |
| SI.Angle | phi_b | Angle between right shaft flange and support | |
| Real | sa | Path parameter for acceleration and torque loss | |
| SI.AngularVelocity | w_a | Angular velocity of flange_a with respect to support | |
| SI.AngularAcceleration | a_a | Angular acceleration of flange_a with respect to support | |
| Real[1,4] | interpolation_result | Result of interpolation in lossTable (= [eta_mf1, eta_mf2, tau_bf1, tau_bf2]) | |
| Real | eta_mf1 | Mesh efficiency in case that flange_a is driving | |
| Real | eta_mf2 | Mesh efficiency in case that flange_b is driving | |
| SI.Torque | tau_bf_a | Bearing friction torque on flange_a side | |
| SI.Torque | tau_eta | Torque that determines the driving side (= if forwardSliding then flange_a.tau-tau_bf_a else if backwardSliding then flange_a.tau+tau_bf_a else flange_a.tau) | |
| SI.Torque | tau_bf1 | Absolute resultant bearing friction torque with respect to flange_a in case that flange_a is driving (= |tau_bf_a*eta_mf1 + tau_bf_b/i|) | |
| SI.Torque | tau_bf2 | Absolute resultant bearing friction torque with respect to flange_a in case that flange_b is driving (= |tau_bf_a/eta_mf2 + tau_bf_b/i|) | |
| SI.Torque | quadrant1 | Torque loss if w_a > 0 and flange_a.tau >= 0 | |
| SI.Torque | quadrant2 | Torque loss if w_a > 0 and flange_a.tau < 0 | |
| SI.Torque | quadrant3 | Torque loss if w_a < 0 and flange_a.tau >= 0 | |
| SI.Torque | quadrant4 | Torque loss if w_a < 0 and flange_a.tau < 0 | |
| SI.Torque | quadrant1_p | Torque loss at w_a = 0+ to determine driving side (flange_a.tau >= 0) | |
| SI.Torque | quadrant2_p | Torque loss at w_a = 0+ to determine driving side (flange_a.tau < 0) | |
| SI.Torque | quadrant3_m | Torque loss at w_a = 0- to determine driving side (flange_a.tau >=0) | |
| SI.Torque | quadrant4_m | Torque loss at w_a = 0- to determine driving side (flange_a.tau < 0) | |
| SI.Torque | tauLoss | Torque loss due to friction in the gear teeth and in the bearings | |
| SI.Torque | tauLossMax | Torque loss for positive speed | |
| SI.Torque | tauLossMin | Torque loss for negative speed | |
| SI.Torque | tauLossMax_p | Torque loss for positive speed | |
| SI.Torque | tauLossMin_m | Torque loss for negative speed | |
| Boolean | tau_aPos | Only for backwards compatibility (was previously: true, if torque of flange_a is not negative) | |
| Boolean | tau_etaPos | = true, if torque tau_eta is not negative | |
| Boolean | startForward | = true, if starting to roll forward | |
| Boolean | startBackward | = true, if starting to roll backward | |
| Boolean | locked | = true, if gear is locked | |
| Boolean | ideal | = true, if losses are neglected (that is lossTable = [0, 1, 1, 0, 0]) | |
| Integer | mode | Mode of friction element (unknown, not active, forward/backward rolling, stuck) | |
| SI.Torque | tau_eta_p | tau_eta assuming positive omega | |
| SI.Torque | tau_eta_m | tau_eta assuming negative omega |