
English: 
This is my new ESC board that I’ve designed.
I’m more than happy and proud of the results.
It works very nice just as I would expect
from a commercial ESC. It is made with the
ATmega328 chip and it is programmed in Arduino.
Two years back I’ve made my first ESC with
this huge board. This already had some sort
of BEMF implemented. Then I’ve made a second
model with PWM input in order to control the
speed. Finally, I’ve made this board that
has everything a normal ESC should have. It
has a buck converter on board for 5V, PWM

Spanish: 
Esta es mi nueva placa ESC que he diseñado.
Estoy más que feliz y orgulloso de los resultados.
Funciona muy bien, como era de esperar.
de un ESC comercial. Está hecho con el
Chip ATmega328 y está programado en Arduino.
Hace dos años hice mi primer ESC con
Esta enorme tabla. Esto ya tenía algún tipo
de BEMF implementado. Entonces hice un segundo
modelo con entrada PWM para controlar el
velocidad. Finalmente, hice este tablero que
tiene todo lo que un ESC normal debería tener. Eso
tiene un convertidor de dinero a bordo para 5V, PWM

Spanish: 
señal de entrada para control de velocidad, programación USB,
Detección BEMF con muy buena precisión.
podría alcanzar velocidades muy altas y también controlar
el torque y está programado en Arduino.
Este es un código abierto total y pondré el
circuito y el código debajo de este video si
quieres hacer un ESC tú mismo. yo mostrare
cómo funciona el circuito para controlar
La rotación del motor y detectar el BEMF,
cómo he diseñado la placa, cómo soldar
todo y también explicaré el código
un poco. También veremos algunas pruebas y
resultados de este nuevo tablero. Voy a intentar de explicar
todo lo que puedo sobre este ESC y sobre los ESC en
general. Para más, mira mis otros dos
videos sobre ESCs. Antes de comenzar, asegúrese de
presionas el botón Me gusta y la notificación
campana para ver mis futuros videos.
Además, gracias a todos mis PATREONES por 
el apoyo. Entonces empecemos.

English: 
input signal for speed control, USB programming,
BEMF detection with very good precision so
it could reach very high speeds and also control
the torque and it is programmed in Arduino.
This is total open source and I’ll put the
circuit and the code below this video if you
want to make an ESC yourself. I will show
you how the circuit works in order to control
the rotation of the motor and detect the BEMF,
how I’ve designed the board, how to solder
everything and I’ll also explain the code
a little bit. We will also see some test and
results of this new board. I will try to explain
all I can about this ESC and about ESCs in
general. For more, please watch my other two
videos about ESCs. Before we start, make sure
you hit the like button and the notification
bell in order to see my future videos.
Also, thanks to all my PATREONS for 
the support. So, let’s get started.

Spanish: 
Qué pasa mis amigos, bienvenidos de nuevo. Empecemos por
mirando las características principales que quería
para mi tabla Al igual que cualquier otro ESC, quería
tener un circuito de regulación de voltaje. Utilizando
este MP23 07 buck convertidor IC y algunos más
componentes como la bobina, resistencias y
condensadores, puedo obtener 5V de la entrada principal
de 12V o más. También quería tener un USB
programador y he usado este CH340 que

English: 
What’s up my friends, welcome back. Let’s start by
looking at the main characteristics I wanted
for my board. Just as any other ESC, I wanted
to have a voltage regulation circuit. Using
this MP23 07 buck converter IC and a few more
components such as the coil, resistors and
capacitors, I can get 5V from the main input
of 12V or more. I also wanted to have a USB
programmer and I’ve used this CH340 that

English: 
will create the serial signals so I could
program the chip using the USB cable. The
chip I’ve used is the ATmega328, which is
the same microcontroller the Arduino is using.
I also wanted my board to have a PWM input
to set the speed just as a commercial speed
controller. So, for that I have these 3 pads
with GND, 5V and PWM input and in the code,
I create interruptions and read the PWM signal
value in us. I also wanted to have a calibration
mode which is a very common part for ESCs.
If you start the ESC and the input is higher
than a certain range, it will enter into configuration
mode where you could set the range of the
input PWM. Here is an example. I put throttle
joystick in the middle and I connect the radio
receiver. I start the ESC board and the LED
is flashing and waiting. I increase throttle
to maximum and just after that I put throttle
to minimum. Now the LED is flashing different
and the new range was stored to the EEPROM
of the microcontroller. Now I could just increase

