Подключение esc ардуино

ESC Programming on Arduino (Hobbyking ESC)

Introduction: ESC Programming on Arduino (Hobbyking ESC)

I’m going to show you how to program and use a Hobbyking ESC. I just found a few information and tutorials which really didn’t help me very much. So I decided to program an own sketch, which is very easy to understand.

* ESC stands for Electronic Speed control

* The ESC has a 5 V (not used), GND and Signal pin like a servo

* You control it like a servo with write() http://arduino.cc/de/Reference/ServoWrite or writeMicroseconds http://arduino.cc/de/Reference/ServoWriteMicroseconds

Step 1: Receiving ESC Information

You should pay attention to the ampere value of your ESC. In this tutorial a 20 A ESC is used:

I can’t really promise that this is working with any other ESC but i think so, because in the english manual 20 and 30 A ESC’s are described. In the German version you find a generalization from 10 to 120 A, that’s why I think this could work for every other ESC.

Step 2: Arduino Connection

I tried it with an arduino uno R3. I guess it should also be possible with other arduino models like Duemilanove or Mega.

First you have to connect the ESC to your battery. Next, connect the ESC like so:

* White/Yellow to PIN 9

The ESC is now on, which is why it is important that you DON’T connect the red wire to your 5V Port, because it could destroy your computer’s USB Port.

On this picture you can see the correct connection between ESC and Arduino (Mega).

Picture source: http://1.bp.blogspot.com/-eqDaRgO5FjU/T9U3avwT2-I/AAAAAAAAALE/-8pj4qD12Q0/s1600/Figure2_2_edit.jpg

Step 3: The Sketch

Just copy and paste this Code to your IDE:

Coded by Marjan Olesch

Sketch from Insctructables.com

int value = 0; // initialize the variables you need

Servo firstESC, secondESC; // you can control 2 or more servos simultaneously

firstESC.attach(9); // attached to pin 9

Serial.begin(9600); // start serial at 9600 baud

//First connect your ESC WITHOUT arming. Then open the serial and follow the instructions.

value = Serial.parseInt(); // parse an integer from serial

Step 4: Understanding and Programming an ESC

ESCs are programmable. You just don’t need a language to program them, but simple interactions via the serial. The ESC communicates with sound codes.

To open the menu (which runs infinitely) you just have to do following Steps:

* Connect your ESC

* Adapt the code for all ESCs you need to configure

* You should hear nothing at the beginning, because the Arduino sends a zero

* Open your serial monitor and send ‘2000’. it’s the highest Signal the ESC can receive

