Motors#

class SimpleDcMotor(**kwds)#
Creates a simple DC motor.

SimpleDcMotor is an aggregate of the following electomechanical components:

  • Stator

  • Rotor

  • SimpleDCCircuit

The electric circuit of the armature and the free body diagram of the rotor are shown in the following picture:

SimpleDcMotor.

SimpleDcMotor components.#

For more information, see Comment 1.

Example

Create a simple DC motor.#
from msolve import *
from msolve.machinery.motor import SimpleDcMotor

model = Model()

ground = Part(ground=True)
global_ref = Marker(body=ground)

units = Units()
gravity = Accgrav(kgrav=-9.80665)

ref_marker = Marker(body=ground, qp=[0.01, 0, 0], reuler=[Math.radians(90), Math.radians(-90), 0])

motor = SimpleDcMotor(rm=ref_marker,
                      stator_base=ground,
                      stator_length=0.05,
                      stator_radius=0.03,
                      stator_mass=0.05,
                      stator_ip=[1e4, 1e4, 1e4, 0, 0, 0],
                      rotor_length=0.04,
                      rotor_radius=0.025,
                      rotor_mass=0.05,
                      rotor_ip=[5.15e-7, 5.15e-7, 5.15e-7, 0, 0, 0],
                      voltage=6.0,
                      resistance=1.90,
                      inductance=1.01e-3,
                      torque_constant=0.007,
                      viscous_friction=4.83e-7,
                      coulomb_friction=0.0009,
                      steady_state=False
                      )

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

coulomb_friction

Double

0.0

id

Int

Auto

inductance

Double

\(L\)

0.0

label

Str

name

Str

qg

Location

resistance

Double

\(R\)

0.0

reuler

Angles

rm

Reference - Marker

\(\checkmark\)

rotor_base

Reference - Body

rotor_flex_node

Int

0

rotor_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length

Double

0.0

rotor_mass

Double

0.0

rotor_radius

Double

0.0

stator_base

Reference - Body

stator_flex_node

Int

0

stator_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length

Double

0.0

stator_mass

Double

0.0

stator_radius

Double

0.0

steady_state

Bool

False

torque_constant

Double

\(K_{T}\)

0.0

viscous_friction

Double

0.0

voltage

Function

\(V\)

\(\checkmark\)

voltage_ic

Double

0.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

coulomb_friction#

The motor coulomb friction torque.

Type=Double, Default=0.0

id#

The id of the object.

Type=Int

inductance#

The motor inductance.

Type=Double, Default=0.0

label#

The label of the composite element.

Type=Str

name#

Defines a nametag for the object.

Type=Str

qg#

The position of the composite element.

Type=Location

resistance#

The motor resistance.

Type=Double, Default=0.0

reuler#

The orientation of the composite element.

Type=Angles

rm#

The reference marker of the composite element.

Type=Reference (Marker), Required

rotor_base#

Type=Reference (Body)

rotor_flex_node#

Interface node id on rotor attaching body, in case it is flexible.

Type=Int, Default=0

rotor_ip#

Inertial property of rotor.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length#

Length of rotor.

Type=Double, Default=0.0

rotor_mass#

Mass of rotor.

Type=Double, Default=0.0

rotor_radius#

Radius of rotor.

Type=Double, Default=0.0

stator_base#

Type=Reference (Body)

stator_flex_node#

Interface node id on stator attaching body, in case it is flexible.

Type=Int, Default=0

stator_ip#

Inertial property of stator.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length#

Length of the stator.

Type=Double, Default=0.0

stator_mass#

Mass of the stator.

Type=Double, Default=0.0

stator_radius#

Radius of the stator.

Type=Double, Default=0.0

steady_state#

True if steady state, neglecting the inductance term.

Type=Bool, Default=False

torque_constant#

The motor torque constant.

Type=Double, Default=0.0

viscous_friction#

The motor viscous friction.

Type=Double, Default=0.0

voltage#

