Hi everyone!
This is my first post on this forum, and I wanted to share a strange issue I encountered while building my self-made quadcopter.
While testing the brushless motors of the quadcopter I noticed that one motor wasn't spinning as expected: it was struggling moving and didn't accellerate when the throttle went up, and it got very hot, even if it spinned for very few seconds before I turned everything off. At first I thought there was a short circuit somewhere, and did the following things:
- Checked if the screws where touching the motor's windings (They were not touching)
- Checked the resistence between the motor's connections (about 500 milli Ohms each, as it should)
- I made a diode measurement between the ESC's power lines and the connectors to the motor to see if the ESC was alive (There were about 0.4 Volts, so it was ok)
- Check the voltage on the ESC (it was the same one of the battery)
- Calibrate the ESC several times
What I would've done at this point was replacing the motor with another one to see if the problem was the motor itself or the ESC, but after some other tests, I noticed a very intresting thing: if the first signal the ESC receives is over 1200 us, it would work perfectly fine, but if it received a signal of 1000 us at any point followed by other signals, it would start to struggle and overheat again.
This is what appens with this code (first signal below 1200 us):
#include <Servo.h>
const int escs_pin[4] = {4, 5, 6, 7};
Servo ESC[4];
void setup() {
ESC[3].attach(escs_pin[3]);
ESC[3].writeMicroseconds(1000); // Starting up
delay(5000);
ESC[3].writeMicroseconds(1050);
delay(1000);
ESC[3].writeMicroseconds(1100);
delay(1000);
ESC[3].writeMicroseconds(1200);
delay(1000);
ESC[3].writeMicroseconds(1000);
}
And this is what happens with this code (first signal over or equal to 1200 us):
#include <Servo.h>
const int escs_pin[4] = {4, 5, 6, 7};
Servo ESC[4];
void setup() {
ESC[3].attach(escs_pin[3]);
ESC[3].writeMicroseconds(1000); // Starting up
delay(5000);
ESC[3].writeMicroseconds(1200);
delay(1000);
ESC[3].writeMicroseconds(1100);
delay(1000);
ESC[3].writeMicroseconds(1050);
delay(1000);
ESC[3].writeMicroseconds(1000);
}
If the problem was a short circuit, I don't think that the motor would've spin correctly in any way, but in this case it does, so i think the problem may be the ESC. Maybe I should modify the firmware to fix this, but even if I have an idea of how to do it, I don't really know what I should modify as I am new to the world of quadcopter and drones, and this is why I am here.
So why my ESC/motor behave this way? If the problem is the ESC, what do I have to modify in its firmware to fix the problem (if it is possible) ? Thank you in advance!
Also, I want to specify that for this project I am using an Arduino NANO RP2040, 3S LiPo Battery, 12A ESCs (BLHeli) and happymodel EX1204 5000kV motors with Gemfan 3025 propellers.




