Overview
WPILib provides a unified interface for controlling various motor controllers through theMotorController interface. This guide covers PWM motor controllers and best practices.
MotorController Interface
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/MotorController.java:12
All motor controllers implement the MotorController interface:
- Java
- C++
PWM Motor Controllers
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/PWMMotorController.java:15
PWM motor controllers connect to the roboRIO’s PWM ports (0-9 onboard, 10-19 on MXP).
Basic Usage
- Java
- C++
Setting Motor Speed
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/PWMMotorController.java:53
Speed Control
Motor speed ranges from -1.0 (full reverse) to 1.0 (full forward):- Java
- C++
Voltage Control
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/MotorController.java:31
Voltage control compensates for battery voltage drops:
- Java
- C++
Motor Inversion
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/PWMMotorController.java:88
Invert motor direction in software:
- Java
- C++
Follower Motors
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/PWMMotorController.java:156
Make one motor follow another:
- Java
- C++
Motor Controller Groups
Group multiple motor controllers together:- Java
- C++
Deadband Elimination
Source:wpilibj/src/main/java/edu/wpi/first/wpilibj/motorcontrol/PWMMotorController.java:147
Eliminate motor controller deadband for more precise low-speed control:
- Java
- C++
Complete Drive Example
- Java
- C++
Motor Safety
Motor controllers have built-in safety timeouts to prevent runaway robots:- Java
- C++
Best Practices
- Always stop motors when disabled - Override
disabledInit()to callstopMotor() - Use voltage control for feedforward - Provides consistent behavior regardless of battery voltage
- Invert in software - Use
setInverted()rather than swapping wires - Group motors logically - Use MotorControllerGroup for motors that always move together
- Enable motor safety - Prevents runaway robots if code crashes
- Check current draw - Monitor with PowerDistribution class to avoid breaker trips
Next Steps
- Sensors - Read encoder and gyro data
- Pneumatics - Control pneumatic actuators
- Vision - Process camera images