Tag Archives: brushless motor

Tutorial:How to control a brushless motor with raspberry pi

UPDATED 2014.06.15 Important Note: I discovered that the usage of the function pwm.setservo() it is not adeguate to control the motor in a loop. Everytime it is called, it sets the pwm to zero than it sets the new value. the result is a loss of speed (and so power ) of the motor. I just start to use the pwm.add_channel_pulse() instead and it solve the problem.See motor.py for the last version of  code.


Last Saturday it was the great day: first brushless moved! And moved with rpi!!!

Right now I prefer not to mix up too much things, so the rpi is powered via usb and the connection is done by ethernet cable.


Those the details for the necessary steps.

  1. Mount the motor firmly. IMPORTANT: Remember it will move,so fix it well!
  2. Connect the motor wires to the esc.my motor has got 3 cables:red,black and yellow.I decided always to connect the black on the middle, and i can invert yellow and red to change rotation side.
  3. Do NOT connect yet the esc power cable to the battery
  4. Connect esc 0v signal (black) to th rpi ground (for example pin 25)
  5. Connent PWM signal(white) on a rpi output.In my example i connect on pin 11 called GPIO17. This value(17) is used in the program.
  6. Connect Ethernet cable
  7. Connect USB to power on rpimotor_test_setup

Let’s see now the software. It is necessary to install on rpi the RPIO library.You an find how to do it in the SW installation post.

  1. Donwload the motor_test folder tha includes motor_test.py and motor.py and copy in  home/python/motor_test on your pc.
  2. On the pc terminal copy the folder on rpi: (it is requred the rpi password):
    scp -r python/motor_test  pi@
    password : raspberry
  3. On the pc terminal run the command to connect to rpi.now the terminal is the rpi terminal.
    ssh pi@
    password : raspberry
  4. Finally run the motor_test program.Important: the startu sequence of an ESC can vary by the model.See the ESC  page for details.
    cd python/motor_test 
    sudo python motor_test.py
  5. Follow the program instruction.


After the first ENTER , the PWM signal is set to the maximun value (a pulse width= 2000us every 20ms).Now you can connect the ESC power cables.If everything goes right (correct voltage, cell number correct) ESC is ready to pilot the motor.PWM signal goes to 1000us,the minimum value.So it is possible to play with the motor speed.My motor starts to move over 5%,it means 1050us.This value depends from motor inertia from friction and from battery charge level.