BLDC Motor Question

Im pretty new to arduino but i am attempting to build a project using a 3 phase brushless dc motor that i have. its a 24v 18.6 peak amp motor and im not sure which way i should control it. i found a brushless dc motor controller on ebay but i also thought about using relays to control it since i only need to control it bi directionally. Here is the motor driver i thought about using.

Im not sure what the HALL monitoring is for but the motor was used for CNC machine. but the motor has the three wires for the three phases as well as 3 HALL monitoring wires for each phase along with a HALL power and ground wire. I dont know what my best option is here or how to wire it up im just looking for some help from you all. Which method should i use to control this motor and what other components do i need to make it work properly, i could also use some tips on how to hook it up to an Arduino UNO. I will also be running a lead screw stepper motor off the arduino with its own motor driver. THANKS!!!

That board does look like it will do the job from what I can see.

BLDC’s have no commutator, the rotor is just magnets, so the 3 phase coils have
to be switched at the right points as the rotor spins to keep pushing it round
the same way, and the 3 hall sensors provide that information.

Note that there are 6 ways to connect the 3 phases and another 6 for the sensors
and you will have to experiment to find what works for your motor - there may be
jumpers for the hall polarity and 60/120 degree options.

The only components you need are a power supply and an Arduino to drive the
controller (think it takes direction and PWM?)

[ Forget relays, you need to switch far faster than a relay can handle ]

Hi, Can you give us the motor make and model, or a least a photograph of it please?

Tom.... :)

Here you go Tom this is the motor i have purchased already that is going to provide the torque and RPM parameters that i need

Yup, that's a 24V 18A peak BLDC...

I have another question as well about this driver board that i was looking at.

This driver is powered by an outside source of anywhere from 12-36 volts correct?? That being said in my case im going to need a 110vac to 24vdc transformer to supply the driver and in turn the motor with the voltage it needs (because i plan to use a standard wall outlet for power). So my question is does that transformer need to be able to supply the 18.6 peak amps that the motor requires, is the motor going to be limited by whatever current is being supplied from the 110vac to 24vdc transformer?? The motor will only be running for 10 or so seconds at a time with long breaks in between and shouldnt ever draw peak current. I just want to make sure i buy the correct power supply so the motor will get enough current and voltage to do what i need it to do.

There's no such thing as a 110Vac to 24Vdc transformer. You mean power supply?

No you don't need to supply all 18A, you just ensure your supply is able to handle temporary overload without issues (ie it current limits). If you drive the motor carefully, ramping its speed up and down, you probably won't see anything like those high current peaks.

If you don't manage ramping up and down then it will pull the full 18A stall current on switch-on, but very briefly.

With this setup would you be able to control the exact amount of rotations that the motor made? Or even tell it to turn 20 degree or 50 degrees?


No, you don’t get position information back (although you can listen in
on the hall’s and get a crude 12 or 24 count incremental encoder, in effect).

Add a decent encoder though, and yes, you are setup a closed control loop
and turn a motor into a servo-motor.

Incidentally I came across some cheap BLDCs with integrated controller
and encoder on eBay, I think search terms like “BLDC 24V encoder” may
find the one(s) I mean.


I’m using DYS 30A ESC. The problem is two of my ESC’s are working fine. And I’m currently involved in a quadcopter project without Radio. The other two ESCs are not working unless they are connected to the wireless joystick.

The code i used is,

Servo m1;

void setup()
void loop()
for(int i=60;i<65;i++)

The motor arms, then it starts to spin, when it reaches 65 it again starts from 60. This is how I test whether it is running or not. Two of my ESC are not passing this test at all. But when connected to wireless and when the throttle is given High, armed and then changing the throttle makes it working. Kindly help me out.

Your motor is sensored bldc motor. Sensored means the motor has 3 hall sensores used to know its position. I have done a project for controlling a small BLDC motor using Arduino and PIC16F877A. It is on this blog:

Thanks for the help. Actually those two ESCs were running 5 days back. I wrote a code for PID controller and it overshot. After that the esc is arming only with the help of a receiver. That is the problem i'm trying to rectify

venkisagunner: Hey,

I'm using DYS 30A ESC.

This should be a different thread, not relevant to this one.