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 - Part

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 - Part

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 (Part)

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 (Part)

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 - Part

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 - Part

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#

Type=Double, Default=0.0

id#

The id of the object.

Type=Int

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#

Type=Double, Default=0.0

qg#

The position of the composite element.

Type=Location

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 (Part)

rotor_ip#

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

rotor_length#

Type=Double, Default=0.0

rotor_mass#

Type=Double, Default=0.0

rotor_radius#

Type=Double, Default=0.0

stator_base#

Type=Reference (Part)

stator_ip#

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

stator_length#

Type=Double, Default=0.0

stator_mass#

Type=Double, Default=0.0

stator_radius#

Type=Double, Default=0.0

steady_state#

Type=Bool, Default=False

torque_constant#

Type=Double, Default=0.0

viscous_friction#

Type=Double, Default=0.0

voltage#

Type=Function, Modifiable

voltage_ic#

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 - Part

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\)

stator_base

Reference - Part

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\)

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 (Part)

rotor_ip#

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

rotor_length#

Type=Double, Default=0.0

rotor_mass#

Type=Double, Default=0.0

rotor_radius#

Type=Double, Default=0.0

speed#

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

stator_base#

Type=Reference (Part)

stator_ip#

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

stator_length#

Type=Double, Default=0.0

stator_mass#

Type=Double, Default=0.0

stator_radius#

Type=Double, Default=0.0

torque#

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

type#

Type=Enum, Default=AKIMA

Permitted values are:

  • AKIMA

  • CUBIC

  • LINEAR