Spanish: 
creará las señales en serie para que yo pueda
Programe el chip con el cable USB. los
El chip que he usado es el ATmega328, que es
el mismo microcontrolador que usa el Arduino.
También quería que mi placa tuviera una entrada PWM
establecer la velocidad como una velocidad comercial
controlador. Entonces, para eso tengo estos 3 pads
con entrada GND, 5V y PWM y en el código,
Creo interrupciones y leo la señal PWM
valor en nosotros. También quería tener una calibración
modo que es una parte muy común para los ESC.
Si inicia el ESC y la entrada es mayor
que cierto rango, entrará en configuración
modo donde puede establecer el rango de
entrada PWM. Aquí hay un ejemplo. Puse el acelerador
joystick en el medio y conecto la radio
receptor. Comienzo la placa ESC y el LED
está parpadeando y esperando. Aumento el acelerador
al máximo y justo después de eso puse el acelerador
al mínimo Ahora el LED parpadea diferente
y la nueva gama se almacenó en la EEPROM
del microcontrolador. Ahora solo podría aumentar

English: 
throttle and the motor will spin. I also wanted
BEMF detection, so the motor will always stay
in sync and also have good torque. Even if
I try to stop the motor it will stay synchronized
due to the BEMF read. I do that using some
voltage dividers with these resistors and
using the integrated comparator the ATMEGA
chip already has on digital pin 6. To control
the motor rotation, I have these MOSFET bridge
with 6 transistors. To control the transistors,
I’m using 3 dual drivers, the IR21 01. This
board has some small errors but I’ve already
corrected that in the final board. For example,
GND was not connected to the buck converter
chip so I had to make that with wires. I also
wanted a buzzer but by mistake I’ve connected
this component to a non PWM signal so I now
have a LED instead. But in overall the board

Spanish: 
acelerador y el motor girará. Yo tambien queria
Detección BEMF, por lo que el motor siempre permanecerá
en sincronía y también tienen buen par. Incluso si
Intento detener el motor, permanecerá sincronizado
debido a la lectura BEMF. Lo hago usando un poco
divisores de voltaje con estas resistencias y
utilizando el comparador integrado ATMEGA
el chip ya tiene el pin digital 6. Para controlar
la rotación del motor, tengo estos puentes MOSFET
con 6 transistores Para controlar los transistores,
Estoy usando 3 controladores duales, el IR21 01. Esto
tablero tiene algunos pequeños errores pero ya he
corregido eso en el tablero final. Por ejemplo,
GND no estaba conectado al convertidor de dinero
chip, así que tuve que hacer eso con cables. Yo también
quería un timbre pero por error me conecté
este componente a una señal no PWM, así que ahora
tener un LED en su lugar. Pero en general el tablero

Spanish: 
resultan geniales, son solo 60 por 35 mm y
Estoy seguro de que podría hacerlo aún más pequeño. los
el próximo tablero también tendrá las principales pistas de potencia
expuesto para poder llenarlos con soldadura
Para más actual. Estas son las principales características.
de mi tablero Veamos ahora cómo funciona.
Una vez más, mira mi otro video ESC
porque comparto todos los detalles sobre BEMF,
cruce por cero y todo lo que necesitas entender
sobre ESC sin sensor. Necesitamos este tipo
de ESC para controlar motores sin escobillas. Estas
los motores tienen una entrada de triple fase y 3 bobinas
adentro, bobina A, B y C. Tenemos 3 bobinas pero
podríamos tener diferentes cantidades de polos,
en esta animación he usado un motor con
6 polos y 4 imanes permanentes. En orden
para rotar tenemos que cambiar las entradas de
Estas bobinas en una secuencia determinada. Generalmente
energizamos 2 bobinas al mismo tiempo para que uno
empujará los imanes y el otro lo hará

