I’m using a Blue Robotics M200 motor with a Blue Robotics Basic ESC controlled by an ESP32. The ESP32 sends 1500–1900 µs pulses for one direction, with 1500 µs as neutral. System is powered by 12.8V LifePO4.
The system worked normally for several times. Recently, after the motor has been running and I reduce the command to 1500 µs, the motor sometimes continues turning very slowly. It may stop after a few seconds, then make occasional brief/random starts for several minutes before stopping completely.
After initialization, the motor can remain idle at 1500 µs for 10–15 minutes without any issue. The problem only appears after the motor has been running and is then returned to neutral.
Could this behavior indicate a failing or temperature-related ESC, possibly triggered by deceleration or regenerative voltage, even if the ESC is receiving a stable 1500 µs signal?
My first guess would be that there’s a timing mismatch between the signal your ESP32 thinks it’s sending and what the ESC is measuring as received. That can be caused by electrical characteristics of the signal wires (or power supply, but that’s less likely), or by the timing circuitry on one or both of the boards (which may be somewhat influenced by the temperature, or other factors).
If the motor isn’t swapping direction then that would indicate the timing is offset or scaled in the direction of the pulses you’re normally sending (e.g. if you’re normally sending >1500 then the pulses are being measured as too long), in which case you could try subtracting some microseconds from the pulse durations (e.g. considering neutral as 1495 or 1490). The ESC does have an intentional dead zone around neutral, so if you find the start and end of that region then you can set the middle of it as neutral to provide some buffer in both directions against any fluctuations.
If trimming the signal like that doesn’t help then there may be an issue with electrical noise on the wires that’s causing measured pulses the ESC is interpreting as control signals. You could try checking this with an oscilloscope, and/or adding some electrical isolation (distance from nearby electrical decided and wires / twisted signal + ground wires) or insulation (foil or metal mesh wrapped around the signal wires and/or ESC, taking care to avoid short-circuits) to reduce the interference.
If none of that helps, and you’ve determined there’s no nearby source of electrical noise, the there may be an issue with your ESP32 or your ESC, so you should try using/testing them independently to verify whether they’re both behaving as expected.
Like Eliot, I suspect the signal. It may be fixable by trimming your 0 throttle point +/- 5 microseconds - perhaps the ESP32 clock is shifting slightly as things warm up? I would not expect this to be related to anything on the ESC side of things - there have been some issues with ESC clocks drifting on the Basic ESC 500, but this is typically fixed by trimming the neutral point.
Thank you Tony and Eliot!
Indeed, I think it happens after the motor is working for a while, and probably temperature increased. I have started by replacing the signal wiring to ensure the is no connectivity issue.
Re changing the neutral pulse duration - Since it happens only in load conditions , is there any way to test which “direction” (add or subtract) should I change it? Note that when I hear the minor turning, I’m not sure which side it is, because I just hear it, I cannot see it. In some cases, it also beeps once.
I’d suggest finding both the start and end points, either by sweeping through the 1450 to 1550 region and recording where it’s stopped / inconsistently spinning, or using binary search to find each point. From there you can set your neutral point to the middle of that region.
If you think the temperature has an effect then you can also try running the motor quite hard for a while and re-finding the dead zone, and seeing whether it’s different from before. If it is different then you can hopefully choose a neutral point that’s consistently stopped in both “from rest” and “after usage” situations.