Oneshot125 is a new ESC protocol to replace PWM. In this post we will explain what Oneshot is, and the new BLheli feature, Active Braking (damping light) that help improve the throttle responsiveness.
What is ESC Protocol
An ESC protocol is used to communicate between FC (flight controller) and ESC (electronics speed controller). It tells the ESC and motor to go faster or slower. Originally this is based on servo position protocols, which is a PWM signal between the values of 1000ms and 2000ms, 1000ms means stop, 2000ms means full speed. But PWM is kind of slow, and susceptible to jitter, and that’s why Oneshot125 is introduced.
What is Oneshot?
Oneshot125 is a faster ESC protocol born in the mini quad FPV world. It’s synced to the PID loop, therefore it’s less jitter. Also it uses shorter signal so the FC can talk to the ESC/motor much quicker, and therefore in theory your multirotor should perform better.
You will need to have Oneshot feature enabled on both your Flight controller and ESC (Electronics Speed Controller). In this post we will discuss how Oneshot is better, and how to enabled Oneshot125 on the ESCs. We will also discuss Active Braking (Damping light) briefly at the end.
Here is a tutorial how I flashed BLHeli firmware on my Blue Series ESCs, and have oneshot enabled. I also compared the performance against SimonK.
How does Oneshot improve your quadcopter performance?
Flight Controller (FC) has a main control loop that calculates a new value according to the data from sensors. The motor output loop then pick up this value from the main loop and sends it to the ESC constantly. But the time it takes to complete a FC main control loop is not always the same, sometimes it takes longer, sometime shorter.
The motor output PWM signal sends whatever value is available, if there is no new value it will just use the old value. If we are lucky, the ESC might pick up a new value from the FC it just produced. But sometimes a new value is not being picked up yet, maybe because the ESC is still writing the old one to the motor, then we consider this value we are writing an “OLD” value.
It hasn’t caused any major problem in reality with this approach as we have seen, we are talking about only a few 0.001 seconds difference here. But some people has come up with a “fix” for this.
Oneshot – The New Way
So the solution is to synchronize the main FC control loop with the motor output signal.
Firstly, Oneshot125 sets the motor output timer speed 8 times faster. The motor output signal is now much shorter (125us-250us) than the original PWM (1ms-2ms), so it takes less time to send and the ESC can read the data much faster. The problem before as mentioned, was sometimes the value wouldn’t change on the ESC until half way through a control loop.
Secondly, it only sends “one shot” of the signal every flight controller loop, and it does this as soon as the Flight Controller has a new value for the ESC. (I am guessing maybe this why it’s called “oneshot” :) )
The ESC is now writing a new value to the motor, even before the FC is starting the next control loop, so we have the fastest possible FC and ESC Response. Pilots that have tested it reported P value can only be increased a little (not major improvement on PID gains), but the biggest change was to throttle response, faster change of motor speed.
Check out this post for some simple explanation of Quadcopter PID.
How to Enable Oneshot on ESC
To have Oneshot enabled, all of your ESC, ESC firmware, FC, FC firmware have to support this feature.
Supported ESC and Firmware
ESCs that have BLHeli rev13.0 or newer version flashed supports Oneshot, and it will be automatically selected without additional work. I believe SimonK now also supports Oneshot.
Supported Flight Controller boards / Firmware
As far as I know, only the Naze32 boards with Cleanflight are supported perfectly currently, without any issue.
The CC3D boards have been tested with a PPM receiver, however parallel PWM receivers might not work properly with this board. I have heard that’s because the motor output pins shares the same timer as the receiver pins. That’s a fundamental issue and is going to be difficult to fix.
Enabling Oneshot in Cleanflight and Configuration
- To configure Oneshot, you must turn off any power to your ESCs.
- Configure your ESC for Oneshot mode (e.g. by soldering JP1 in the case of the KISS ESC).
- Connect a USB cable to your board, and connect using the Chrome GUI app.
- Go to the CLI tab, and type the following:
- Then you can safely power up your ESCs again.
Calibration Oneshot ESC
The process for calibrating oneshot ESCs is the same as any other ESC.
- Ensure your ESCs are disconnected from Lipo Battery
- Ensure propellers are taken off
- Connect the board to PC and go to Cleanflight configurator, the motor test tab.
- Check “TEST MOTOR”, and Set the all motor speed to maximum using the master slider.
- Now Connect LiPo battery to your ESCs. They will beep to indicate calibration mode.
- Drag the slider down quickly, so the motor speed is now zero. The ESCs will beep again to indicate the successful calibration.
- Disconnect and reconnect battery to your quadcopter, and verify that moving the motor slider makes your motors spin up normally at the same time.
Active Braking – Aka Damping Light in BLHeli
Active Braking is a feature in BLHeli firmware, many people enabled this along with Oneshot125 to get more responsive result.
With damping light (Active braking) enabled, when you reduce throttle the ESC will actively reduce the motor speed. Without it the prop will only be slowed down passively by the air resistance as you drop throttle. This is especially obvious with longer larger props than smaller props, due to inertia. Many observed when this is disabled, the quad feels more “floaty”, when enabled, the quad feels more responsive with throttle changes.
Original Post of Oneshot125.
Cleanflight Doc on Oneshot.
Hydra showing the difference between normal PWM and Oneshot on a Oscilloscope.
More advance ESC protocols
There are now even more advanced ESC protocols on the market.