XC-330 Oscillation in Current-Based Position Mode


We are using XC330-M288-T and XL330-M288-T servos as gimbals in inspection crawlers with RC-PWM control protocol. When in Current-Based Control mode, they get into an unstable high-frequency oscillation in certain positions, especially when there is very little load present. They do not do this when they are in Position Control mode, only Current-Based Position, no matter what the current limit is set to. They only oscillate around 1 degree but it is enough to blur the video and make a lot of noise.

In the attached video you can see at the start the XC330 is in Current-based Control with a 300mA limit and oscillates when moving to the center or getting bumped. We then switch it to Position Mode and it no longer oscillates.

We have tried varying the PID values in the Wizard and this does not seem to fix the issue either. It will still oscillate.

Has anyone ran into this issue and been able to fix it?



DYNAMIXEL Controller:

RC-PWM and ESP32 - issue happens on both

Software Interface:

RC-PWM and standard servo library on ESP32

I only have an XL330-M288-T and using RC-PWM via a U2D2 and Windows 11 + Dynamixel Wizard 2, and I do not have any vibration problem with Current-based Position Control mode.


What do you mean by using “standard servo library on ESP32”? The Dynamixel2Arduino library? Or do you have another operating system? What kind of Dynamixel Controller do you use?


The oscillation is a result of the high response rate of the internal current controller generating repeated overshoots for these small position corrections. Usually, raising the D gains and reducing P gains can help alleviate this problem… You mentioned you tried adjusting the PID values already, what adjustments did you test?


I tried both the D and P gains in the position control and it did not stop the oscillations, but I will try again and specifically make the changes you suggest.

Also, the changes do not seem to save when I repower the servo. All the settings in blue revert back to factory when the servo is repowered. Is there a specific way to save these changes?


We have multiple gimbal designs, and it only happens on certain gimbals that have similar weight distributions. Some of the gimbals never oscillate. The servos seem like they do not do it unless they are loaded in a specific way. It is especially bad when the crawler chassis and gimbal are both facing straight down. It is also noticeably worse on the XC330 servos.

I am using the ESP32Servo.h library to generate RC-PWM signals. I am using an ESP32 but in the video I was using the U2D2 adapter. It also happens when hooked up to a FlySky or FrSky receiver outputting RC-PWM.

Thank you very much for sharing about the ESP32Servo.h library because so far I could not use the Dynamixel2Arduino on any ESP32 controller.

Let me know if the adjustments help to alleviate the oscillating issues.

In order to save the PID gain settings to the servo between resets you just need to toggle the Restore Ram bit in Startup configuration.


We were able to get the oscillations to stop by decreasing the Position D Gain to 500 and the Position P Gain to 1000. They still try to oscillate when you tap the gimbal, but they quickly dampen and stop.

However, we cannot get the settings to save between resets even with the Bit 1 Restore RAM setting applied.


I forgot to mention that you need to backup the control table data to be restored using a control table backup packet.

That should be all you need to do to restore the PID controller settings after a reboot, sorry for neglecting to mention it in my previous reply.