Motors / Output Devices¶
The EV3 has four output ports for connecting motors and other devices (like LEDs). If you are trying to use something that plugs into one of the output ports, then you are in the right place. If you are working with a motor that connects to a motor controller which plugs into an input port, you will find information on the motor controller on the [sensors] page.
This page lists well-known devices, however any device that is rated for 9VDC, requires 500mA or less and can handle pulse width modulation is safe to connect directly to the output ports on the EV3.
Supported Motors¶
Part Number | Name | Driver | Type | Auto-detect | |
---|---|---|---|---|---|
Actuonix | |||||
L12-EV3-100 | L12 EV3 100mm | act-l12-ev3-100 |
ev3 | N [1] | |
L12-EV3-50 | L12 EV3 50mm | act-l12-ev3-50 |
ev3 | N [1] | |
LEGO | |||||
43362 | Motor 9V Mini-motor, newer lighter weight | lego-43362 |
rcx | N | |
45502 | EV3 Large Servo Motor | lego-ev3-l-motor |
ev3 | Y [1] | |
45503 | EV3 Medium Servo Motor | lego-ev3-m-motor |
ev3 | Y [1] | |
47154 | Technic Motor 9V Geared | lego-47154 |
rcx | N | |
70823 | Motor 9V Micromotor | lego-70823 |
rcx | N | |
71427 | Motor 9V Mini-motor, older heavier weight | lego-71427 |
rcx | N | |
74569 | Technic Motor 9V | lego-74569 |
rcx | N | |
88002 | Power Functions Train Motor | lego-88002 |
rcx | N | |
88003 | Power Functions L-Motor | lego-88003 |
rcx | N | |
88004 | Power Functions Servo Motor | lego-88004 |
rcx | N | |
8882 | Power Functions XL-Motor | lego-8882 |
rcx | N | |
8883 | Power Functions M-Motor | lego-8883 |
rcx | N | |
9670 | Power Functions E-Motor | lego-9670 |
rcx | N | |
9842 | NXT (Interactive Servo) Motor | lego-nxt-motor |
ev3 | Y [1] |
[1] | (1, 2, 3, 4, 5) Motors are only automatically detected on the LEGO MINDSTORMS EV3 platform. LEGO NXT Motors are detected as LEGO EV3 Large motors. 3rd party motors will not be correctly detected and must be manually specified. |
Types of Motors¶
There are currently three basic types of classes of devices that are supported in ev3dev. Tacho motors, DC motors and LEDs.
Tacho Motors¶
Tacho motors get their name from the LMS2012 (official LEGO) source code. Tacho is short for tachometer. This is probably a bit of a misnomer because the motor itself does not have a tachometer. Instead, the EV3 brick acts as the tachometer. Technically speaking the motors have a incremental rotary encoder (also called quadrature encoder) that is used by the EV3 to determine the speed and direction of rotation.
DC Motors¶
DC motors are just “plain” motors. They do not have a quadrature encoder for feedback.
LEDs¶
Any 9VDC rated (i.e. it has an appropriately sized resistor) LED can be used.
Using Motors and LEDs¶
Currently, only NXT and EV3 motors can be automatically detected. To use other devices, see the [EV3 Output Port Driver] for information on how to set the mode of the output port.
RCX compatible (aka 9V) motors and LEDs can be connected to the EV3 using a LEGO 8528 cable.
Power Functions motors and LEDs can be connected using a LEGO 8528 cable plus a LEGO 8886 cable or LEGO 8871 cable.
tacho-motor Subsystem¶
The tacho-motor
class provides a uniform interface for using motors with
positional and directional feedback such as the EV3 and NXT motors. This
feedback allows for precise control of the motors.
Sysfs¶
Tacho motors can be found at /sys/class/tacho-motor/motor<N>
, where
<N>
is incremented each time a motor is loaded.
Note
The number <N>
is not related to the port the motor is
plugged in to.
Attribute | Access | Description |
---|---|---|
address |
read-only | Returns the name of the port that the motor is connected to. |
command |
write-only | Sends a command to the motor controller. Possible values are:
Not all commands may be supported. Read the |
commands |
read-only | Returns a space separated list of commands that are supported by the motor controller. |
count_per_rot |
read-only | Returns the number of tacho counts in one rotation of the motor. Tacho counts are used by the position and speed attributes, so you can use this value to convert from rotations or degrees to tacho counts. (rotation motors only) |
count_per_m |
read-only | Returns the number of tacho counts in one meter of travel of the motor. Tacho counts are used by the position and speed attributes, so you can use this value to convert from distance to tacho counts. (linear motors only) |
full_travel_count |
read-only | Returns the number of tacho counts in the full travel of the motor. When combined with the count_per_m atribute, you can use this value to calculate the maximum travel distance of the motor. (linear motors only) |
driver_name |
read-only | Returns the name of the driver that provides this tacho motor device. |
duty_cycle |
read-only | Returns the current duty cycle of the motor. Units are percent. Values are -100 to 100. |
duty_cycle_sp |
read/write | Writing sets the duty cycle setpoint. Reading returns the current value. Units are in percent. Valid values are -100 to 100. A negative value causes the motor to rotate in reverse. |
polarity |
read/write | Sets the polarity of the motor. Valid values are:
|
position |
read/write | Returns the current position of the motor in pulses of the rotary encoder. When the motor rotates clockwise, the position will increase. Likewise, rotating counter-clockwise causes the position to decrease. Writing will set the position to that value. The range is -2,147,483,648 and +2,147,483,647 tachometer counts (32-bit signed integer). |
hold_pid/Kd |
read/write | The derivative constant for the position PID. |
hold_pid/Ki |
read/write | The integral constant for the position PID. |
hold_pid/Kp |
read/write | The proportional constant for the position PID. |
max_speed |
read | Returns the maximum value that is accepted by the speed_sp
attribute. This value is the speed of the motor at 9V with no load.
Note: The actual maximum obtainable speed will be less than this and
will depend on battery voltage and mechanical load on the motor. |
position_sp |
read/write | Writing specifies the target position for the run-to-abs-pos and
run-to-rel-pos commands. Reading returns the current value. Units
are in tacho counts. You can use the value returned by
counts_per_rot to convert tacho counts to/from rotations or
degrees. The range is -2,147,483,648 and +2,147,483,647 tachometer
counts (32-bit signed integer). |
speed |
read-only | Returns the current motor speed in tacho counts per second. Note, this
is not necessarily degrees (although it is for LEGO motors). Use the
count_per_rot attribute to convert this value to RPM or deg/sec. |
speed_sp |
read/write | Writing sets the target speed in tacho counts per second used for all
run-* commands except run-direct . Reading returns the current
value. A negative value causes the motor to rotate in reverse with
the exception of run-to-*-pos commands where the sign is ignored.
Use the count_per_rot attribute to convert RPM or deg/sec to
tacho counts per second. Use the count_per_m attribute to convert
m/s to tacho counts per second. |
ramp_up_sp |
read/write | Writing sets the ramp up setpoint. Reading returns the current value.
Units are in milliseconds and must be positive. When set to a non-zero
value, the motor speed will increase from 0 to 100% of max_speed
over the span of this setpoint. The actual ramp time is the ratio of
the difference between the speed_sp and the current speed and
max_speed multiplied by ramp_up_sp . Values must not be negative. |
ramp_down_sp |
read/write | Writing sets the ramp down setpoint. Reading returns the current
value. Units are in milliseconds and must be positive. When set to a
non-zero value, the motor speed will decrease from 0 to 100% of
max_speed over the span of this setpoint. The actual ramp time is
the ratio of the difference between the speed_sp and the current
speed and max_speed multiplied by ramp_down_sp . Values
must not be negative. |
speed_pid/Kd |
read/write | The derivative constant for the speed regulation PID. |
speed_pid/Ki |
read/write | The integral constant for the speed regulation PID. |
speed_pid/Kp |
read/write | The proportional constant for the speed regulation PID. |
state |
read-only | Reading returns a space separated list of state flags. Possible flags are:
|
stop_action |
read/write | Reading returns the current stop action. Writing sets the stop
action. The value determines the motors behavior when
Not all actions may be supported. Read |
stop_actions |
read-only | Returns a space-separated list of stop actions supported by the motor controller. |
time_sp |
read/write | Writing specifies the amount of time the motor will run when using
the run-timed command. Reading returns the current value. Units
are in milliseconds. Values must not be negative. |
dc-motor Subsystem¶
The dc-motor
class provides a uniform interface for using regular DC
motors with no fancy controls or feedback. This includes LEGO MINDSTORMS RCX
motors and LEGO Power Functions motors.
Sysfs¶
DC motors can be found at /sys/class/dc-motor/motor<N>
, where <N>
is incremented each time a motor is loaded.
Note
The number <N>
is not related to the port address.
Attribute | Access | Description |
---|---|---|
address |
read-only | Returns the name of the port that the motor is connected to. |
command |
write-only | Sets the command for the motor. Possible values are:
Not all commands may be supported. Read |
commands |
read-only | Returns a space separated list of commands supported by the motor controller. |
driver_name |
read-only | Returns the name of the motor driver that loaded this device. See the list of supported motors for a list of drivers. |
duty_cycle |
read-only | Shows the current duty cycle of the PWM signal sent to the motor. Values are -100 to 100 (-100% to 100%). |
duty_cycle_sp |
read/write | Writing sets the duty cycle setpoint of the PWM signal sent to the motor. Valid values are -100 to 100 (-100% to 100%). Reading returns the current setpoint. |
polarity |
read/write | Sets the polarity of the motor. Valid values are:
|
state |
read-only | Gets a space separated list of flags indicating the motor status. Possible flags are:
|
stop_action |
write-only | Sets the stop action that will be used when the motor stops. Possible values are:
Not all values may be supported. Read stop_actions to find out which actions are supported for a particular driver. |
stop_actions |
read-only | Gets a space separated list of supported stop actions. |
ramp_down_sp |
read/write | Sets the time in milliseconds that it take the motor to ramp down from 100% to 0%. Valid values are 0 to 10000 (10 seconds). Default is 0. |
ramp_up_sp |
read/write | Sets the time in milliseconds that it take the motor to up ramp from 0% to 100%. Valid values are 0 to 10000 (10 seconds). Default is 0. |
time_sp |
read/write | Sets the time setpoint used with the run-timed command.
Units are in milliseconds. Values must not be negative. |
servo-motor Subsystem¶
The servo-motor
class provides a uniform interface for using hobby type
servo motors.
Note
LEGO calls the NXT and EV3 motors, “servo” motors on their website.
Technically, that is a correct name for them because they provide position
feedback. However, the servo-motor
class is only used for a very
specific type of servo motor that uses a 50MHz control signal.
It is not used by any LEGO brand motors.
Sysfs¶
Servo motors can be found at /sys/class/servo-motor/motor<N>
, where
<N>
is incremented each time a servo is loaded.
Note
The number <N>
is not related to the port the motor is
plugged in to.
Attribute | Access | Description |
---|---|---|
address |
read-only | Returns the name of the port that the motor is connected to. |
command |
write-only | Sets the command for the servo. Possible values are:
|
driver_name |
read-only | Returns the name of the motor driver that loaded this device. |
max_pulse_sp |
read/write | Used to set the pulse size in milliseconds for the signal that tells
the servo to drive to the maximum (clockwise) position_sp . Default
value is 2400. Valid values are 2300 to 2700. You must write to the
position_sp attribute for changes to this attribute to take
effect. Values must not be negative. |
mid_pulse_sp |
read/write | Used to set the pulse size in milliseconds for the signal that tells
the servo to drive to the mid position_sp. Default value is 1500.
Valid values are 1300 to 1700. For example, on a 180 degree servo,
this would be 90 degrees. On continuous rotation servo, this is the
“neutral” position where the motor does not turn. You must write to
the position_sp attribute for changes to this attribute to take
effect. Values must not be negative. |
min_pulse_sp |
read/write | Used to set the pulse size in milliseconds for the signal that tells
the servo to drive to the minimum (counter-clockwise) position.
Default value is 600. Valid values are 300 to 700. You must write to
the position_sp attribute for changes to this attribute to take
effect. Values must not be negative. |
polarity |
read/write | Sets the polarity of the servo. Valid values are:
|
position_sp |
read/write | Reading returns the current position_sp of the servo. Writing
instructs the servo to move to the specified position_sp. Units are
percent. Valid values are -100 to 100 (-100% to 100%) where -100
corresponds to min_pulse_sp , 0 corresponds to mid_pulse_sp
and 100 corresponds to max_pulse_sp . |
rate_sp |
read/write | Sets the rate_sp at which the servo travels from 0 to 100.0% (half of
the full range of the servo). Units are in milliseconds. Example:
Setting rate_sp to 1000 means that it will take a 180 degree servo
2 seconds to move from 0 to 180 degrees. Note: Some servo controllers
may not support this in which case reading and writing will fail with
-EOPNOTSUPP . In continuous rotation servos, this value will affect
the rate at which the speed ramps up or down. Values must not be
negative. |
state |
read-only | Returns a space separated list of flags indicating the state of the servo. Possible flag is:
|
Motor Modules¶
EV3/EVB Motors¶
The legoev3-motor
module is used on devices like the EV3 where motors
are connected directly to the CPU rather than an external controller.
Generic DC Motors¶
The rcx-motor
module provides a dc-motor Subsystem interface for RCX
motors, Power Functions motors or any other 9V rated DC motor connected to an
output port. You can find the devices bound to this driver in the directory
/sys/bus/lego/drivers/rcx-motor
.