English: 
turn out great, it is only 60 by 35 mm and
I’m sure I could make it even smaller. The
next board will also have the main power tracks
exposed so I could fill those with solder
for more current. So, these are the main characteristics
of my board. Let’s now see how it works.
Once again, please watch my other ESC video
because I share all the details about BEMF,
zero crossing and all you need to understand
about sensor-less ESCs. We need this kind
of ESCs to control brushless motors. These
motors have a triple phase input and 3 coils
inside, coil A, B and C. We have 3 coils but
we could have different amounts of poles,
in this animation I’ve used a motor with
6 poles and 4 permanent magnets. In order
to rotate we have to switch the inputs of
these coils in a certain sequence. Usually
we energise 2 coils at the same times so one
will push the magnets and the other one will

English: 
drag the magnets. In order to make a full
cycle, we need 6 steps intervals for our sequence.
We energise coils A and B and we leave C floating
and the magnets will make one step. Then we
energise coils A and C and it will make one
more step. Then coils B and C till we make
all 6 steps as in this table. The important
thing is to know when to switch from one step
to the other. We could use hall effect sensors
for that but in this case for a sensor-less
ESC I will use the BEMF or back electromotive
force detection. As I said before, on each
step we energise 2 coils and we let one coil
floating, that means is not connected to anything.
Rotating a magnet in front of a coil, according
to Faraday law, it will induce a current in
that coil, thus we get a voltage drop. We
could measure this voltage drop and we will
detect a peak when the magnet is just in the
middle of the coil since there is where the

Spanish: 
Arrastra los imanes. Para hacer un completo
ciclo, necesitamos intervalos de 6 pasos para nuestra secuencia.
Energizamos las bobinas A y B y dejamos C flotando
y los imanes darán un paso. Entonces nosotros
energice las bobinas A y C y producirá una
Más paso. Luego enrolla B y C hasta que hagamos
los 6 pasos como en esta tabla. Lo importante
Lo importante es saber cuándo cambiar de un paso
para el otro. Podríamos usar sensores de efecto hall
para eso pero en este caso para un sensor sin
ESC voy a utilizar el BEMF o electromotriz posterior
detección de fuerza. Como dije antes, en cada
paso energizamos 2 bobinas y dejamos una bobina
flotante, eso significa que no está conectado a nada.
Rotación de un imán frente a una bobina, según
a la ley de Faraday, inducirá una corriente en
esa bobina, así tenemos una caída de voltaje. Nosotros
podría medir esta caída de voltaje y lo haremos
detectar un pico cuando el imán está justo en el
centro de la bobina ya que es donde está el

English: 
magnetic flux is higher. If we sum all the
voltages from all 3 coils together, we get
the common ground, and we compare the floating
coil voltage drop with the entire sum, and
by that, we detect when to make the switch
to the next step of the sequence. This is
the representation of the BEFM voltage from
the coils. We have to make the switch to the
next step exactly when crossing this virtual
0, which is the sum of all 3 coils. That’s
why this method is called zero crossing switch.
We cross this zero-line when the BEMF is rising
or falling and in the code, we will have two
different detection parts for that. So, all
we have to do is to compare the voltage drop
on the floating coil with the sum of all 3
coils and when we detect the 0 cross, we change
to the next step of the sequence. To compare
signals, I’ve placed some voltage dividers
on my board and I’m using a comparator to
detect the 0 cross. We could use an external
comparator, but the best way is to use the

Spanish: 
El flujo magnético es mayor. Si sumamos todos los
voltajes de las 3 bobinas juntas, obtenemos
el terreno común, y comparamos el flotante
caída de voltaje de la bobina con la suma total, y
por eso, detectamos cuándo hacer el cambio
al siguiente paso de la secuencia. Esto es
la representación del voltaje BEFM de
Las bobinas. Tenemos que hacer el cambio a la
siguiente paso exactamente al cruzar este virtual
0, que es la suma de las 3 bobinas. Eso es
por qué este método se llama interruptor de cruce por cero.
Cruzamos esta línea cero cuando el BEMF está aumentando
o cayendo y en el código, tendremos dos
diferentes partes de detección para eso. Así que todo
lo que tenemos que hacer es comparar la caída de voltaje
en la bobina flotante con la suma de los 3
bobinas y cuando detectamos la cruz 0, cambiamos
al siguiente paso de la secuencia. Comparar
señales, he colocado algunos divisores de voltaje
en mi tablero y estoy usando un comparador para
detectar la cruz 0 Podríamos usar un externo
comparador, pero la mejor manera es usar el

