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 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
Bool
True
\(\checkmark\)
Double
0.0
Int
Auto
Double
\(L\)
0.0
Str
Str
Location
Double
\(R\)
0.0
Angles
Reference -
Marker\(\checkmark\)
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Bool
False
Double
\(K_{T}\)
0.0
Double
0.0
Function
\(V\)
\(\checkmark\)
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
Bool
True
\(\checkmark\)
Double
0.0
Int
Auto
Double
\(L\)
0.0
Str
Str
Double
0.0
Location
Double
\(R\)
0.0
Angles
Reference -
Marker\(\checkmark\)
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Bool
False
Double
\(K_{T}\)
0.0
Double
0.0
Function
\(V\)
\(\checkmark\)
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
Bool
True
\(\checkmark\)
Int
Auto
Str
Str
Location
Angles
Reference -
Marker\(\checkmark\)
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Double [0]
\(\checkmark\)
0.0
Reference -
BodyInt
0
Ips
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Double
0.0
Double
0.0
Double
0.0
Double [0]
\(\checkmark\)
0.0
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