This is my first time trying to control a brushless motor with Arduino, but I'm running into problems that I haven't been able to work through. I'm hoping it's just because I'm a noob with brushless stuff, and there's something easy I'm missing.
I'm using a tiny BetaFPV 11000KV 7.4v Whoop drone motor with a load current of 3.8A. (1103 Brushless Motors – BETAFPV Hobby)
The ESC is E-Power 10A
The battery is a 2S lipo
Arduino is Arduino Uno
A poor attempt at a circuit diagram:
When I connect the ESC to battery, the motor beeps to indicate that it is connected. I can do a calibration sequence where I output full throttle (PWM 2000us) for two seconds, then go to low throttle (1000us), and it gives me confirmation beeps for all of that.
But when I then try to start the motor by sending anything over min throttle (1100us, for example), the motor twitches a bit, then seems to power cycle as though it's browning out. Since my arduino is powered from the ESC, it also power cycles, so the whole process starts over.
I also tried powering the arduino from a separate power source:
But then the motor just continually twitches. I'm not sure what I did differently, but at one point, the motor actually started to spin, but then gave out some magic smoke. So I somehow toasted that motor. Luckily I have some more, but I want to figure out what I'm doing wrong so I don't burn up more of them.
I know these motors are intended for use with whoop flight controllers, but I thought they would work the same as any other brushless motor, and should be controllable with a normal ESC. But maybe they require some special type of ESC? That's probably a question for a different forum. But if anyone here knows what I might be doing wrong, any help is appreciated!
My test code:
#include <Servo.h>
#define ESC_PIN 9
Servo esc;
void setup()
{
esc.attach(ESC_PIN, 1000, 2000);
// Calibration sequence
esc.writeMicroseconds(2000); //Set high throttle. Get a confirmation beep
delay(2000);
esc.writeMicroseconds(1000); //Set low throttle. Get a confirmation tune
delay(2000);
esc.writeMicroseconds(1300); //Try to start the motor. Motor twitches, and everything resets.
}
void loop()
{
}