The 100:1 Metal Gearmotor 37Dx73L mm 24V with 64 CPR Encoder, manufactured by Pololu (Part ID: 4695), is a compact and efficient gearmotor designed for high-torque applications. It features a 100:1 gear ratio, operates at 24V, and includes a built-in quadrature encoder with 64 counts per revolution (CPR) for precise position and speed feedback. The helical pinion design ensures smoother operation and reduced noise compared to traditional straight-cut gears.
Parameter | Value |
---|---|
Gear Ratio | 100:1 |
Operating Voltage | 24V |
No-Load Speed | ~100 RPM |
Stall Torque | ~11 kg·cm (at 24V) |
Stall Current | ~5.5 A (at 24V) |
Encoder Type | Quadrature Encoder |
Encoder Resolution | 64 CPR (counts per revolution) |
Shaft Diameter | 6 mm |
Motor Dimensions | 37 mm diameter, 73 mm length |
Weight | ~300 g |
The motor has two main terminals for power and four additional pins for the encoder. The pinout is as follows:
Terminal | Description |
---|---|
M+ | Motor positive lead |
M- | Motor negative lead |
Pin | Wire Color | Description |
---|---|---|
VCC | Red | Encoder power supply (3.5V–20V) |
GND | Black | Ground |
A | Yellow | Encoder channel A output |
B | White | Encoder channel B output |
Note: The encoder outputs are open-drain and require pull-up resistors for proper operation.
Powering the Motor:
Connecting the Encoder:
Controlling the Motor:
Below is an example of how to read the encoder signals using an Arduino UNO:
// Define encoder pins
const int encoderPinA = 2; // Channel A connected to digital pin 2
const int encoderPinB = 3; // Channel B connected to digital pin 3
volatile int encoderCount = 0; // Variable to store encoder count
int lastEncoded = 0; // Tracks the last encoder state
void setup() {
pinMode(encoderPinA, INPUT_PULLUP); // Enable pull-up resistor on pin A
pinMode(encoderPinB, INPUT_PULLUP); // Enable pull-up resistor on pin B
// Attach interrupts to encoder pins
attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);
Serial.begin(9600); // Initialize serial communication
}
void loop() {
// Print the encoder count to the serial monitor
Serial.print("Encoder Count: ");
Serial.println(encoderCount);
delay(100); // Delay for readability
}
void updateEncoder() {
// Read the current state of the encoder pins
int MSB = digitalRead(encoderPinA); // Most significant bit
int LSB = digitalRead(encoderPinB); // Least significant bit
int encoded = (MSB << 1) | LSB; // Combine the two bits
int sum = (lastEncoded << 2) | encoded; // Track state changes
// Update encoder count based on state transitions
if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderCount++;
if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderCount--;
lastEncoded = encoded; // Update the last state
}
Note: This code assumes the encoder outputs are connected to pins 2 and 3 on the Arduino UNO. Adjust the pin numbers as needed for your setup.
Motor Does Not Spin:
Encoder Signals Are Unstable:
Motor Overheats:
Incorrect Encoder Readings:
Q: Can I use this motor with a 12V power supply?
Q: What is the maximum RPM of this motor?
Q: Do I need external pull-up resistors for the encoder?
Q: Can I use this motor for continuous operation?