3D light display via BLDC motor & ESC's - Need Help Understanding Motor Control


I'm trying to mimic the thing shown in this video.


I've figured out that I can make this work by getting 3 BLDC motors along with 3 ESC's. I can't figure out what RPM to get because I'm confused how the kV system works on the motors, ESC & Arduino.

My confusion stems from the fact that I have two sources to the motor, the battery & the signal from Arduino.

Lets say I have a motor rated at 1000 kV, the motor should spin at 1000 RPM for every volt that goes to it. If I have a 6 volt battery, that should mean the motor will spin at 6000 RPM (right/wrong?). The arduino has the capability of sending a signal anywhere between 0-5V to add to this. So does 1V put me at 7000 RPM (6000 from the battery, 1000 from Arduino)? Please help me understand this :disappointed_relieved:

The next hurdle I have is determining what size motor (Watts) are needed, I would think any size would work as long as it meets my RPM needs. I only say this because the pieces look to be fairly light. Can someone please confirm this?

Thank you


You will need to select a controller chip for you motor, one that will interface to the Arduino. An ESC is generally controlled with a pot - no microcontroller needed. Both your Arduino and controller chip will use power from the battery. You don't get any voltage from the Arduino to the motor. All the motor power comes either through the controller or through transistors switched by the controller. There will be a voltage drop through the controller/transistors so you will have less than 6V to the motor The 1000kV rating is for an unloaded motor. Any load will reduce the RPM. I don't think you will have to worry about watts. A 6v bldc is pretty tiny. If you control spin-up well enough, you should not draw too much current.

Here are 3 ways to mimic this project, hard to easy.: 1) WIth bldc motors if that is your goal 2) 12vdc motors driven by PWM from an Arduino. 3) 12vdc motors controlled by rheostats.

boolrules: An ESC is generally controlled with a pot - no microcontroller needed.

To my knowing ESC are controlled as if they where RC servos. You can use the servo library for that.

The kv specifies the theoretical relation between voltage and speed for a loss-less free running unloaded motor or generator. At this point the voltage induced in the windings equals the applied voltage . That is a 2000kv motor fed from a 12V source will have a nominal speed of 24000rpm. Or the other way round if used as a generator and spun to 24000rpm it will produce 12V. Because of losses in motor mode the speed will be less and in generator mode voltage will be less

Thanks for the input so far. I want to go the route of BLDC as I want to have fairly precise control over the motor speed.

From looking at this video Controlling Gens Ace ESC with Arduino Demo - YouTube, I think I need a setup as per the drawing below.

My goal is to have the motor actually spinning at 1500 RPM. I’ve found a 360kV motor I think will work nicely. If I get a 7.4V Li-Po battery to go with it, it should Theoretically produce 2664 RPM. I think I can then use the Arduino signal to slow down the motor to 1500 RPM instead of 2664 RPM.

I don’t quite understand how the Arduino signal is to regulate how much voltage the motor will see, could someone please explain that for me using the chart above?

For programming, I’ve found the following code ready to use:

"#include <Servo.h>

Servo m1;

setup() {
m1.write(40); // adjust this number starting from 10 going to 40 until you find out which one will activate your ESC.

Loop() {
m1.write(angle); // Angle needs to be anywhere between 0 & 180, 180 = full speed.

If I have a 360 kV motor with a 7.4V Li-Po battery, an angle of 180 should mean that the motor should be spinning at 2664 RPM right? Someone please verify this is correct.

If this is correct…

180 Angle = 2664 RPM
Then 1 RPM = 0.0675675 Angle (180Angle/2664RPM = 0.0675675 Angle/RPM).
Therefore, to get 1500 RPM I can calculate the angle needed as follows:
1500 RPM x 0.0675675 Angle/RPM = 101.35 Angle

Since the load on the motor is going to lower my speed, this means to get 1500 RPM I will need an angle anywhere between 101.35 & 180.

I’ve selected the following Motor, ESC & Batterys from the links below to get this done.

Electronic Speed Controller (ESC):

I used the following article at the link here to determine how to select everything:

How I selected the motor:
I know I need a low kV rating as all the BLDC motors I can find require at least 7.4V from a LIPO battery. If the kV were too large, the angle needed for 1500 RPM may be so small that the motor may not even turn on. The lowest & cheapest kV I was able to find was the 360 kV BLDC motor. The specs on their website don’t show info for the motor at 7.4V’s, but claims it can run on 2-6 LIPO batteries (2 x LIPO batteries = 7.4V). So I looked at the specs under 11.1V to see that the motor runs to a max Amperage of 7.4A at 11.1V. This means that I want both my battery & my ESC for 7.4A’s or higher.

How I selected the ESC:
I decided to buy the ESC from the same website to keep things convenient for myself. I know I have to get an ESC rated for 7.4A or higher. They had a 10A ESC for $9.99, but for $1 more I could get a 30A ESC so I decided to go with the 30A ESC.

How I selected the LIPO Battery:
I know I want a 7.4V battery that can handle at least 7.4A’s. From the Article, I found out that mAh x C = A. I found a really cheap battery, and used the calculation to find that it had an Amperage of 30 (1200mAh * 25C = 30,000 mA = 30A)

Someone please confirm that this all looks like it makes sense.

Thank you,


You will not get precise speed using a BLDC and a ESC unless you use a closed loop ESC. If you have a 360Kv motor and a 7.4V LIPO the theoretical speed will be 2664. The real speed will be lower than that depending on the motor and the load. But since you need 1500rpm this will work. The connections look right to me


You have me confused by saying "closed loop ESC". All the information I googled on ESC's state the only differences between ESC's are as follows.

  • The amperage can range from low to high
  • The ESC can come with or without a BEC
  • Some ESC's are made for BDC motors while others are for BLDC motors

Can you please explain how I can tell if an ESC is supposed to be closed loop? Also, could you explain the difference between an open an closed loop ESC?

Closed loop esc are normally used for quadcopters. Like this one


I bought everything, hooked it all up, couldn't figure out how to make the motor go for the longest time. The motor would just beep at me every few seconds. Eventually I found a pattern to activate the motor (increased angle slowly while waiting a few seconds between each angle).

Excited to get the motor moving and having fun with it, I wondered if going from m1.write(179) to m1.write(-179) would reverse the motors direction.

I did the following code...

void Loop() { m1.write(179) delay(400) m1.write(-179) delay(400) }

I'm not sure if this actually made the motor switch directions, but it did make the motor jump around attacking everything in sight including it's own wires and the ESC.

Now when I try to activate the motor, the ESC, the motor, & the wires from the ESC to the motor get incredibly hot. The motor still manages to activate, but now the motor is really choppy when it does move. Also, the motor puts off a weird smell, I took off the battery when I started to smell it. Before the hiccup, the motor ran smooth.

Do I need to get a new motor, a new ESC, or both? I think I've messed something up :astonished: