Asked
Resolved Resolved by DJ Sures!

Troubleshooting EZ-Robot HDD Servo Issue

@Jeremie, @DJ,

I am encountering an issue with an EZ-Robot HDD servo in my robot and am seeking some advice. Although I realize this is a part manufactured by EZ-Robot, I'm aware that @Jeremie designed these servos and has invested years in improving their quality and performance. I'm hopeful you might have some insights into what is happening with this particular servo.

The servo in question is used to open and close the claws at the end of my robot arm, which are mounted on brass gears and axles from ServoCity. It's important to note that the claws only move for animation purposes and do not hold or carry any weight. I have programmed JavaScript scripts in ARC to operate these claws at different speeds and in synchronization or independently from another claw on the opposite arm.

The problem I'm facing is that one of the two EZ-Robot HDD servos requires a gentle physical nudge to start moving. Initially, it only needed this assistance at the beginning of a session, but now it requires a light push every time after receiving a command.

A noteworthy point is that I never release these two claw servos; they remain powered and holding their positions for extended periods. Could it be that this constant current is leading to premature wear on the potentiometer or the sensors that @Jeremie integrated to ensure the servo’s quiet operation and overheating protection?

I am contemplating whether I should replace the servo, but I want to understand the root of the issue. I prefer to continue using these servos because of their safety, quietness, and strength. Would it be beneficial to release them when they are not in motion to extend their lifespan? I would greatly appreciate any explanations or guidance you can provide. Thank you!



Related Hardware (view all EZB hardware)
EZ-B V4 by EZ-Robot
EZ-B v4/2 robot controller: dual Cortex ARM, Wi-Fi, audio/video, 24 servo/digital ports, I2C/UART, camera and Synthiam ARC control for custom robots
Wi-Fi / USB
Servos 24
Camera
Audio
UART 3
I2C
ADC 8
Digital 24

Related Robot Skills (view all robot skills)
Auto Release by Synthiam
Auto-release servos after inactivity: set EZB board/ports, choose 1-60s delay, add/remove ports, pause and view status.
Add ADC positional feedback to hobby PWM servos via minor mod to EZ-B/Arduino; enables real-time position readout, calibration and puppet mirroring

ARC Pro

Upgrade to ARC Pro

ARC Pro is your passport to a world of endless possibilities in robot programming, waiting for you to explore.

Author Avatar
PRO
Synthiam
#1   — Edited

You’ll have to reach out to ezrobot. Jeremie works there. I dunno, maybe the potentiometer is dirty inside? Theyd need to know if there’s a bad batch or something. We just focus on software.

and regarding life longevity of servos - I don’t think it matters if you release them if they’re not under severe load or getting hot. Ppl use them on all sorts of 24/7 animatronics and such without failure. Schools use them with rough children. But, that’s just my input - again it’s not my hardware so it’s not really my place for providing advice

Author Avatar
PRO
Canada
#2  

Thanks - good detail. Below are focused troubleshooting steps, tests you can run (software and mechanical), and recommended ARC scripts/settings to help isolate and fix the HDD-claw servo that needs a nudge to start.

Please try the steps in order and tell me the results so I can help further.


Quick checklist (what to test first)

  1. Swap the two identical claw servos (physically swap servo A servo B).

    • If the problem follows the servo it’s the servo (internal pot/gears).
    • If the problem stays on the same arm it’s mechanical (axle/gear alignment, binding).
  2. Swap the EZ-B port used by that servo (e.g. move from d6 to d7).

    • If the problem follows the port controller/power issue.
    • If it follows the servo hardware servo problem.
  3. With power OFF, manually move the servo through its range to feel for "stiction" or catches.

    • Does it move smoothly? Any sticky spot or grind?
  4. Check supply voltage under load: measure battery/servo power while commanding the servo.

    • Brownouts or low voltage can cause weak or delayed motion.

