

The Pololu 29-to-1 Gear Motor With Encoder is a high-performance DC motor integrated with a quadrature encoder. This motor is equipped with a 29:1 metal gearbox, providing high torque and low-speed operation, making it ideal for applications requiring precise control. The built-in encoder outputs signals that allow users to monitor the motor's position, speed, and direction, enabling closed-loop control systems.








Below are the key technical details for the Pololu 29-to-1 Gear Motor With Encoder:
| Parameter | Value |
|---|---|
| Operating Voltage | 6 V to 12 V |
| Gear Ratio | 29:1 |
| Free-run Speed @ 12V | ~490 RPM |
| Free-run Current @ 12V | ~300 mA |
| Stall Torque @ 12V | ~2.3 kg·cm |
| Stall Current @ 12V | ~5 A |
| Encoder Resolution | 64 counts per revolution of the motor shaft (before gearbox) |
| Output Shaft Diameter | 4 mm |
| Motor Dimensions | 37D x 57L mm |
| Weight | ~190 g |
The motor has six wires: two for the motor power and four for the encoder signals. The pinout is as follows:
| Wire Color | Function | Description |
|---|---|---|
| Red | Motor Power (+) | Connect to the positive terminal of the power supply. |
| Black | Motor Power (-) | Connect to the negative terminal of the power supply. |
| Green | Encoder Channel A | Outputs a quadrature signal for position/speed feedback. |
| Blue | Encoder Channel B | Outputs a quadrature signal for position/speed feedback. |
| Yellow | Encoder Power (+) | Connect to a 3.3V or 5V power source for the encoder. |
| White | Encoder Ground (-) | Connect to the ground of the encoder power source. |
Powering the Motor:
Connecting the Encoder:
Controlling the Motor:
Below is an example of how to read the encoder signals and control the motor using an Arduino UNO:
// Define encoder pins
const int encoderA = 2; // Encoder Channel A connected to pin 2 (interrupt pin)
const int encoderB = 3; // Encoder Channel B connected to pin 3
// Define motor control pins
const int motorPWM = 9; // PWM pin for motor speed control
const int motorDir = 8; // Digital pin for motor direction control
volatile long encoderCount = 0; // Variable to store encoder counts
// Interrupt service routine for encoder channel A
void encoderISR() {
// Read the state of channel B to determine direction
if (digitalRead(encoderB) == HIGH) {
encoderCount++; // Forward direction
} else {
encoderCount--; // Reverse direction
}
}
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Set up encoder pins
pinMode(encoderA, INPUT_PULLUP);
pinMode(encoderB, INPUT_PULLUP);
// Attach interrupt to encoder channel A
attachInterrupt(digitalPinToInterrupt(encoderA), encoderISR, CHANGE);
// Set up motor control pins
pinMode(motorPWM, OUTPUT);
pinMode(motorDir, OUTPUT);
// Start motor at low speed
analogWrite(motorPWM, 128); // 50% duty cycle
digitalWrite(motorDir, HIGH); // Set direction to forward
}
void loop() {
// Print encoder count to the serial monitor
Serial.print("Encoder Count: ");
Serial.println(encoderCount);
delay(100); // Small delay for readability
}
analogWrite value to change the motor speed.Motor Not Spinning:
Encoder Signals Not Detected:
Noisy Encoder Readings:
Motor Overheating:
Q: Can I use this motor with a 24V power supply?
A: No, the motor is designed for a maximum voltage of 12V. Using a higher voltage may damage the motor.
Q: How do I calculate the motor's position in degrees?
A: Use the formula:
Position (degrees) = (Encoder Count / Encoder Resolution) * 360 / Gear Ratio
For this motor, the encoder resolution is 64 counts per revolution of the motor shaft.
Q: Can I use this motor with a Raspberry Pi?
A: Yes, but you will need a motor driver compatible with the Raspberry Pi's GPIO voltage levels and a library to handle encoder signals.
Q: What is the maximum speed of the motor?
A: The free-run speed at 12V is approximately 490 RPM at the output shaft.