The variable voltage applied to the motor.

Type=Function, Modifiable

voltage_ic#

Type=Double, Default=0.0

class BLDCMotor(**kwds)#
Creates a Brushless DC motor.

The brushless DC motor accomplishes commutation electronically using switches and rotor position feedback to determine when to switch the current.

The stator windings work in conjunction with permanent magnets on the rotor to generate a nearly uniform flux density in the air gap. This permits the stator coils to be driven by a DC voltage, which switches from one stator coil to the next to generate an AC voltage waveform with a trapezoidal shape (in the case of constant input).

Example

Create a brushless DC motor.#
from msolve import *
from msolve.machinery.motor import BLDCMotor

model = Model()

ground = Part(ground=True)
global_ref = Marker(body=ground)

units = Units()
gravity = Accgrav(kgrav=-9.80665)

ref_marker = Marker(body=ground, qp=[0.01, 0, 0], reuler=[Math.radians(90), Math.radians(-90), 0])

motor = BLDCMotor(rm=ref_marker,
                  stator_base=ground,
                  stator_length=0.05,
                  stator_radius=0.03,
                  stator_mass=0.05,
                  stator_ip=[1e4, 1e4, 1e4],
                  rotor_length=0.04,
                  rotor_radius=0.025,
                  rotor_mass=0.05,
                  rotor_ip=[9.89e-7, 9.89e-7, 9.89e-7],
                  voltage='STEP(TIME,0,0,1,12)',
                  resistance=0.5 * 1.98,
                  inductance=0.5 * 0.18e-3,
                  torque_constant=0.016,
                  viscous_friction=1.07e-6,
                  coulomb_friction=0.001,
                  num_poles=4,
                  steady_state=False
                  )

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

coulomb_friction

Double

0.0

id

Int

Auto

inductance

Double

\(L\)

0.0

label

Str

name

Str

num_poles

Double

0.0

qg

Location

resistance

Double

\(R\)

0.0

reuler

Angles

rm

Reference - Marker

\(\checkmark\)

rotor_base

Reference - Body

rotor_flex_node

Int

0

rotor_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length

Double

0.0

rotor_mass

Double

0.0

rotor_radius

Double

0.0

stator_base

Reference - Body

stator_flex_node

Int

0

stator_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length

Double

0.0

stator_mass

Double

0.0

stator_radius

Double

0.0

steady_state

Bool

False

torque_constant

Double

\(K_{T}\)

0.0

viscous_friction

Double

0.0

voltage

Function

\(V\)

\(\checkmark\)

voltage_ic

Double

6.0

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

coulomb_friction#

The motor coulomb friction torque.

Type=Double, Default=0.0

id#

The id of the object.

Type=Int

inductance#

The motor inductance.

Type=Double, Default=0.0

label#

The label of the composite element.

Type=Str

name#

Defines a nametag for the object.

Type=Str

num_poles#

The motor number of poles.

Type=Double, Default=0.0

qg#

The position of the composite element.

Type=Location

resistance#

The motor resistance.

Type=Double, Default=0.0

reuler#

The orientation of the composite element.

Type=Angles

rm#

The reference marker of the composite element.

Type=Reference (Marker), Required

rotor_base#

Type=Reference (Body)

rotor_flex_node#

Interface node id on rotor attaching body, in case it is flexible.

Type=Int, Default=0

rotor_ip#

Inertial property of rotor.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length#

Length of rotor.

Type=Double, Default=0.0

rotor_mass#

Mass of rotor.

Type=Double, Default=0.0

rotor_radius#

Radius of rotor.

Type=Double, Default=0.0

stator_base#

Type=Reference (Body)

stator_flex_node#

Interface node id on stator attaching body, in case it is flexible.

Type=Int, Default=0

stator_ip#

Inertial property of stator.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length#

Length of the stator.

Type=Double, Default=0.0

stator_mass#

Mass of the stator.

Type=Double, Default=0.0

stator_radius#

