Introducing Oneshot ESC Protocol – Better FPV Drone Performance Than PWM

by Oscar

In this post, we’re diving into Oneshot125, a cutting-edge ESC protocol designed to enhance the responsiveness of your FPV drone beyond the traditional PWM signal. We’ll explore what Oneshot is, and introduce the BLHeli feature, Active Braking (damping light), which dramatically improves throttle response.

Some of the links on this page are affiliate links. I receive a commission (at no extra cost to you) if you make a purchase after clicking on one of these affiliate links. This helps support the free content for the community on this website. Please read our Affiliate Link Policy for more information.

Understanding ESC Protocols

An ESC protocol is crucial for communication between the flight controller (FC) and the electronic speed controller (ESC), which governs the motor’s rotation speed. Traditionally, this communication has relied on PWM signals, ranging from 1000ms to 2000ms (0% to 100% throttle). However, PWM is pretty slow for FPV drone applications, and can be prone to jitter, leading to the development of Oneshot125.

For a comprehensive overview of ESC protocols, check out this article: https://oscarliang.com/esc-firmware-protocols/

What is Oneshot?

Oneshot125, specifically tailored for FPV drone, is a faster alternative to PWM. Created by firmware developers who synchronized the ESC signal with the PID loop, it reduces susceptibility to jitter. Oneshot uses a shorter signal width, allowing the FC to communicate with the ESC/motor more rapidly, theoretically enhancing your multirotor’s performance.

To use Oneshot125, ensure your flight controller supports the feature and that your ESCs are updated with the latest BLHeli firmware, which recognizes the protocol automatically. This post will cover why Oneshot125 outperforms standard PWM and guide you through enabling it on your ESCs. We’ll also delve into the advantages of Active Braking (Damping light).

Note: With OneShot, the motor_pwm_rate is disabled in Cleanflight, so its setting becomes irrelevant.

How Oneshot Improves Drone Performance

Traditionally, a flight controller operates with a main control loop that calculates motor outputs based on sensor data. This calculated value is then picked up by the main control loop and sent to the ESC. However, the duration it takes to complete a flight controller (FC) main control loop can vary.

With the standard PWM motor output signal, whatever value is available is sent—whether it’s new or old. If we’re fortunate, the ESC may pick up a new value recently produced by the FC. But at times, a new value isn’t picked up immediately, possibly because the ESC is still processing the old one. This can mean the value being written to the motor is old.

Though this scenario doesn’t typically cause significant issues, as the time differences are minimal (we are talking about just a few milliseconds here), some developers have proposed a solution.

Oneshot – The New Approach

Oneshot125 addresses the above issue by synchronizing the FC’s main control loop with the motor output signal, implementing two key changes:

  1. Increased Timer Speed: Oneshot125 boosts the motor output timer speed to eight times faster than standard PWM. While traditional PWM signals range from 1ms to 2ms, Oneshot reduces this to just 125us-250us. This accelerated pace means data is transmitted to the ESC more quickly, mitigating the issue of delayed value updates.
  2. Single Signal Per Loop: Oneshot only sends one pulse of the signal per flight controller loop, immediately after the FC has a new value ready for the ESC. This is likely the origin of the name “Oneshot.” The ESC begins writing this new value to the motor even before the FC starts its next control loop, resulting in quicker responses from both the FC and the ESC.

Pilots who have tested Oneshot125 report minimal improvements in PID gains but significant enhancements in throttle response, including faster changes in motor speed.

For a straightforward explanation of how quadcopter PID works, check out this post on Quadcopter PID: https://oscarliang.com/quadcopter-pid-explained-tuning/

How to Enable Oneshot on Your ESC

For those looking to enhance their FPV drone’s responsiveness and speed, enabling Oneshot on your ESC is a vital step. Here’s how to ensure that your ESCs are compatible with Oneshot125 and properly updated with the new BLHeli firmware. Your flight controller (FC) must also be updated to the latest firmware that supports Oneshot.

Supported ESC and Firmware

ESCs that are flashed with BLHeli rev13.0 or a newer version support Oneshot and will automatically detect the protocol without additional configuration. Recent updates to SimonK firmware now also include support for Oneshot.

Supported Flight Controller Boards / Firmware

All flight controllers that are compatible with the latest versions of Cleanflight, Betaflight, Raceflight, and KISS now support Oneshot.

Calibrating Oneshot ESCs