Likely causes and what they mean

  • Mechanical binding or misalignment (gear/axle, brass gear not concentric).
  • Gear/setscrew slipping or a burr on the shaft causing static friction.
  • Potentiometer wear, dirt, or intermittent contact - can confuse the servo controller.
  • Internal grease that’s too viscous or moved to a spot (rare but possible).
  • Power supply droop under initial torque demand (weak startup).
  • Software/initialization: if the servo’s internal pot and ARC's commanded position are out of sync, nudging it may change pot reading so the servo "sees" an error and corrects - a sign of pot slippage or misread.

  • Inspect the brass gear mounting: ensure the servo horn setscrew is tight and not stripped.
  • Check that the brass axle is straight and not binding in its bearing.
  • Remove servo from the assembly and test it free in the air - best isolation test.
  • Clean light debris around potentiometer area if accessible. Do not use excessive solvent on internals.
  • If gear mesh looks too tight, loosen slightly or re-align for smooth rotation.
  • Lubricate metal gears lightly (only on metal gears; avoid getting lubricant on the potentiometer or electronics).

Power checks

  • Use a meter to confirm battery voltage when commanding the servo.
  • If voltage sags, supply a stronger regulated servo power source (do not put too high voltage on servos).
  • On the EZ-B, also confirm battery monitor settings and ensure the EZ-B is not limiting power.

ARC settings / Auto Release recommendation

You mentioned the servos are never released. Releasing servos when idle often reduces heat and wear. Because your claws are animation-only and not holding weight, enabling auto-release will likely help (but be careful if ever need to hold an object).

How to configure Auto Release (via the skill kebab / settings):

  1. Open ARC. In the Project ribbon choose Project Add robot skill (if you don’t already have it).
  2. Find servo Auto Release and add it (you already have it).
  3. Open the Auto Release skill settings:
    • Click the 3-line kebab (or gear) on the top-right of that skill window Settings.
  4. Set the correct Board Index (EZB index).
  5. Select the servo Port (e.g. d6) and click Add to add it to the Port List.
  6. Set "Release After (seconds)" to 2-5 seconds (start with 2).
  7. Ensure Pause is unchecked (skill active).
  8. Save/Close.

This will automatically release the servo a few seconds after the last commanded move, removing holding current and reducing friction/heat/wear.


Useful JavaScript tests (run from a script control)

  • Move servo slowly (test for sticky start by stepping increments):
// Replace d6 with your servo port constant (d0..d23)
for (let p = 60; p <= 120; p += 2) {
  Servo.setPosition(d6, p);
  print("pos", p);
  sleep(50); // milliseconds
}
  • Release and re-attach (release stops torque; sending a position command re-enables it):
// release
Servo.release(d6);
print("released:", IsReleased(d6));

// re-attach by commanding position
Servo.setPosition(d6, 90);
sleep(200);
print("released after command:", IsReleased(d6));
  • Diagnostic: log commanded vs reported position (if you use the PWM servo Feedback (ADC) or get realtime supported servo):
print("cmdPos:", Servo.getPosition(d6));
print("realtimePos:", Servo.getPositionRealtime(d6)); // may not be available for PWM servos

Use these to see if the servo is reacting to commands or only moves after a nudge.


PWM servo Feedback (ADC) considerations

  • If you have the PWM servo Feedback (ADC) skill wiring the servo pot to an ADC port, confirm that wiring is correct and not creating mechanical drag or an electrical short to the pot.
  • The feedback skill can help detect pot values and calibrate min/max. Use it to verify the pot reads smoothly across travel. In its settings use the ADC auto-calibrate feature to capture min/max.

How to check ADC pot values:

  1. Open the PWM servo Feedback (ADC) skill settings (kebab Settings).
  2. Run the "read" or calibration and watch ADC numbers - they should be smooth, no sudden jumps.
  3. If ADC readings jump or are noisy, that points at a bad pot or loose connection.

If you find it’s the servo (internal)

  • If swap testing shows the problem follows the servo: likely pot wear/dirt or internal gearbox. Given long holding times, pot wear is plausible. If you’re comfortable you can:
    • Open servo (if allowed by warranty) and inspect pot and gears.
    • Replace potentiometer if accessible (requires soldering/parts).
    • Replace the servo - if you prefer not to risk continued intermittent behavior.