English: 
comparator our microcontroller has on pin
D6. To energise the coils, I’m using the
MOSFETS controlled with a precise PWM signal.
See more about this on my other video. So,
this is my schematic. I have the voltage regulation
here, the MOSFET bridge and the drivers here,
the ATmega328 microcontroller, the FTDI programmer,
the voltage dividers for the BEMF detection
and some extra connections. I’ve made this
layout and remember that this version has
all the errors fixed and some improvements
as well. I’ve ordered the board from JLCPCB.
I’ve made the boards with red solder mask
and white silklayer. Let’s give them a look.
We’ve already seen all the components we
need. We have the MOSFETs here and the triple
phase output on these pads. On the left side
we have the buck converter circuit and on
the other side of the board we have the microcontroller,
the programmer and USB connector, the MOSFET

Spanish: 
comparador nuestro microcontrolador tiene en el pin
D6 Para energizar las bobinas, estoy usando el
MOSFETS controlados con una señal PWM precisa.
Vea más sobre esto en mi otro video. Entonces,
Este es mi esquema. Tengo la regulación de voltaje
aquí, el puente MOSFET y los controladores aquí,
el microcontrolador ATmega328, el programador FTDI,
los divisores de voltaje para la detección BEMF
y algunas conexiones extra. He hecho esto
diseño y recuerda que esta versión tiene
todos los errores corregidos y algunas mejoras
también. He ordenado el tablero de JLCPCB.
He hecho las tablas con una máscara de soldadura roja.
y capa de seda blanca. Echemos un vistazo.
Ya hemos visto todos los componentes que
necesitar. Tenemos los MOSFET aquí y el triple
salida de fase en estos pads. En el lado izquierdo
tenemos el circuito convertidor de dinero y en
al otro lado del tablero tenemos el microcontrolador,
el programador y el conector USB, el MOSFET

English: 
drivers and the voltage dividers for the BEMF
read. Let’s mount this board. First thing
you have to do is to solder the buck converter
circuit and make sure its output will be always
5V. So I solder the MP23 07 buck converter
IC, the coil and the resistors and also all
the output capacitors. We need a lot of capacitance
at the output since there will be a lot of
voltage peaks when the motor will draw a lot
of current. Remember that I had to connect
GND with this wire for now till I received
the fixed boards. Now I supply 12V at the
input and test the output to see if it is
around 5V. I also change the input and the
output is always 5V so we are good to go.
Next, I solder the ATmega chip, the 16MHz
crystal, the R1 resistors and the C2 and C6
capacitor. C6 must be of 100nF for the DTR

Spanish: 
controladores y divisores de voltaje para BEMF
leer. Montemos este tablero. Lo primero
lo que tienes que hacer es soldar el convertidor de dinero
circuito y asegúrese de que su salida sea siempre
5V. Así que soldar el convertidor de dinero MP23 07
IC, la bobina y las resistencias y también todos
Los condensadores de salida. Necesitamos mucha capacitancia
en la salida ya que habrá muchos
picos de voltaje cuando el motor dibujará mucho
de corriente. Recuerda que tuve que conectar
GND con este cable por ahora hasta que recibí
Los tableros fijos. Ahora proporciono 12V en el
ingrese y pruebe la salida para ver si es
alrededor de 5V. También cambio la entrada y el
la salida siempre es de 5V, así que estamos listos para comenzar.
A continuación, sueldo el chip ATmega, los 16MHz
cristal, las resistencias R1 y las C2 y C6
condensador. C6 debe ser de 100nF para el DTR

English: 
pin. Now I connect this external FTDI programmer
to the UART pads here to the RX, TX and DTR
pins and also GND and 5V. I upload a test
that uses the serial communication and test
if the chip works. If yes, it means we have
soldered the chip with no problems. Now I
solder the FTDI programmer and the R18 and
R19 resistors. I also solder the USB connector
and after I do this, I upload the same code
again but this time, using the USB connector.
If you are able to upload the code, you could
keep soldering components. I solder all the
small resistors, capacitors and LEDs following
the values in the schematic. Then I solder
all the MOSFET drivers and diodes. On the
other side I solder the MOSFETS and the board
is ready. All I have to do is to upload the
code and also solder 3 wires to the GND, 5V

