Troubleshooting Guide

A comprehensive guide to identifying and resolving issues when working with the SMD Red motor driver.

1. Connection & Detection Issues

Problem: SMD Red is not recognized over USB Possible Causes:

  • Faulty USB cable or port

  • Missing or incompatible USB driver

  • Incorrect serial port used in the code

Solutions:

  • Use the USB_Port() function from the SDK to auto-detect the correct port.

  • Try with another cable and USB port.

  • Ensure drivers like FTDI or CH340 are properly installed (especially on Windows).

  • Restart the computer and try reconnecting the device.

  • Confirm the LED indicator is active.

LED Color
Meaning
Details

🟡 Yellow

No EEPROM Save Detected

Stays on until user performs EEPROM save. Also appears after Factory Reset. If still lit after saving, EEPROM may have issues. Not considered an error by itself.

⚪ White

IDLE / Firmware Status

Solid: IDLE mode. Blinking fast (every 50ms): No valid firmware or hardware mismatch. Blinking slow (every 150ms): Scanning modules.

🟢 Green

Ready / Motor Active

Indicates the motor driver is active and ready to drive. Should be on when the motor is running.

🔵 Blue

Autotuning Active

Blinks during PID tuning. Torque must be enabled. It is normal to see blue and green together during this state.

🔴 Red

Overcurrent / Current Limit

Turns on when the motor draws excessive current or exceeds the defined current limit. Can resume by toggling torque off and on.

🟣 Purple

Communication Issue

Appears when communication fails between modules or host device.

🟦 Cyan

User Indicator

Blinks when userIndicator is triggered by user code. Not shown unless explicitly activated.

Problem: attach(Red(ID)) fails or gives timeout

  • Make sure the correct ID is used for the SMD Red connected.

  • Use scan_modules() to detect all available modules.

2. Motor Not Moving or Moving Incorrectly

Problem: Motor doesn’t respond to control commands Check:

  • Torque is enabled

  • Operation mode is set

  • CPR is configured

  • Firmware and API version compatibility: Make sure the firmware and API are on the same major version (e.g., 2.*.*). You can verify this using the command:

get_firmware_version()

Problem: Motor rotates in the opposite direction

  • Invert the duty cycle (e.g., use -value)

  • Physically switch motor wires if possible

  • Adjust inversion settings in software logic

Problem: Motor vibrates or moves erratically

  • Double-check the power supply

  • Lower the control frequency or PID gains

  • Reduce mechanical load temporarily to test

3. Torque Enable and Operation Mode Setup

Always ensure this sequence:

  1. attach(Red(smd_id))

  2. set_operation_mode()

  3. set_shaft_cpr()

  4. enable_torque()

Common Mistakes:

  • Enabling torque before setting mode/CPR

  • Setting wrong operation mode (e.g., using POSITION for a brushed DC motor)

  • Forgetting to re-enable torque after changing settings

4. Position, Velocity, and Torque Control Issues

Problem: No movement in position control

  • Make sure target setpoint differs from current position

  • Use correct unit: ticks, not degrees

  • CPR must match the encoder used

Problem: Velocity setpoint has no effect

  • Confirm that the velocity mode is selected

  • Check if PID tuning is appropriate for your load

Problem: In torque control, motor draws too much current

  • Set a proper current_limit

  • Check for mechanical resistance or misalignment

5. Encoder and Feedback Problems

Problem: get_position() returns 0 or constant values

  • Encoder might not be connected

  • CPR not configured correctly

  • Shaft may not be moving

Problem: Sudden jumps or noisy feedback

  • Use shielded cables

  • Avoid running encoder wires near power lines

  • Add averaging/filtering logic in your application

6. Servo Control Issues

Problem: Servo doesn't move or jitters

  • Make sure it's in POSITION mode

  • Torque must be enabled

  • CPR value should be appropriate (e.g., 4096 for 0–180° servos)

Problem: Set position command is ignored

  • Use set_position(module_id, angle, smd_id)

  • Ensure the angle is within valid range (0–180 degrees, mapped to ticks)

7. Watchdog and Safety Triggers

Problem: Motor stops after a few seconds

  • Watchdog might be enabled and not refreshed

  • Disable it during development using:

master.set_watchdog(module_id, 0, smd_id)

Problem: Motor disabled after overload

  • Check get_error_flags() for overcurrent or overtemperature

  • Use clear_errors() if needed

8. Python SDK Usage Mistakes

Common Errors:

  • Passing wrong module_id or smd_id

  • Forgetting to attach the device

  • Mixing up control modes (e.g., calling set_duty_cycle in POSITION mode)

  • Not handling exceptions (wrap critical code in try/except)

9. Communication and Timing Issues

Problem: Communication timeout

  • Try reducing loop frequency

  • Add delays between high-frequency read/write operations

  • Use get_driver_info() and scan_modules() to debug

Problem: Conflict with another serial device

  • Ensure the port is not in use by other software (e.g., Arduino IDE)

10. Diagnostic and Debugging Tools

Use the following SDK functions to debug:

  • get_driver_info(smd_id)

  • scan_modules(smd_id)

  • get_position(module_id, smd_id)

  • get_velocity(module_id, smd_id)

  • get_current(module_id, smd_id)

  • get_error_flags(module_id, smd_id)

11. Environmental and Hardware Considerations

  • Keep motor away from heat sources or enclosed areas

  • Avoid long unshielded cables for encoders

  • Check power supply stability under load

  • Ensure RJ-11 connectors are fully seated

12. Best Practices and Preventive Tips

  • Always initialize devices in proper order: attach → configure → enable

  • Use retry logic when reading feedback

  • Log sensor and motor states for debugging

  • Perform PID tuning under real load conditions

  • Keep firmware and SDK up-to-date

  • Avoid forcing motors when torque is disabled

Feedback

Found this page helpful? Let us know what you think.

Last updated