ESC arming problem

Hi, I'm building my first quad and am having problems getting the ESCs to arm. I have followed the ESC calibration instructions, several times, but no luck. On the APM (loaded with the latest code V2.1.0) I get a solid green light indicating it is armed. Radio has been calibrated. I attached a Fluke Scopemeter to the ESC drive pins on the APM to see what was going on and found everything OK, once the APM is armed I get pulses ranging from about 1.00ms to 1.80ms as the throttle is advanced. The pulse repetition rate (frequency) was 400Hz. To test the ESC I used a pulse generator and found that the ESC will not arm at any frequency above  150Hz (1.0ms pulse width). The ESC arms correctly when connected directly to my radio receiver (50Hz rep rate, 1.0ms pulse width).

The ESC is a E-flite 30 Amp Pro. Eflite technical phone support couldn't offer any suggestions.

As I see it I have two options, buy different ESCs and hope for the best or use the ones I have and change the ESC drive frequency to 150Hz in software and reprogram the APM.

Does anyone know where in the code I can change the frequency? I am not a programmer but can usually tinker with existing code to make things work.

Any ideas or suggestion would be welcome, thanks....

You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –


  • I had a similar problem to this, and wrongly assumed from the ESCs beeping that the ESCs were forgetting their calibration once powered down. Once I scoped it, I saw the real problem. I originally posted this in a thread about user hooks, but it should be here:

    "To anyone following this: I've determined that my ESCs are 'special', but it's not that they forget the calibration each time they boot!

    They are emitting 'bidoobidoobidoo' *pause* 'bidoobidoobidoo' *pause* on repeat once booted. This is because they won't boot until you reduce the throttle signal they're receiving to the calibrated lowest setting OR because they're receiving no signal at all. I'll investigate what signal I'm getting from the output pins of my APM (the RC output pins) using my oscilloscope and go from there."

    "The scope showed that my PWM widths were identical between the receiver throttle channel and the APM output, but the continued beeping of the ESCs (and the much higher frequency that I was getting as output from the APM) indicate that they simply can't take an update rate this high.

    I'll get back to the manufacturer, and move this thread where it might be more helpful, it doesn't belong here."

    The manufacturer hasn't yet got back, but meantime I've recompiled with INSTANT_PWM ENABLE in APM_CONFIG.h and hey presto, the ESCs spin the motors when I arm the APM and bring up the throttle.
  • Anyone know if it still slows the main loop down? Looks like the functionality to change the interrupt? (or is it just a PWM (does atmel call it a CCR register?)) is not there anymore. Its seems to be less obvious in one of the libraries.

  • I'm also having problems with arming my turnigy plush 40 ESCs. Was the higher frequency just recently introduced? My last successful flight was on apm1 running 2.0.50. Now attempting apm2 with 2.1
  • Try putting 


    in your apm_config file and see if that solves your problems, it worked for me

  • 3D Robotics

    Yes, we use 400Hz to overdrive the ESCs for better performance. Yours are the first I've heard of that don't like that. 

    The function is called INSTANT_PWM. Here's the relevant code in the motors.pde file for whatever frame you're using:


            #if INSTANT_PWM == 0
            ICR5 = 5000;    // 400 hz output        CH 1, 2, 9
            ICR1 = 5000;    // 400 hz output        CH 3, 4, 10
            ICR3 = 5000;    // 400 hz output         CH 7, 8, 11

    5000 is the timer setting for 400hz
    40000 is the timer setting for 50hz

This reply was deleted.