Radius of the stator.

Type=Double, Default=0.0

steady_state#

True if steady state, neglecting the inductance term.

Type=Bool, Default=False

torque_constant#

The motor torque constant.

Type=Double, Default=0.0

viscous_friction#

The motor viscous friction.

Type=Double, Default=0.0

voltage#

The variable voltage applied to the motor.

Type=Function, Modifiable

voltage_ic#

Voltage initial condition.

Type=Double, Default=6.0

class CurveMotor(**kwds)#
Creates a curve-based motor.

The motor’s operation is defined based on its characteristic torque-speed curve.

Is an aggregate of a stator, a rotor and an Sforce.

Example

Create a motor defined by a curve.#
from msolve import *
from msolve.machinery.motor import CurveMotor

model = Model()

ground = Part(ground=True)
global_ref = Marker(body=ground)

units = Units()
gravity = Accgrav(kgrav=-9.80665)

ref_marker = Marker(body=ground, qp=[0.01, 0, 0], reuler=[Math.radians(90), Math.radians(-90), 0])

motor = CurveMotor(rm=ref_marker,
                   stator_base=ground,
                   stator_length=0.050,
                   stator_radius=0.030,
                   stator_mass=0.050,
                   stator_ip=[1e4, 1e4, 1e4],
                   rotor_length=0.040,
                   rotor_radius=0.025,
                   rotor_mass=0.050,
                   rotor_ip=[5e-7, 5e-7, 5e-7],
                   speed=[0, 1750, 3500, 5250, 7000],
                   torque=[0.090, 0.030, 0.010, 0.003, 0.000],
                   type='CUBIC'
                   )

Name

Type

Symbol

Required

Default

Modifiable

active

Bool

True

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

qg

Location

reuler

Angles

rm

Reference - Marker

\(\checkmark\)

rotor_base

Reference - Body

rotor_flex_node

Int

0

rotor_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length

Double

0.0

rotor_mass

Double

0.0

rotor_radius

Double

0.0

speed

Double [0]

\(\checkmark\)

0.0

stator_base

Reference - Body

stator_flex_node

Int

0

stator_ip

Ips

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length

Double

0.0

stator_mass

Double

0.0

stator_radius

Double

0.0

torque

Double [0]

\(\checkmark\)

0.0

type

Enum

AKIMA

active#

Defines the state of the object.

Type=Bool, Default=True, Modifiable

id#

The id of the object.

Type=Int

label#

The label of the composite element.

Type=Str

name#

Defines a nametag for the object.

Type=Str

qg#

The position of the composite element.

Type=Location

reuler#

The orientation of the composite element.

Type=Angles

rm#

The reference marker of the composite element.

Type=Reference (Marker), Required

rotor_base#

Type=Reference (Body)

rotor_flex_node#

Interface node id on rotor attaching body, in case it is flexible.

Type=Int, Default=0

rotor_ip#

Inertial property of rotor.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

rotor_length#

Length of rotor.

Type=Double, Default=0.0

rotor_mass#

Mass of rotor.

Type=Double, Default=0.0

rotor_radius#

Radius of rotor.

Type=Double, Default=0.0

speed#

Rotational speed data characterizing the motor.

Type=Double [0], Required, Default=0.0

stator_base#

Type=Reference (Body)

stator_flex_node#

Interface node id on stator attaching body, in case it is flexible.

Type=Int, Default=0

stator_ip#

Inertial property of stator.

Type=Ips, Default=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

stator_length#

Length of the stator.

Type=Double, Default=0.0

stator_mass#

Mass of the stator.

Type=Double, Default=0.0

stator_radius#

Radius of the stator.

Type=Double, Default=0.0

torque#

Torque data characterizing the motor.

Type=Double [0], Required, Default=0.0

type#

Interpolation scheme for speed-torque data.

Type=Enum, Default=AKIMA

Permitted values are:

  • AKIMA

  • CUBIC

  • LINEAR