The calibration process for Oneshot ESCs mirrors that of standard ESCs:

  1. Ensure your ESCs are disconnected from the LiPo battery.
  2. Remove the propellers for safety.
  3. Connect the board to your PC and open the Cleanflight configurator, navigating to the motor test tab.
  4. Activate “TEST MOTOR” and set all motor speeds to maximum using the master slider.
  5. Connect the LiPo battery to your ESCs; they will emit a beep to indicate calibration mode.
  6. Quickly drag the slider down so the motor speed is now zero. The ESCs will beep again to confirm successful calibration.
  7. Disconnect and then reconnect the battery to your quadcopter. Check that moving the motor slider causes your motors to spin up normally and simultaneously.

Don’t Forget Active Braking!

Active Braking, also known as Damping Light, is a feature in the latest BLHeli ESC firmware that many pilots enable alongside the Oneshot protocol to achieve more responsive performance.

With Active Braking enabled, your ESC will actively reduce motor speed faster as you lower your throttle, instead of just letting the props slow down passively through air resistance. This results in more responsive throttle control and a more agile quadcopter. Without it, the quad may feel more “floaty.”

Caution: Active Braking can cause voltage spikes during braking, which might disrupt your video feed or potentially damage the electronics in your mini quad. Installing low ESR capacitors at the power or ESC can mitigate this issue: https://oscarliang.com/capacitors-mini-quad/

More Info and Resources

For the foundational post on Oneshot125 and documentation, refer to Cleanflight’s official guides: https://github.com/cleanflight/cleanflight/blob/master/docs/Oneshot.md

See Hydra demonstrating the difference between normal PWM and Oneshot on an Oscilloscope:

Exploring More Advanced ESC Protocols

As technology evolves, so do the protocols. Apart from Oneshot125, the market now features more advanced ESC protocols like Oneshot42, Multishot, and D-Shot, each offering distinct advantages for specific flying styles and needs.

Edit History

  • Mar 2015 – article created.
  • Apr 2024 – fixed grammar.

Leave a Comment

By using this form, you agree with the storage and handling of your data by this website. Note that all comments are held for moderation before appearing.

35 comments

JL 27th December 2016 - 9:02 am

Hi,
I would like to add a few words about the OneShot125 operation.

Before de the OneShot125, the PPM signal was (is still) generated by a module specialized for PWM signal (PWM generator). This module is inside the processor chip. So when the main loop has finished to calculate the new value for a motor ESC, it is written to this PWM generator : this is instantly (as fast as the FC can do it).

So there’s not a problem of synchronization as mentionned in the video. Fortunatly it works fine as it did so far.

The only main difference (and this is why it is really new and better) is the period signal : in PPM/PWM the signal length is still the same whatever is the speed order (only period high state changes). New value, coming from FC and written to PWM generator, will be really produced by the PWM generator only when the previous one is complete. So it takes time… During that time, OneShot125 would have produced more new values the motor would have executed.

PWM is a long constant period signal while OneShot125 is a pulse.
PWM period is about 2 000 µs (and more) while OneShot125 is only 250µs for the largest pulse and only 125µs for the shortest pulse.
So, OneShot125 makes our ESC 10 times more responsive than PPM/PWM.

Compared to OneShot125 delay, the time the main loop takes to generate a new value is now bigger. So visually each new value from FC updates instantly the ESC.

I hope it helps a bit.

Reply
Jason 3rd December 2016 - 9:08 pm

Had anyone had any experience with the Rise Vusion 250? I read that ESCs have Oneshot programming. Any ideas on what FC comes with the quad?

Reply
Doug 16th May 2016 - 6:03 pm

If I have self tightening prop nuts are they going to loosen and fall off when using damped light?

Reply
Oscar 16th May 2016 - 8:01 pm

no :)

Reply
Lawrence 26th April 2016 - 12:01 pm

HI Oscar, love your blog and the IntoFPV.com website.

I see on the surveilzone website for the popular HS1177 they have a disclaimer stating “getting damaged cameras due to the voltage spikes that can happen when the active braking kicks in, sometime up to 35 volts” and suggest a 9V BEC or voltage regulator. Have you experienced this? Do you know if it is with specific ESC’s?
i’m new to the hobby and your sites have helped tremendously. I am using that camera with active braking and think i may need to add a regulator…I’m using the AfroESC 12A.
Thanks!

Reply
Oscar 28th April 2016 - 12:13 pm

voltage spikes caused by ESC is fairly common these days due to active braking: http://intofpv.com/t-littlebee-20a-esc-burns-vtx

I always use a good PDB with LC filter built-in to provide 12V for my FPV gear so I haven’t never had any problems with this.