* You will hear the sounds described on the picture ( Source: Manual: http://www.hobbyking.com/hobbyking/store/uploads/811103388X7478X20.pdf)

The Hobbyking ESCs can receive a signal between 700 and 2000 us. 700 means ‘throttle at lowest position’ and 2000 ‘throttle on the highest position’.

— Wait for ‘D-D-D-D’ to chose lipo as battery type

— As soon as the third ‘D’ appears write a 700 in your serial (delay compensation)

— The ESC will make a sound to confirm that the option is picked

I hope i could help you with this tutorial.

1 Person Made This Project!

Did you make this project? Share it with us!


Microcontroller Contest

Metal Contest

Crayons Challenge


Question 3 years ago

Thanks for the great page! Do you know if this works with TURNIGY MULTISTAR 40A BLHELI-S REV 16 ESC 2

Question 3 years ago on Step 4

Thank you for this tutorial, it is extremely helpful!

I was trying to create a similar circuit myself whereby I attach a 40A ESC UBEC 4A, to a 300W brushless motor, being powered by a 6s Lipo battery, controller by my Arduino Mega.

I cannot seem to find the specifications defining the signal range for my esc. When I try callibrating it with a throttle I am able to go through the initialization of sequential beeps (AAAA BBBB etc), however when I try it through sending values via the serial monitor, I only get one or two beeps for each value I send, and it does not seem to initialize. Any ideas how I can fix this issue?

Here is my two cents. Should work for any ESC. You may need to play
with delay times. Choose your own speed as you wish, between HI and LO.

void setup()
esc.write(179); // HI
esc.write(1); // LO
esc.write(90); // MID

Reply 3 years ago

I am very interested in running 1 motor through an ESC via an Arduino Uno. And I just need to run it through the usb port. I don’t know what to do about the code though. Even if I write it out in the editor, what should I expect -how do I just turn it on/off

Question 3 years ago on Step 2

I’m hoping I can get this answer as simple as possible — I’m sure what Im asking has been done a million times over so I’d just love to be able to copy and paste the code — HOWEVER I really don’t know what to do next anyways.
Attached images; The set up as a whole:

  • 6s LiPo battery — 6,000mAh
  • 80A ESC — «Mystery» brand
  • Drone motor — U7 T-Motor brand, 420KV, 3-8s LiPo battery

FIRST: I have it set up in ‘a’ way that will allow this to function/interact correctly. I do not need an accelerometer and I am wanting to turn it on/off-start/stop and adjust speeds (for all intense and purposes) through my desktop via the USB port. So I want to be able to do all of this through the Arduino create agent editor thing on my desktop.

NEXT: So even if/when someone is so nice enough to show me the code in such a way I can just copy and paste into the editor — I really don’t know what to do next. How do I get it to go? I’ll have to adjust numbers in certain sections of the code in editor. I’ll need some help with this, e.g. this number means this — that means that and adjusts the speed accordingly, etc.

But basically; How do I turn this set up on and off in the editor controlled from my desktop.
Thanks AND please let me know what I can clarify


How to Run a Brushless Motor ESC With Arduino

Introduction: How to Run a Brushless Motor ESC With Arduino

This instructable will show you how to configure and run a brushless motor ESC with an arduino and run a brushless motor at different speeds. It will go through the materials, setup of hardware, and the software coding. It will explain what each step in the coding does. Don’t get hurt and have fun!

Here is a video of the motors working.

Step 1: Obtain Your Materials

You will need to get:

Arduino (Any will do, I used an Arduino Mega)

Computer with Arduino Coding program on it.

ESC (Any will do, I used a generic brand at 30 AMPs)

A 10 AMP brushless motor,

Soldering iron w/ Solder

Battery (Any battery that is 12 volts, is 2 or more cells, I used a 3 cell 11.1 volt battery)

Step 2: Wiring and Hardware Setup

Plug in the soldering iron to warm it up then line up the ESC with the motors wires (The ESC’s wires should have three of the same exact wires on one side, the other side is for the battery and Arduino)

Once the soldering iron is heated, put the motor control wires going out of the ESC together with the wires going out of the motor. The middle wires have to go together, but the 2 side wires can be switched to reverse the direction of the motor. Finally, you need to use the soldering iron to warm-up the wires, this should take about 5-10 seconds, then melt the solder on the wires to bond them together.

Take the input wire from the esc (The one that looks like a servo wire) and attach the ground to ground and the signal (white) to pin 9. The positive wire should be connected to vin ONLY if the arduino is not connected to the computer. If it is connected to the computer, do not attach the positive wire to anything or it will burn out your your computer

The thick red and black wires coming out the bottom should be connected to the battery.

Step 3: Software/Coding

— You will need to plug your arduino board into the computer with the USB connector first. Then, you can download the below program. After the program is downloaded, press the reset button on the arduino before plugging the battery into the ESC. The motor will make a start up noise, then it will wait. After a few seconds, the motor will beep 3 times and then gradually move to the speed programed. It will then gradually move back down to zero speed. You can edit the program for how fast the motors go and how long they stay on. Do not set the motors to a speed above 85% power or the ESC will burn out.

//This code can be used for any purpose.

#include Servo ESC1;

int pos = 0; //Sets position variable

setSpeed(0); //Sets speed variable delay(1000);

void setSpeed(int speed)<

int angle = map(speed, 0, 100, 0, 180); //Sets servo positions to different speeds ESC1.write(angle);

ESC1.attach(9); //Adds ESC to certain pin. arm();

int speed; //Implements speed variable

setSpeed(0); //Sets speed variable to zero no matter what

delay(1000); //Turns off for 1 second

Participated in the
Move It

2 People Made This Project!

Did you make this project? Share it with us!


Подключение бесколлекторного электродвигателя постоянного тока (BLDC) к Arduino

В настоящее время наблюдается небывалый интерес к конструированию различных летающих механизмов – дронов, планеров, глайдеров, вертолетов и т.д. Сейчас их можно легко сконструировать самостоятельно благодаря большому количеству материалов по ним в сети интернет. Все эти летающие механизмы используют для своего движения так называемые бесщёточные (бесколлекторные) электродвигатели постоянного тока (BLDC — Brushless DC Motor). Что представляют собой подобные двигатели? Почему именно они сейчас используются в различных летающих дронах? Как правильно купить подобный двигатель и подключить его к микроконтроллеру? Что такое ESC и почему мы будем его использовать? Ответы на все эти вопросы вы найдете в данной статье.

В этой статье мы рассмотрим управление скоростью вращения бессенсорного бесколлекторного электродвигателя постоянного тока A2212/13T (Sensorless BLDC outrunner motor), часто используемого для конструирования дронов, с помощью ESC (Electronic Speed Controller – электронный контроллер скорости) и платы Arduino.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. A2212/13T BLDC Motor (бесколлекторный электродвигатель постоянного тока).
  3. ESC (20A) (электронный контроллер скорости) (купить на AliExpress).
  4. Источник питания (12V 20A).
  5. Потенциометр 10 кОм (купить на AliExpress).

Принцип действия BLDC двигателей

Бесколлекторные электродвигатели постоянного тока (BLDC двигатели) в настоящее время часто используются в потолочных вентиляторах и электрических движущихся транспортных средствах благодаря их плавному вращению. В отличие от других электродвигателей постоянного тока BLDC двигатели подключаются с помощью трех проводов, выходящих из них, при этом каждый провод образует свою собственную фазу, то есть получаем трехфазный мотор.

Хотя BLDC относятся к двигателям постоянного тока они управляются с помощью последовательности импульсов. Для преобразования напряжения постоянного тока в последовательность импульсов и распределения их по трем проводникам используется контроллер ESC (Electronic speed controller). В любой момент времени питание подается только на две фазы, то есть электрический ток заходит в двигатель через одну фазу, и покидает его через другую. Во время этого процесса запитывается катушка внутри двигателя, что приводит к тому, что магниты выравниваются по отношению к запитанной катушке. Затем контроллер ESC подает питание на другие два провода (фазы) и этот процесс смены проводов, на которые подается питание, продолжается непрерывно, что заставляет двигатель вращаться. Скорость вращения двигателя зависит от того как быстро подается энергия на катушку двигателя, а направление вращения – от порядка смены фаз, на которые поочередно подается питание.

Существуют различные типы BLDC двигателей – давайте рассмотрим основные из них. Различают Inrunner и OutRunner BLDC двигатели. В Inrunner двигателях магниты ротора находятся внутри статора с обмотками, а в OutRunner двигателях магниты расположены снаружи и вращаются вокруг неподвижного статора с обмотками. То есть в Inrunner (по этому принципу конструируется большинство двигателей постоянного тока) ось внутри двигателя вращается, а оболочка остается неподвижной. А в OutRunner сам двигатель вращается вокруг оси с катушкой, которая остается неподвижной. OutRunner двигатели особенно удобны для применения в электрических велосипедах, поскольку внешняя оболочка двигателя непосредственно приводит в движение колесо велосипеда, что позволяет обойтись без механизма сцепления. К тому же OutRunner двигатели обеспечивают больший крутящий момент, что делает их также идеальным выбором для применения в электрических движущихся средствах и дронах. Поэтому и в этой статье мы будем рассматривать подключение к платы Arduino двигателя OutRunner типа.

Примечание : существует еще такой тип BLDC двигателей как бесстержневой (coreless), который находит применение в «карманных» дронах. Эти двигатели работают по несколько иным принципам, но рассмотрение принципов их работы выходит за рамки данной статьи.

BLDC двигатели с датчиками (Sensor) и без датчиков (Sensorless). Для BLDC двигателей, которые вращаются плавно, без рывков, необходима обратная связь. Поэтому контроллер ESC должен знать позиции и полюса магнитов ротора чтобы правильно запитывать статор. Эту информацию можно получить двумя способами: первый из них заключается в размещении датчика Холла внутри двигателя. Датчик Холла будет обнаруживать магнит и передавать информацию об этом в контроллер ESC. Этот тип двигателей называется Sensor BLDC (с датчиком) и он находит применение в электрических движущихся транспортных средствах. Второй метод обнаружения позиции магнитов заключается в использовании обратной ЭДС (электродвижущей силы), генерируемой катушками в то время когда магниты пересекают их. Достоинством этого метода является то, что он не требует использования каких либо дополнительных устройств (датчик Холла) – фазовый провод самостоятельно используется в качестве обратной связи благодаря наличию обратной ЭДС. Этот метод используется в двигателе, рассматриваемом в нашей статье, и именно он чаще всего применяется в дронах и других летающих устройствах.

Почему дроны и вертолеты используют именно BLDC двигатели?

Сейчас существует множество различных типов дронов – с двумя лопастями, с четырьмя лопастями и т.д. Но все они используют именно BLDC двигатели. Почему именно их, ведь BLDC двигатели стоят дороже чем обычные электродвигатели постоянного тока?

Существует несколько причин для этого:

  • большой крутящий момент, который очень важен для того чтобы оторвать летающее средство от земли;
  • эти двигатели доступны в формате OutRunner, что позволяет обойтись без сцепления в конструкции дрона;
  • маленький уровень вибраций во время работы, что очень важно для неподвижного зависания дрона в воздухе;
  • хорошее соотношение мощности к весу двигателя. Это очень важно для использования на летающих механизмах чтобы все элементы его конструкции имели как можно меньший вес. Обычный двигатель постоянного тока, обеспечивающий такой же крутящий момент как и BLDC двигатель, будет как минимум в два раза тяжелее него.

Зачем нужен контроллер ESC

Как мы уже знаем, для функционирования BLDC двигателей необходим какой-нибудь контроллер, который преобразует напряжение постоянного тока от батарейки в последовательность импульсов, подаваемую в определенном порядке на провода (фазы) двигателя. Этот контроллер называется ESC (Electronic Speed Controller – электронный контроллер скорости). Основной обязанностью данного контроллера является правильная подача питания на провода BLDC двигателя чтобы двигатель вращался в нужном направлении. Это осуществляется с помощью считывания обратной ЭДС (back EMF) с каждого провода и подачи питания на катушку в то время когда магнит пересекает ее. Внутри себя контроллер ESC содержит достаточно много разнообразной электроники и при желании вы можете подробно изучить его устройство по соответствующим материалам в сети интернет. Здесь же мы кратко рассмотрим рассмотрим только основные компоненты его конструкции.

Управление скоростью вращения на основе ШИМ (широтно-импульсной модуляции, в англ. PWM) . Контроллер ESC может управлять скоростью вращения BLDC двигателя при помощи считывания сигнала ШИМ подаваемого на его оранжевый провод. Принцип управления им очень похож на управление сервомоторами. Сигнал ШИМ, подаваемый на контроллер ESC, должен иметь период 20ms, а коэффициент заполнения этого ШИМ сигнала будет определять скорость вращения BLDC двигателя. Поскольку точно такой же принцип используется для управления углом поворотом сервомотора, то для управления BLDC двигателем мы можем использовать библиотеку для управления сервомоторами. Если вы не сталкивались с этим принципом ранее, то вы можете прочитать статью о подключении сервомотора к плате Arduino.

Battery Eliminator Circuit (BEC) – цепь, исключающая батарею . Почти все контроллеры ESC поставляются с этой схемой. Как следует из ее названия, данная схема устраняет потребность в использовании отдельной батареи для питания микроконтроллера, то есть в данном случае нам не понадобится отдельный источник питания для платы Arduino – контроллер ESC сам обеспечит плату Arduino регулируемым напряжением питания +5V. В различных контроллерах ESC используются различные схемы регулировки данного напряжения, но в большинстве случаев распространена схема с линейной регулировкой.

Встроенное ПО . Каждый контроллер ESC содержит в своем ПЗУ встроенную прикладную программу, написанную производителем контроллера. Эта программа во многом определяет логику функционирования контроллера. Наиболее популярными встроенными программами для контролеров ESC являются Traditional, Simon-K и BL-Heli. Эта программа может изменяться пользователем, однако мы в этой статье не будем рассматривать данный вопрос.

Некоторые термины, используемые в тематике BLDC и ESC

При изучении принципов работы BLDC двигателей и контроллеров ESC вы можете столкнуться с некоторыми терминами, используемыми в данной тематике. Кратко рассмотрим основные из этих терминов.

Braking (торможение) – определяет насколько быстро BLDC двигатель может остановить свое вращение. Это особенно актуально для летающих средств (дронов, геликоптеров и т.д.) поскольку они вынуждены часто изменять количество оборотов двигателя в минуту чтобы маневрировать в воздухе.

Soft Start (плавный пуск, старт) – эта способность особенно важна для BLDC двигателей когда вращающий момент от него на исполнительный механизм (колесо, винт и т.д.) передается через механизм передач, обычно состоящий из шестерен. Плавный пуск означает, что двигатель не начнет сразу вращаться с максимальной скоростью, а будет увеличивать свою скорость вращения постепенно независимо от того, с какой скоростью нарастает управляющее воздействие. Плавный пуск значительно снижает износ шестерен, входящих в передаточный механизм.

Motor Direction (направление вращения двигателя) – обычно направление вращения BLDC двигателей не изменяется в процессе эксплуатации, однако во время сборки и тестирования работы изделия может потребоваться изменение направления вращения двигателя, обычно это можно сделать просто поменяв местами любые два провода двигателя.

Low Voltage Stop (остановка при низком напряжении питания) . Обычно BLDC двигатели калибруют так, чтобы при одинаковом уровне управляющего воздействия скорость его вращения была постоянной. Однако этого трудно достигнуть потому что со временем напряжение питающей батареи уменьшается. Чтобы предотвратить это обычно контроллеры ESC программируют таким образом чтобы они останавливали работу BLDC двигателя когда напряжение питающей батареи опускается ниже определенной границы. Особенно эта функция полезна при использовании BLDC двигателей в дронах.

Response time (время отклика, время реакции, время ответа) . Означает способность двигателя быстро изменять скорость вращения при изменении управляющего воздействия. Чем меньше время реакции, тем лучше контроль над двигателем.

Advance (движение вперед) . Эта проблема является своеобразной «ахиллесовой пятой» для BLDC двигателей. Все BLDC двигатели имеют хотя бы небольшой подобный баг. Эта проблема вызвана тем, что когда катушка статора запитана ротор движется вперед поскольку на нем есть постоянный магнит. И когда управляющее напряжение с этой катушки снимают (чтобы подать его на следующую катушку) ротор продвигается вперед немного дальше чем предусмотрено логикой функционирования двигателя. Это нежелательное продвижение двигателя вперед в англоязычной литературе называют “Advance” и оно может приводить к нежелательным вибрациям, нагреву и шуму при работе двигателя. Поэтому хорошие контроллеры ESC стараются по возможности устранить этот эффект в работе BLDC двигателей.

Работа схемы

Схема подключения BLDC двигателя и контроллера ESC к плате Arduino представлена на следующем рисунке.

Как видите, схема достаточно проста. Контроллеру ESC необходим источник питания с напряжением 12V и током как минимум 5A. Для питания схемы можно использовать адаптер или Li-Po батарейку. Три фазы (провода) BLDC двигателя необходимо подсоединить к трем выходным проводам контроллера ESC – неважно в каком порядке.

Предупреждение : у некоторых контроллеров ESC нет выходных проводов, в этом случае вам необходимо будет припаивать провода от BLDC двигателя к контактам контроллера ESC. Обязательно изолируйте эти оголенные места (пайки) с помощью изоляционной ленты потому что через эти провода возможно протекание достаточно больших токов и любое короткое замыкание может привести к повреждению двигателя и контроллера ESC.

Схема BEC (Battery Eliminator circuit) в контроллере ESC будет самостоятельно обеспечивать (регулировать) постоянное напряжение +5V, поэтому его можно непосредственно использовать для питания платы Arduino. Для управления скоростью вращения двигателя в схеме используется потенциометр, подключенный к контакту A0 платы Arduino.

Внешний вид собранной конструкции показан на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим только его основные фрагменты.

Для управления BLDC двигателем мы будем формировать ШИМ сигнал с частотой 50 Гц и изменяемым от 0 до 100% коэффициентом заполнения. Значение коэффициента заполнения будет управляться с помощью потенциометра. То есть, вращая потенциометр, мы будем управлять скоростью вращения двигателя. Как уже указывалось, управление BLDC двигателем очень похоже на управление сервомотором с помощью ШИМ 50 Гц, поэтому в данном случае мы будем использовать ту же самую библиотеку, которую использовали для управления сервомотором. Если вы начинающий в изучении платформы Arduino, то перед дальнейшим прочтением данной статьи рекомендуем вам изучить принципы формирования ШИМ сигнала в Arduino и подключение сервомотора к плате Arduino.

ШИМ сигнал можно генерировать только на тех цифровых контактах платы Arduino, которые обозначены символом

. В нашей схеме мы будем управлять контроллером ESC с контакта 9 платы Arduino, поэтому следующей командой мы прикрепим контроллер ESC к этому контакту: