System in Analysis

The complete example code is available here.
The mechanical powertrain to be studied is the one described in the 1 - Simple Powertrain example.

Model Set Up

We want to study the effect of a more complex external torque applied to the last gear in the powertrain. This complex torque has 4 main components:

  1. a 200 mNm constant value

  2. a periodic component dependent on the last gear’s angular position, with a 60 rad period and an 80 mNm amplitude, due to the presence of cams in the mechanism

  3. a component proportional to the square of the last gear’s angular speed, with a 2 mNm s²/rad², due to the effect of air friction

  4. a periodic component dependent on the simulation time, with a 2 sec period and a 20 mNm amplitude, which accounts for a load which depends periodically on time

import numpy as np

def ext_torque(time, angular_position, angular_speed):
    return Torque(
        value = 200 +
        80*angular_position.sin(frequency=1/60) +
        2*angular_speed.to('rad/s').value**2 +
        20*np.sin(2*np.pi/3*time.to('sec').value),
        unit = 'mNm'
    )


gear_6.external_torque = ext_torque

The remaining set-ups of the model stay the same.

Results Analysis

We can get a snapshot of the system at a particular time of interest:

powertrain.snapshot(
    target_time=Time(10, 'sec'),
    angular_position_unit='rot',
    torque_unit='mNm',
    driving_torque_unit='mNm',
    load_torque_unit='mNm'
)
Mechanical Powertrain Status at Time = 10 sec
          angular position (rot)  angular speed (rad/s)  angular acceleration (rad/s^2)  torque (mNm)  driving torque (mNm)  load torque (mNm)  pwm
motor                1831.919043            1375.840709                        5.011918      0.058805              1.241126           1.182321  1.0
flywheel             1831.919043            1375.840709                        5.011918      0.058805              1.241126           1.182321
gear 1               1831.919043            1375.840709                        5.011918      0.058805              1.241126           1.182321
gear 2                228.989880             171.980089                        0.626490      0.423395              8.936107           8.512712
gear 3                228.989880             171.980089                        0.626490      0.423395              8.936107           8.512712
gear 4                 38.164980              28.663348                        0.104415      2.286335             48.254979          45.968644
gear 5                 38.164980              28.663348                        0.104415      2.286335             48.254979          45.968644
gear 6                  7.632996               5.732670                        0.020883     10.288508            217.147407         206.858899

We can get a more general view of the system by plotting the time variables and focus the plot only on interesting elements and variables. We can also specify a more convenient unit to use when plotting torques:

powertrain.plot(
    elements=['gear 6', motor],
    variables=['torque', 'driving torque', 'angular speed', 'load torque'],
    torque_unit='mNm',
    figsize=(8, 6)
)

We can appreciate the complex shape of the load torque and its effect on the system. There is a start-up transient up until 10 seconds from the simulation start, then the system reaches a dynamic equilibrium condition, where there are fluctuations in the external torque, but the angular speed mean is constant.
As time passes, the driving torque on the gear 6 equals the load torque mean value and, as a result, the net torque tends to zero, with small oscillations around this value. The same happens on the motor except for a gap between driving and load torque, due to the gear mating efficiency.