

The HEDM-5500#B13 is an optical incremental encoder manufactured by Broadcom. Encoders are devices that convert information from one format or code to another, and this specific model is designed to transform mechanical motion into digital signals. It is widely used in applications requiring precise motion control, such as robotics, CNC machines, printers, and industrial automation systems.
This encoder is particularly valued for its compact design, high resolution, and reliable performance in converting rotational motion into digital pulses, making it ideal for use in digital circuits and motion feedback systems.








The HEDM-5500#B13 encoder is designed for high accuracy and reliability. Below are its key technical details:
| Parameter | Value |
|---|---|
| Manufacturer | Broadcom |
| Part Number | HEDM-5500#B13 |
| Encoder Type | Incremental Optical Encoder |
| Resolution | 500 CPR (Counts Per Revolution) |
| Output Format | Quadrature (A and B channels) |
| Operating Voltage | 5 V DC |
| Operating Temperature | -40°C to +100°C |
| Shaft Diameter | 6 mm |
| Mounting Style | PCB Mount |
The HEDM-5500#B13 encoder typically has a 5-pin interface. Below is the pinout and description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (5 V DC) |
| 2 | GND | Ground connection |
| 3 | A | Channel A output (quadrature signal) |
| 4 | B | Channel B output (quadrature signal, 90° offset) |
| 5 | Index | Optional index pulse output (1 pulse per rev.) |
Below is an example of how to connect and read the HEDM-5500#B13 encoder using an Arduino UNO:
// HEDM-5500#B13 Encoder Example with Arduino UNO
// Connect Channel A to pin 2 and Channel B to pin 3
volatile int encoderPosition = 0; // Variable to store encoder position
int lastEncoded = 0; // Stores the last encoder state
void setup() {
pinMode(2, INPUT_PULLUP); // Channel A
pinMode(3, INPUT_PULLUP); // Channel B
// Attach interrupts to handle encoder signals
attachInterrupt(digitalPinToInterrupt(2), updateEncoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(3), updateEncoder, CHANGE);
Serial.begin(9600); // Initialize serial communication
}
void loop() {
// Print the encoder position to the Serial Monitor
Serial.print("Encoder Position: ");
Serial.println(encoderPosition);
delay(100); // Small delay for readability
}
void updateEncoder() {
// Read the current state of Channel A and Channel B
int MSB = digitalRead(2); // Most Significant Bit
int LSB = digitalRead(3); // Least Significant Bit
int encoded = (MSB << 1) | LSB; // Combine the two bits
int sum = (lastEncoded << 2) | encoded; // Track state changes
// Update position based on state transitions
if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) {
encoderPosition++;
} else if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) {
encoderPosition--;
}
lastEncoded = encoded; // Update the last state
}
No Output Signals:
Incorrect Position Readings:
Noise in Signals:
Index Pulse Not Detected:
Q: Can the HEDM-5500#B13 be used with a 3.3 V system?
A: No, the encoder requires a 5 V DC power supply. Use a level shifter if interfacing with a 3.3 V system.
Q: How do I calculate speed using the encoder?
A: Measure the time interval between pulses on Channel A or B, and use the formula:
Speed (RPM) = (Pulse Frequency × 60) / (Resolution × 4).
Q: What is the purpose of the Index pulse?
A: The Index pulse provides a single pulse per revolution, useful for absolute positioning or homing.
This concludes the documentation for the HEDM-5500#B13 encoder.