But I don’t think Afro ESC would produce too much voltage spikes, I think they have built-in capacitors on them to prevent this?

Reply
arnel apurada 6th April 2016 - 3:16 am

Hi Oscar, when i enable oneshot in CL my motors won’t arm or spin, what could be the cause?

Reply
Oscar 6th April 2016 - 4:08 pm

your ESC’s don’t support oneshot?

Reply
arnel apurada 7th April 2016 - 7:22 pm

hi Oscar, im using blue series 12a esc and it says support oneshot , but when i enable oneshot in Cleanflight the motor won’t arm

Reply
Greg Huddleston 23rd January 2016 - 12:23 am

Hi Oscar,

I have tried my RG-20 ESC’s with OneShot and active braking enabled (light dampened), and want to try them with active braking disabled.

How do I turn off just active braking? Can this be done in the CleanFlight configurator without refreshing the ESC’s in BlHeli?

Reply
Oscar 25th January 2016 - 8:34 pm

you need to connect to BLHeliSuite and under “PWM frequency”, you should see Damped light, next to it is a house icon, that’s the default button… press the house icon and it should turn off active breaking…
lastly, i would really appreciate it if you could post your questions on the forum in the future: http://intoFPV.com … I don’t want to miss your comment, because I only check my blog comments once a week, but I use the forum daily!

Reply
Chris 21st August 2015 - 10:54 pm

Hi Oscar
I somehow managed to enter into the settings system for the Emax BLHeli ESC’s.
I wasn’t sure how to get out of it and ended up pulling the plug just to stop the consistent beeping. I ended up with No. 3 motor spinning the wrong way. Not sure how, I followed instructions to reset them but had trouble. I ended up trying to go through the settings on each ESC individually. Still had trouble motors kept spinning up randomly a full throttle meaning I couldn’t hear the beeps ended up having to pull the battery on a few occasions to stop motors.
Went through it all again and went fine until motor 4. Half way through setting both #4 and #1 spun at full throttle but only #4 was plugged in.
I switched it all off had a coffee and re flashed the firmware in the configurator.
Now when I plug it all in. Motors won’t arm unless I send a throttle signal with the controller, then they will arm but not all at the same time and go to full spin at zero throttle, they stop at centre throttle and spin in reverse at full throttle.
My question is Which component is likely to be fried. Naze32 (this is my second one in three weeks). Or the ESC’s.
It flew ok until the ESC setting freak accident.
Hope you can help
Thanks
Chris

Reply
Oscar 24th August 2015 - 10:41 am

sounds like you have activated the “3D Flying” in “Motor Direction” (where you should have Normal / Reverse / 3D ), go back to BLheli and change motor direction back to Normal.

Reply
Chris 24th August 2015 - 8:12 pm

Hi Oscar
Thanks for the reply
This all happened in cleanflight using the motor control utility.
I have been reading up on BLHelisuite but am very confused with it all at he moment.
I know that my Emax 20A ESC’s use a Silab chip.
So would I need the BLHeli-Hobbywing-Skywalker Usb adapter>?
Am I just flashing firmware or bootloader too?
It says that a resister and diode need to be removed which may affect performance.
Do they need to be replaced after flashing?
Am I better off buying new ones and not playing about with them?
Thanks for all the shared info.
Chris

Reply
Oscar 25th August 2015 - 12:25 pm

Hi Chris you should be able to connect the ESC to BLHeliSuite software using “one wire interface”, which only requires connection from the signal and ground wire on the ESC.
I am not sure if EMAX has some official tool you can buy to to this on their ESCs, maybe check with the seller?
I usually use an Arduino UNO board to do this and this should work for any ESCs.. I have a simple guide how to do this on my blog.

Reply
Chris 1st September 2015 - 8:37 pm

Hi Oscar
I have tried using BLHelisuite. I flashed my Arduino Nano with the one wire bridge firmware.
I have selected the correct ESC from setup Hex files but I can’t connect to my ESC. I have tried every combination of connecting sequence I can think of. I have watched a couple of video’s of people flashing their ESC and they beep when they connect the battery.
When I connect my battery, the ESC makes no sounds, NO BEEPS nothing.
Is there something I am missing.

Reply
Fernando 27th October 2015 - 12:02 am

Hi Chris !! Did you fixed the problem with your motor #3. Have same problem. I just set up my mini quad 250 but for any reason the motor 3 accelerating with constant throttle, I using naze32 cleanflight tmotor 2206 2300kv BLHeli 20amp, I did try baseflight ,replace ESC, switch motors, try a diferent naze32. Flashed with diferent firmware 1.8, 1.9 and 10. and the problem continues. any help I appreciate . Thank you!!

