How to Arm E-Flight ESC with Arduino and without Guessing

How to Arm E-Flight ESC with Arduino and without Guessing

If you read one of my first posts here at remotebits.com, on arming an ESC, I happened up the solution by accident.  Today I wanted to try to arm an RC airplane ESC and it occurred to me that I didn’t have to guess how to do it.

Disclaimer: use this information at your own risk.  I am not responsible for any damage.

A more elegant solution was to read the PWM values first while turning on the transceiver and watching the Serial Monitor as the radio attempts to bind.  I wired up the ESC signal pin and I read the PWM signal value as 0.  Then I turned on the radio and got a PWM of 1095 microseconds.  1095 microseconds is nearly zero throttle.  I was expecting an actual sequence, such as full throttle, half throttle, no throttle, but I didn’t see that.  My only concern was that it happened so fast I couldn’t measure it in the Arduino Serial Monitor.  But when I sent the same value to the ESC, I got the characteristic bind chimes right away!  I was quite surprised.  I then decided to see if I could turn the motor with around 1500 microseconds.  To my disappointment, it no longer worked. I didn’t even get the bind chimes.  I poked at it a few times with some PWM values when it occurred to me perhaps it is expecting the PWM for a certain length of time.  I started to experiment with this but still didn’t hit the answer.  Until I decided to try it again with the radio and listen to the chimes.  When I heard the boot chime, I turned on the radio and it was a full three seconds before the bind chimes rang.  Ah ha!  So I added a minimum 4 second delay before attempting to turn the motor, and that was the key.

The reason I hit the jackpot so fast on the first time was because my loop was empty.  So after the setup ran, there was nothing going on.  Or, in other words, the “nothing going on” was actually meeting the minimum amount of time at 1095  microseconds to arm the ESC.  Only after that could you successfully send PWM for turning the motor.

The first time I went through this exercise, I spent an entire evening trying to figure out the magic.  This time around I did it in less then half an hour.  It’s a great feeling.

So if you’re reading this trying to figure out what PWM signals you need to arm your brand’s ESC, try reading the values from the radio during the binding sequence instead.  It’s a whole lot easier than guessing.


/*
 * This sketch arms an E-flight brand electronic speed controller
 * 
 * The trick to figuring this out was to hook up the radio to an Arduino input pin and read the PWM during binding beforehand.  For me, this gave a value of 1095.
 * After that, the hint needed was listening to the binding chimes while turning on the radio.  I counted at least three seconds before the confirmation tone.
 * So you need to add a minimum delay value before trying to run the motor or else it won't bind.
 */
 
#include 

Servo motor; 

void setup() {
   motor.attach(3);
   motor.writeMicroseconds(1095);
   delay(4000);
}

void loop() {
    motor.writeMicroseconds(1250);  // now we can turn the motor on.
}

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.