Questions about Brushless control motor


For a project, I need to control a peristaltic pump with brushless motoreductor (


I used to control stepper or brushed dc, it’s my first time with brushless and that’s why I have some misunderstanding.

First, in the datasheet, we can see there are 6 wires connector.
I think that if I want to control the motor with an ESC, I only need to connect the +, -, and the speed signal control output, isn’t it?

In the datasheet, I don’t understand why it is written (0-5.5V) for the 3,5,6 wire. The operating range is 8-24VDC, not 5 V :thinking:

Secondly, I follow this tutorial but I don’t understand how we have to choose the ESC. My current limit is 2.5 A, so I have to use a 3 A ESB?

Thanks in advance for your answer.


That looks like a motor with a built-in driver/ESC so you don’t need another ESC. The 3, 5, 6 wires are CONTROL signals NOT power. The 24V power just goes between 1 + and 4 -

What tutorial is that? And what’s an ESB?


Hi slipstick,

sorry, here is the link : Arduino Brushless Motor Control Tutorial | ESC | BLDC - HowToMechatronics
and yeah ESC, not ESB.

That looks like a motor with a built-in driver/ESC so you don’t need another ESC. The 3, 5, 6 wires are CONTROL signals NOT power. The 24V power just goes between 1 + and 4 -

You think the ESC is pre-integrated? So I only have to connect the wire 2 on the Arduino and the 1/4 on my external supply voltage ?

I hope this will make the relevant info easier to read.

Tom… :grinning: :+1: :coffee: :australia:

No, read it again. 2 is an OUTPUT you can use to read the speed. 5 is the PWM speed CONTROL from the Arduino. Don’t forget to connect the external supply negative/ground and the Arduino GND.


This datasheet is a bit more informative

With some warnings.

Tom… :grinning: :+1: :coffee: :australia:

Thanks Tom for the thorough datasheet.

I’m confused slipstick, about the usage of an ESC. I don’t understand how I can control the motor with this method.

Alternatively, can I use the number 5 connector and controlling the motor with only a digital.wirte(number_pin,pwm) line.
In order to connect directly the 24v supply voltage in the + and - connectors of the motor, and the 5 in a PWM pin of my mega2560, I don’t know If I need a shield motor driver.


There is no alternatively. You can’t use a normal BL ESC with that motor because it already has it’s own built-in ESC.

So no “shield motor driver” is needed. Connect pin 5 of the motor to any PWM pin of your Arduino. And remember that PWM uses analogWrite() not digitalWrite(). Connect 24V + and - directly to the motor and, as I said before also connect the 24V - to the .Arduino GND.




Thanks a lot.

And my for my understanding about brushless control : if I use an other motor with exactly the same specifications but without speed output. How could choose my ESC? In adequation with the phase current of the motor (2A phase current = ESC 2A) ?


That motor does not connect to an ESC. It has the speed controller built in. You feed it a direction signal and a PWM signal for how fast to go. There is a feedback signal that lets you calculate how fast it is going, in case you want some specific speed. Use a digitalWrite() for direction and analogWrite() for the PWM speed signal. The Arduino PWM signals are 490-ish or 980-ish Hz. The motor spec seems to call for a 10 kHz to 30 kHz signal so you may need some customization.

You can get some faster PWM on the analogWrite() pins just by changing the clock prescale on the timers. The default prescale on Timer1 (Pins 9 and 10) and Timer2 (Pins 3 and 11) is 64. If you change that to 8 the PWM will be 8 times as fast (3.9216 kHz). If you change it to 1 it will be 64 times as fast (31.3728 kHz). Neither is between 10 and 30 kHz.

Hi John,

Thanks for your explications.

I know how to change the timer frequency of an arduino. In a early project, I use those lines to have a 800 Hertz frequency:
TCCR1B = 0b00010011; // puts CS11, CS10 and WGM13 = 1 TCCR1A = 0b10000010; // puts COM1A1 and WGM11 = 1 ICR1 = 156;

With this equation : F_pwm = F_clock /(2NICR3), I think I can have a frequency between 10 K and 30 K.

But the thing that I don’t understand is : you create a PWM signal from 0 to 5 V in the Arduino. I will supply my pump with 24 V. How I can bridge the gap without a motor shield ?

Otherwise, If I understand well, I only have to use these two lines to control the motor:
analogWrite(PIN_MOTEUR_PWM, 0); (from 0 to 255, with an Arduino Pin PWM connected to the 5)
digitalWrite(PIN_MOTEUR_DIR, HIGH); (Or Low for the counterclock, connected to the 3)

You’ve already been told the motor already has a controller built in. You don’t need
a separate controller, you just talk to the built-in controller (which is a microcontroller
plus output 3-phase bridge - only the bridge runs at Vmotor).

If you were to use another brushless motor without built-in controller you should
pick one with Hall sensors and select a sensored ESC with accurate speed control
mode. Using a motor with controller built in is much simpler, go with it if possible.

There is no gap. The Arduino needs a 5V supply and produces a 5V signal that the electronics built into the motor can use. The only thing that uses 24V is the POWER to the motor (power NOT control signal) and that connects to the + and - pins.



Thanks, everyone!

WARNING: When you set the frequency by changing TOP, the value at which the timer/counter ends its count, you also change the maximum value for PWM. If you set TOP to 200 then any analogWrite() of 200 or more will cause the output pin to be on all the time (full speed). You have to scale the 0…255 range to match the new TOP. Note that analogWrite() won’t use values over 255 even on 16-bit Timer1.

To get 10 kHz PWM you need 1600 clock cycles per pulse. That would be a prescale of 8 and TOP set to 199. That’s fairly close to the normal 256 levels of PWM so you might not even notice that anything above 199 is full speed.

For the control after a top changing, I use to code as you can see below :

void set02Flow(int inPwm)
  if( inPwm < 0 || inPwm > ICR1 )
    inPwm = 0;
  OCR1AL = inPwm;

Since timer1 is 16 bit, use the 16 bit OCR register “OCR1A”, not “OCR1AL”.

It’s strange, it works with OCR1AL.

Yes but you are only affecting the lower 8 bits of the 16 bit timer’s register, which
probably means its working partially.