Spanish: 
alfiler. Ahora conecto este programador externo de FTDI
a los pads UART aquí a RX, TX y DTR
pines y también GND y 5V. Subo una prueba
que usa la comunicación serial y prueba
Si el chip funciona. Si es así, significa que tenemos
Soldado el chip sin problemas. Ahora yo
soldar el programador FTDI y el R18 y
Resistencias R19. También sueldo el conector USB
y después de hacer esto, subo el mismo código
nuevamente pero esta vez, usando el conector USB.
Si puede cargar el código, podría
Mantener componentes de soldadura. Sueldo todos los
Pequeñas resistencias, condensadores y LED siguiendo
Los valores en el esquema. Entonces soldaré
Todos los controladores y diodos MOSFET. Sobre el
Por otro lado, sueldo los MOSFETS y la placa
está listo. Todo lo que tengo que hacer es subir el
codifique y también suelde 3 cables al GND, 5V

Spanish: 
y pads de señal PWM aquí. Luego subo el
codificar y conectar un motor sin escobillas en el
salida. Ahora conecto mi receptor de radio PWM
a los cables de entrada PWM. Enciendo mi radiocontrolador
y luego enciendo la placa ESC con 12V de
Mi fuente de alimentación. El ESC se enciende y el
El LED parpadeará. Ahora aumento el acelerador y
Los motores comienzan a girar.
Puedo alcanzar velocidades muy altas en comparación con mis otras versiones.
El código ahora es mucho mejor.
La detección BEMF también es mejor
entonces puedo intentar parar el motor
pero adaptará su velocidad y siempre estará sincronizado.
La velocidad de respuesta también es muy
bueno.
Y recuerda que puedes cambiar el

English: 
and PWM signal pads here. Then I upload the
code and connect a brushless motor at the
output. I now connect my PWM radio receiver
to the PWM input wires. I start my radio controller
and then I power the ESC board with 12V from
my power supply. The ESC turns on and the
LED will blink. Now I increase throttle and
the motors starts spinning.
I can reach very high speeds compared with my other versions.
The code is now a lot better.
The BEMF detection is also better
so I can try to stop the motor
but it will adapt its speed and always stay synchronised.
The response speed is also very
good.
And remember that you could change the

English: 
PWM input range only with your radio receiver and the range will be stored to the EEPROM of the microcontroller.
Now I have connected
the PWM signals of the DRIVERS to the oscilloscope
just to see the results. As you can see the
faster the motors spins, smaller is the time
between the PWM signals. And if I try to slow
the motor down, the signals will automatically
synchronise. I now have the motor coils connected
to my oscilloscope in order to see the signals
of BEMF. There is a lot of noise but we are
close to the BEMF representation we have seen
before in the animation and if I stop the
oscilloscope, we can see the signals a lot
better. Now the code is quite long and a bit
difficult. But I’ve place a lot of comments
for each part in order for you to understand
it better. In the setup void we first make
the configuration, we save the data to the
EEPROM, we set the PWM registers configuration

Spanish: 
El rango de entrada PWM solo con su receptor de radio y el rango se almacenará en la EEPROM del microcontrolador.
Ahora me he conectado
las señales PWM de los DRIVERS al osciloscopio
solo para ver los resultados. Como puedes ver el
más rápido gira el motor, más pequeño es el tiempo
entre las señales PWM. Y si trato de frenar
con el motor apagado, las señales automáticamente
sincronizar. Ahora tengo las bobinas del motor conectadas
a mi osciloscopio para ver las señales
de BEMF. Hay mucho ruido pero estamos
cerca de la representación BEMF que hemos visto
antes en la animación y si detengo el
osciloscopio, podemos ver muchas señales
mejor. Ahora el código es bastante largo y un poco
difícil. Pero he puesto muchos comentarios
para cada parte para que puedas entender
es mejor. En el vacío de configuración, primero hacemos
la configuración, guardamos los datos en el
EEPROM, establecemos la configuración de registros PWM

