modelLossyGear

Gear with mesh efficiency and bearing friction (stuck/rolling possible)

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

Parameters

TypeNameDefaultDescription
BooleanuseSupport (from PartialElementaryTwoFlangesAndSupport2)false= true, if support flange enabled, otherwise implicitly grounded
RealratioTransmission 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
SmoothnesssmoothnessSmoothness.LinearSegmentsSmoothness of interpolation in lossTable table
BooleanuseHeatPort (from PartialElementaryConditionalHeatPortWithoutT)false= true, if heatPort is enabled
IntegerUnknown3Value of mode is not known
IntegerFree2Element is not active
IntegerForward1w_a > 0 (forward rolling)
IntegerStuck0w_a = 0 (forward rolling, locked or backward rolling)
IntegerBackward-1w_a < 0 (backward rolling)

Connectors

TypeNameDefaultDescription
Flange_aflange_a (from PartialElementaryTwoFlangesAndSupport2)Flange of left shaft
Flange_bflange_b (from PartialElementaryTwoFlangesAndSupport2)Flange of right shaft
Supportsupport (from PartialElementaryTwoFlangesAndSupport2)Support/housing of component
HeatTransfer.Interfaces.HeatPort_aheatPort (from PartialElementaryConditionalHeatPortWithoutT)Optional port to which dissipated losses are transported in form of heat

Components

TypeNameDefaultDescription
SI.PowerlossPower (from PartialElementaryConditionalHeatPortWithoutT)Loss power leaving component via heatPort (> 0, if heat is flowing out of component)
SI.Anglephi_aAngle between left shaft flange and support
SI.Anglephi_bAngle between right shaft flange and support
RealsaPath parameter for acceleration and torque loss
SI.AngularVelocityw_aAngular velocity of flange_a with respect to support
SI.AngularAccelerationa_aAngular acceleration of flange_a with respect to support
Real[1,4]interpolation_resultResult of interpolation in lossTable (= [eta_mf1, eta_mf2, tau_bf1, tau_bf2])
Realeta_mf1Mesh efficiency in case that flange_a is driving
Realeta_mf2Mesh efficiency in case that flange_b is driving
SI.Torquetau_bf_aBearing friction torque on flange_a side
SI.Torquetau_etaTorque 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.Torquetau_bf1Absolute 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.Torquetau_bf2Absolute 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.Torquequadrant1Torque loss if w_a > 0 and flange_a.tau >= 0
SI.Torquequadrant2Torque loss if w_a > 0 and flange_a.tau < 0
SI.Torquequadrant3Torque loss if w_a < 0 and flange_a.tau >= 0
SI.Torquequadrant4Torque loss if w_a < 0 and flange_a.tau < 0
SI.Torquequadrant1_pTorque loss at w_a = 0+ to determine driving side (flange_a.tau >= 0)
SI.Torquequadrant2_pTorque loss at w_a = 0+ to determine driving side (flange_a.tau < 0)
SI.Torquequadrant3_mTorque loss at w_a = 0- to determine driving side (flange_a.tau >=0)
SI.Torquequadrant4_mTorque loss at w_a = 0- to determine driving side (flange_a.tau < 0)
SI.TorquetauLossTorque loss due to friction in the gear teeth and in the bearings
SI.TorquetauLossMaxTorque loss for positive speed
SI.TorquetauLossMinTorque loss for negative speed
SI.TorquetauLossMax_pTorque loss for positive speed
SI.TorquetauLossMin_mTorque loss for negative speed
Booleantau_aPosOnly for backwards compatibility (was previously: true, if torque of flange_a is not negative)
Booleantau_etaPos= true, if torque tau_eta is not negative
BooleanstartForward= true, if starting to roll forward
BooleanstartBackward= true, if starting to roll backward
Booleanlocked= true, if gear is locked
Booleanideal= true, if losses are neglected (that is lossTable = [0, 1, 1, 0, 0])
IntegermodeMode of friction element (unknown, not active, forward/backward rolling, stuck)
SI.Torquetau_eta_ptau_eta assuming positive omega
SI.Torquetau_eta_mtau_eta assuming negative omega