Summary of immediate steps I recommend now

  1. Swap servos between arms and report whether the fault follows the servo.
  2. Swap ports on the EZ-B and report results.
  3. Run the slow-step JS test above and copy any printed results (cmdPos and realtime/ADC values).
  4. Enable Auto Release for the claw servo(s) and test with "Release After = 2-5 seconds."
  5. If the problem follows the servo and you prefer to keep using that servo style, consider replacing that servo (or servicing pot/gear if you can).

If you post the results of the swap tests and the output of the JS diagnostic (or ADC readings from the PWM servo Feedback skill), I’ll help interpret them and suggest the next step (repair, replace, or config change). Would you like a script I can paste into a Script control to do the swaps/tests automatically?


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
#3  

I haven't worked to fix this yet. However I manually opened and closed the claws on each arm that is attached to the EZ-Robot HDD servos in question.

The claw attached to the servo that is stalling is much harder to move then the other arm claw. So, I'll have to remove the suspect wrist from the arm foe access and look closely at why that is. It's really not an easy operation but is accessible and doable. In the end I'm sure I'll find it's either something in the gear train binding up or a servo starting to freeze up. I remember when I installed this servo that moves the claw, everything was moving with ease and the gears operating the movement was letting the claw flop open.

I actually rewrote the scripts that operate the claws to allow their servos to release and haven't seen any issues with jitter or jumping after release yet. Baby steps I guess.

Thanks for the quick help!

Author Avatar
PRO
Synthiam
#4  

Athena had good feedback and detail. I guess the shaft could have burred or maybe lack of grease making it hard to move.

Author Avatar
PRO
Canada
#5  

Nice troubleshooting - good to hear you already checked manual movement and that enabling release in your scripts removed jitter. Below are focused next steps (mechanical, electrical, and software), a safe disassembly checklist, lubrication guidance, and a small JavaScript diagnostic script you can paste into a Script control in ARC to help narrow the issue further.

Please try the mechanical checks first (they're most likely based on your description), then run the script and report the results so I can help interpret them.


1) Quick mechanical checks (what to inspect)

  1. Power off and remove the wrist assembly from the arm so you can access the gear train.
  2. Manually move the problematic claw through its full range and compare to the healthy claw:
    • Feel for a hard spot, grinding, or uneven resistance.
    • Check for side loading on shafts (axle bending or misalignment).
  3. Inspect gear mesh and setscrews:
    • Ensure servo horn/adapter setscrew is tight and seating on the flat of the shaft.
    • Make sure brass gears are concentric and not rubbing a housing or bracket.
    • Look for burrs on the shaft or gear bore.
  4. Check bearings/bushings and any washers/spacers - missing or misplaced spacers can bind.
  5. Verify wiring and cable routing so nothing pinches or pulls the pot or horn while moving.
  6. Remove the servo from the assembly and test it unloaded (free in the air). If it moves freely unloaded, the problem is mechanical in the arm.

2) Lubrication & cleaning guidance

  • If metal gears: light application of white lithium grease or a light gear grease is appropriate.
  • If plastic gears: use a plastic-safe grease (silicone grease or specialized plastics grease).
  • Avoid getting grease on the potentiometer, motor brushes (if brushed), bearings where it may attract grit, or on any wiring.
  • Don’t over-grease; excess can migrate and contaminate the pot.
  • If you find burrs on a shaft, carefully file/sand and clean before reassembly.

3) Potentiometer / internal servo checks

  • If the servo requires a nudge only when under load (but moves freely unloaded), check:
    • Potentiometer wear or intermittent contact (especially if the pot is rubbing or has grit).
    • Set-screw slipping which lets the horn be slightly out of position relative to the pot, so the controller thinks it’s at the commanded position while mechanically it isn’t.
  • If you have the PWM servo Feedback (ADC) skill wired to the servo pot, use it to watch ADC values while moving the horn manually - noisy jumps or dropped values point to pot issues or a bad connection.

PWM servo Feedback (ADC) skill doc: https://synthiam.com/Support/Skills/Servo/PWM-Servo-Feedback-ADC?id=18047


4) Power checks

  • Measure servo power voltage while commanding the servo: if voltage collapses under initial torque the servo may hesitate.
  • Confirm EZ-B battery monitor settings are not limiting power. If you see voltage dips, provide a stronger/regulator servo supply (within servo voltage spec).