Reply
Ruben Verkleij 11th August 2015 - 10:52 am

Hi Oscar,

i have bought some dys sn 20 esc s its my first time with blheli previously i used simon k quick question i flashed them with blheli14 damped light enabled and also oneshot is enabled,demag low, motor t medium. is it normal that when i m in the air and cut throttle and then back to full that it cant keep up i think because damped light brakes the motors and it crashes then. when im at low rpm and then back to full no problem. its only when i cut throttle fully, thank you oscar :)

Reply
Darko 17th June 2016 - 9:28 pm

I have the same issue! Crashed twice today?

Reply
Niko 10th July 2015 - 3:21 pm

Based on this article i decided to buy a USB programming tool for SimonK and i flashed it with BLHeli 13.2.
I love the new feel. It feels a lot more sensitive and responsive in a good way.

Keep creating those great articles! You are inspiring people.

Reply
mike 23rd June 2015 - 1:53 pm

where can i find a reference on what receiver bus types are supported in order to get oneshot125 to work on an acro naze32 board running baseflight(strongly considering moving to cleanflight)? i’m wanting to move from my spektrum ar610x receiver to a spektrum spm9546 satellite which uses a serial connection or trying out an orange r620x which comes in sbus and ppm flavors. i’d really like to use the spektrum satellite though to trim weight.

Reply
Oscar 23rd June 2015 - 4:33 pm

Sorry i don’t know the answer, but I think you should get help leaving a question on either Baseflight or cleanflight support page :)

Reply
MrBlonde 17th June 2015 - 10:45 am

Hey!
Thx for this article! Was very helpful for me!
As far as I know the benefits of BLHeli FW the OneShot feature, is that right? Many videos are demonstrating the difference to SimonK, which obvisouly is impressive. But now SimonK also supports OneShot125, right? Are there still any benefits flashing from SimonK with OneShot to BLHeli? I will receive my Afro ESCs the next days which got Oneshot125 already enabled but using SimonK (hobbyking.com/hobbyking/store/__55241__Afro_ESC_12Amp_Ultra_Lite_Multi_rotor_Motor_Speed_Controller_SimonK_Firmware_Version_3.html) and I’m considering buying an programming tool for the ESCs.

Reply
Oscar 19th June 2015 - 12:44 pm

Yes oneshot is now supported in both firmware. I really don’t think there is a big performance difference between the two to be honest. But BLHeli is WAY WAY WAY easier to use, due to the user friendly interface.

Reply
Krzysiek 29th April 2015 - 10:07 am

Hi,
I think that it will be always delay (more then presented on the picture), because hardware pwm timers use shadows registers, and you are not able to synchronize code execution with pwm generation. So max delay could be (in worst case) like one cycle of oneshot “clock”.
Regards
Krzysiek

Reply
Oscar 30th April 2015 - 2:24 pm

Thanks for the comment. Regardless the delay, it’s been proven oneshot performs very well :)

Reply
Ly 8th April 2015 - 11:06 pm

Some ESC have brake type. Does the brake type and damped light work the same?
Thank you

Reply
Oscar 10th April 2015 - 4:27 pm

not sure, better consult the BLHeli manual, see what esc supports damped light.

Reply
Jan 7th April 2015 - 11:46 am

Hi Oscar, at first thank you for this great blog, it helped me in many ways.
I have CC3D/Cleanflight1.8.1 with parallel PWM input, oneshot enabled and BlueSeries 12A flashed with blheli13 and everything seems to work fine. Do you have any more information why parallel PWM input together with CC3D and oneshot shouldn’t work or how it could misbehave? Or if is has been already fixed in Cleanflight?

Thank you.

Reply
Oscar 8th April 2015 - 12:30 am

I believe it was something to do with the “Timers” if I have not remember it wrong, which is hardware related that can not be fixed, no matter how you do it in software. Naze32 doesn’t have this problem though.

Reply
Mateusz 7th March 2015 - 6:18 am

OpenPilot GCS supports oneshot feature.

Reply
Oscar 9th March 2015 - 5:25 pm

Cool, thank you.
I don’t use OP GCS, so didn’t know.

Reply
Garz85 31st March 2015 - 10:13 am

OpenPilot GCS supports oneshot even with PWM RX?

Reply
Oscar 1st April 2015 - 3:15 pm

i think it does now.

Reply
hom chhea 24th April 2015 - 9:59 am

Op doesn’t support oneshot with pwm. Must use ppm.

Reply