Introduction: Control Brushless Motor Using Arduino
Ever thought of controlling a ESC a.k.a Electronic Speed Controller of a Brushless Motor without a Transmitter and Receiver or have a Project in which you want to control a Speed of Brushless Motor using a simple Circuit or Arduino ,then there is a way we can do it with Arduino Microcontroller.This involves the use of PWM signal from arduino to control the speed of brushless motor with a ESC.This will save you the money to buy a servo tester or a RC Transmitter and receiver.So Lets Get started!!
Things you need:
- Arduino(I will be using a UNO)
- Lipo Battery(Which is able to supply Sufficient Current)
- ESC(Make sure that the motor draws less current than mentioned on the ESC)
- Brushless Motor(In my case a A2212)
Step 1: Wiring Up the Circuit
First connect the three terminals of Brushless motor to the the three terminals of the ESC.Screw the Motor to a heavy wooden plank anything similar so that it remains stable at high RPM.Download and Flash the code available at the bottom of the page to the arduino using a usb cable(Code is explained in the further part of this page). Connect the signal wire of ESC mostly white or yellow colour to any PWM pin Arduino,I connected it to the D8 pin and specified it a Pin 8 in the Arduino Sketch.You can use more than one pins for controlling many motors.
Connect the Potentiometer to the vcc or 5v pin of the Arduino and the Ground.
Connect the third terminal that is the variable pin to the Analog pin A0 You can power the Arduino using the BEC(Battery Eliminator Circuit)Present in your ESC.To use the BEC just connect the red thick wire to the Vin Pin of Arduino .It can provide 5V.Not all ESC's have a BEC,in this case you can use a external 5v power supply.After Powering the Arduino now connect the Lipo battery to your ESC.
You are Done!!Now slowly turn the Potentiometer Knob to start and increase the speed of the Motor.
Step 2: Arduino Code
In this code we are simply mapping or refering the maximum(1023) and minimum(0) Analog values at pin A0 to the required maximum(2000) and minimum(1000) values to operate and control the speed of the ESC.You may require to change the max an min values of the ESC i.e 1000 and 2000 to different values in other words you may need to caliberate it,Because Diffrent ESC's may have diffrent start point and end point.
For more tutorials visit-RZtronics.com
#include //Using servo library to control ESC
Servo esc; //Creating a servo class with name as esc
esc.attach(9); //Specify the esc signal pin,Here as D8
esc.writeMicroseconds(1000); //initialize the signal to 1000
int val; //Creating a variable val
val= analogRead(A0); //Read input from analog pin a0 and store in val
val= map(val, 0, 1023,1000,2000); //mapping val to minimum and maximum(Change if needed) esc.writeMicroseconds(val); //using val as the signal to esc
We have a be nice policy.
Please be positive and constructive.
Hi, thank you for posting.
I have a doubt that,
Would I be able to use a line scan cam output to control the speed of bldc motor without a potentiometer ?
Thanks,expecting an early reply...
How loud is this setup? I want to do something similar but it has to be almost silent