ESC
Introduction
ESC, Electric Speed Controllers, are required for controlling electric BLDC (brushless DC) motors.
While most standard ESC's will work well with fixedwing, rotorcraft have higher requirements which cheap controllers maybe poorly meet.
Positive features for rotorcraft:
- Faster response to input signal (faster acceleration and slow down)
- More thrust
- Accept faster or other input signal (faster PWM input or I2C)
Beside these, they can also be less noisy.
Standard ESC can be used, but with a little work and an alternative firmware they will work better.
Big Heads-Up for Flyduino ESCs
Just to warn everyone using speed controllers with regenerative brake function such as the ones from FlyDuino: DO NOT TEST IT WHILE CONNECTED TO A LAB POWER SUPPLY ! The reverse current generated will damage the power supply or burn the Autopilot immediately.
Multiple ESC/BEC in one Aircraft
Most standard ESC come with a BEC (battery eliminator circuit) built in, which is supposed to supply servos and receiver with (mostly 5V) power.
Connecting multiple BECs in parallel can cause different problems through e.g different voltages and should be avoided.
Correct wiring examples can be found on the LisaMv2 page.
AVR (ATmega) based ESC
Simon Kirby develops an alternative firmware for ATMega based ESC controller, written in assembly.
Features:
- 16MHz operation on most boards
- 16-bit output PWM with full clock rate resolution (~18kHz PWM with a POWER_RANGE of 800 steps)
- 24-bit timing and PWM pulse tracking at full clock rate resolution
- ICP-based pulse time recording (on supported hardware) for zero PWM input control jitter
- Immediate PWM input to PWM output for best possible multicopter response (but NOT where soft start or really any significant current limiting is needed!)
- Accepts any PWM update rate (minimum ~5microseconds PWM low time)
- Optimized interrupt code (very low minimum PWM and reduced full throttle bump)
- Configurable board pin assignments by include file
- Smooth starting in most cases
- Forward and reverse commutation supported, including RC-car style reverse-neutral-forward PWM ranges, with optional braking
Programmer
Any ISP programmer will do the job, just some popular:
- usbasp There are tons of cheap chinese copies out there.
- Olimex AVRISP MKII Open Source Hardware Programmer capable of ICSP, TPI and PDI, based on LUFA
Related links
Hardware compatibility table (Openpilot)
Hardware compatibility table (google docs)
sim-/tgy git repository.
SiLabs based ESC
Some newer ESC are build with a Silicon Labs MCU with a Intel 8051 core.
They have a C2 programming interface and therefore need a special programmer.
Steffen Skaug provides an alternative firmware, written in assembly.
Features:
- Can be configured for helicopter MAIN motor or TAIL motor operation. Or as MULTIcopter motor operation.
- Main motor operation has governor functionality and multicopter motor operation has closed loop functionality.
- Motor operation can be damped for fast motor retardation.
- Many parameters can be programmed, either from PC applications for setup and configuration, or from the TX.
- Supports 1kHz, 2kHz, 4kHz, 8kHz or 12kHz positive or negative pwm as input signal, as well as regular 1-2ms PPM signal.
The easiest way is to program and set up the esc with the BLHeli setup tool (no surce available :( ).
Programmer
- owsilprog uses a Arduino
- Silicon Labs Toolstick available at Mouser for 8€ (requires little modification)
Related links
BLHeli Setup tool
tutorial on oddcopter.com
bitdump/BLHeli git repository
Projects
Open BLDC
Open hardware and open software brushless controller project. From small low cost up to 200A continous hardware, but currenty under development.
Related links
Homepage
open-bldc git repository
Benjamin's custom ESC
Open source/hardware ESC with a bunch of features (for a full list, visit his blog).
- 240A
- 40x60mm PCB
Related links
Homepage/Blog
bldc git repository
bldc-tool git repository
Non open ESC
Alpha ESC's
Sadly a closed source ESC only mentioned here since there is a module to read out the telemetry spit out by the Alpha ESC Read about it here alpha_esc_with_telemetry_output