EZ-B v4 info: https://synthiam.com/Support/Hardware/EZ-B-v4


5) Auto Release - you already enabled it (good). How to configure via the kebab menu

  1. Open ARC and locate the Auto Release skill in your project.
  2. Click the three-line kebab (top-right) on the Auto Release skill window Settings.
  3. Set Board Index to your EZB index.
  4. Select the servo Port (e.g., d6) and click Add to add it to the Port List.
  5. Set Release After (seconds) to 2-5 (start with 2).
  6. Ensure Pause is unchecked and save.

This reduces holding current and heat and will often extend life for animation-only servos.

Auto Release skill doc: https://synthiam.com/Support/Skills/Servo/Auto-Release?id=16107


6) Diagnostic JS script for ARC

Paste this into a Script control in ARC (Project Add robot skill Script). Replace d6 and ADC0 with your servo port and ADC port (if you have the pot wired to ADC for feedback). This script will slowly sweep the servo and print commanded position, last commanded position read by ARC, realtime (if available), ADC reading, and release state.

// Replace d6 and ADC0 with your ports
let servo = d6;      // <--- change to your servo port constant (d0..d23 or v0..)
let adcPort = ADC0;  // <--- change to your ADC port if using PWM servo Feedback, otherwise ignore

print("START servo diagnostic for port:", servo);

// Sweep from 60 to 120 to test motion and starting torque
for (let p = 60; p <= 120; p += 2) {
  Servo.setPosition(servo, p);
  // Give servo a little time to respond
  sleep(120); // milliseconds

  // Print commanded / stored ARC position
  print("cmd:", p, "Servo.getPosition:", Servo.getPosition(servo));

  // Some servos / drivers support realtime position; may not be available for plain PWM
  try {
    let rp = Servo.getPositionRealtime(servo);
    print("realtime:", rp);
  } catch (e) {
    // ignore if not supported
  }

  // ADC read (if you have pot on ADC)
  try {
    let a = ADC.get(adcPort);
    print("ADC:", a);
  } catch (e) {
    // ignore if not configured
  }

  // IsReleased check (returns true if torque released)
  try {
    print("IsReleased:", IsReleased(servo));
  } catch (e) {}

  // short pause before next increment
  sleep(100);
}

// Test release behavior
print("Releasing servo now...");
try { Servo.release(servo); } catch(e) {}
sleep(500);
print("After release, IsReleased:", IsReleased(servo));

print("Commanding center position (90) to re-enable...");
Servo.setPosition(servo, 90);
sleep(300);
print("Final Servo.getPosition:", Servo.getPosition(servo));
print("END diagnostic.");

Notes:

  • Do not put d6 or ADC0 in quotes; use them as constants.
  • Use smaller sweeps or different ranges depending on your claw travel to avoid mechanical stops.

7) If problem follows the servo

  • If swapping ports shows the issue follows the servo, it’s likely internal (pot, gears, lubrication).
  • You can:
    • Open the servo (if out of warranty) and inspect pot, geartrain, and brushes. Keep screws organized and note orientation.
    • Replace the potentiometer (requires soldering on many servos).
    • Replace the servo if you prefer not to service internals.

If you prefer, tell me the exact HDD servo part number or a close-up of the assembly (I cannot view photos - I’ll need exact text or measurements), and I can give a step-by-step disassembly checklist for that specific wrist.


8) Safety / best practices while servicing

  • Power off and remove batteries before mechanical work.
  • Keep screws and small parts labeled.
  • Re-test servo unloaded before re-installing into the arm.
  • Reapply Auto Release after re-install to protect from long holds.

9) Follow-up questions

  1. Which EZ-B port is the problematic servo currently using (e.g., d6)?
  2. Do you have the PWM servo Feedback pot wired to an ADC port? If so which ADC?
  3. Would you like a step-by-step disassembly guide for that wrist (I can provide one if you give the servo/hardware model or exact mounting details)?
  4. Would you like me to produce an automated test script that swaps positions and logs ADC so you can post results?

If you run the diagnostic script above and paste the printed output here (or tell me whether the servo behaves differently unloaded vs. loaded), I’ll interpret the results and suggest next action (repair steps or replacement recommendations). Would you like that disassembly checklist now?


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.