Spanish: 
y configuramos los pines para salida o entrada, detectamos
el rango de entrada PWM y almacenar los nuevos valores.
Ahora vamos al final del código.
Este es el vector de interrupción que lee
la señal de entrada PWM en el pin digital D8 y
da el valor en nosotros En el vacío, nosotros
detectar el rango de la entrada PWM y comenzar
o detener la rotación del motor de acuerdo con eso.
Si el motor está girando, primero tenemos un
bucle corto para acelerar el motor sin
BEMF Luego usamos las funciones BEMF para mantener
la velocidad. Recuerde que tenemos 6 pasos para nuestro
secuencia. Aquí cambiamos la detección BEMF
para subir o bajar en cada bobina. Esta voluntad
cambiar la entrada del comparador en el pin
D6, y con eso podemos comparar todas las bobinas
y cambia el paso de nuestra secuencia. Finalmente,
tenemos 6 funciones más que configurarán el
pines a ALTO o BAJO, a PWM o no PWM dependiendo
en qué paso de la secuencia estamos. Un alto

English: 
and set the pins to output or input, we detect
the PWM input range and store the new values.
Now let’s go at the bottom of the code.
This is the interruption vector that reads
the PWM input signal on digital pin D8 and
gives the value in us. In the void loop we
detect the range of the PWM input and start
or stop the motor rotation according to that.
If the motor is spinning, we first have a
short loop to accelerate the motor without
BEMF. Then we use the BEMF functions to maintain
the speed. Remember we have 6 steps for our
sequence. Here we change the BEMF detection
for rising or falling on each coil. This will
change the input of the comparator on pin
D6, and by that we can compare all the coils
and change the step of our sequence. Finally,
we have 6 more functions that will set the
pins to HIGH or LOW, to PWM or not PWM depending
on which step of the sequence we are. A high

English: 
B low, A high, C low, B high, C low and so
on. Download the code and read all the comments.
Upload it to your board and give it a test.
In my opinion, the results are quite good
and close enough to a commercial ESC. This
was a long project, I had a lot of errors
but I’ve learned a lot making this board
and I hope you do the same. Using the same
schematic but with bigger MOSFETS, bigger
tracks and more capacitors, you could create
the same ESC but for bigger motors and customize
your speed and BEMF detection. Feel free to
download the board, part list, schematic and
code from below and make the same ESC yourself.
Consider supporting my work on PATREON so
I could make more future boards. I hope that
you’ve liked this project. If so don’t
forget to click the like button like crazy
and share the video with your friends. If
you have any question about this video or
any other, just leave it in the comment section
below or on my Q&A page. Also, don’t forget

Spanish: 
B bajo, A alto, C bajo, B alto, C bajo y así
en. Descargue el código y lea todos los comentarios.
Súbelo a tu tablero y pruébalo.
En mi opinión, los resultados son bastante buenos.
y lo suficientemente cerca de un ESC comercial. Esta
fue un proyecto largo, tuve muchos errores
pero he aprendido mucho haciendo este tablero
y espero que hagas lo mismo. Usando lo mismo
esquemático pero con MOSFETS más grandes, más grandes
pistas y más condensadores, podrías crear
el mismo ESC pero para motores más grandes y personalizar
su velocidad y detección BEMF. No dude en
descargue el tablero, la lista de piezas, el esquema y
codifique desde abajo y haga el mismo ESC usted mismo.
Considere apoyar mi trabajo en PATREON así que
Podría hacer más tablas futuras. espero que
Te ha gustado este proyecto. Si es así, no lo hagas
olvide hacer clic en el botón Me gusta como loco
y comparte el video con tus amigos. Si
tienes alguna pregunta sobre este video o
cualquier otro, solo déjalo en la sección de comentarios
a continuación o en mi página de preguntas y respuestas. Además, no olvides

English: 
to subscribe and watch all of my other great
tutorials. Remember, if you consider helping
my projects check my Patreon page as well.
Thanks again and see you later guys.

Spanish: 
para suscribirse y ver todos mis otros grandes
tutoriales Recuerde, si considera ayudar
mis proyectos también revisan mi página de Patreon.
Gracias de nuevo y hasta luego chicos.
