Controlling brushless motors

hey guys, planing on making a autonomus hexacopter. using the arduino. wordering if anyone knows how to control a brushless motor with the arduino alone, no esc. i know you need a ac to dc coverter, got any ideas??

no esc. i know you need a ac to dc coverter, got any ideas??

Well I have been looking into this but with an ESC. Without an ESC you would be looking at a very high powered PWM circuit. You would basically be building your own ESC as far as I understand it.

With an ESC, you just send it servo pulses and it should be really easy to control. Is this a budget restriction? The ESC really would be the best way to go.

Mowcius

As mowcius says, you'll be building ESCs anyway.

To drive a brushless motor, you have to take DC, turn it into three phase AC (sinusoidal or trapezoidal wave) and then measure back-emf pulses (sensorless) to allow you to make sure the three phase AC is being generated at the proper frequency to turn the motor (timing).

As an academic exercise, this might be done with one motor. You will have to generate three AC currents with 120 degree phase difference. Then you have to time them so you have a rotating magnetic field. This usually involves driving six hexfets. See below for a better explanation of what you will need to do. It's actually quite interesting.

Microchip appnotes to read to better understand driving brushless motors: http://ww1.microchip.com/downloads/en/AppNotes/00885a.pdf http://ww1.microchip.com/downloads/en/AppNotes/00857a.pdf

More Microchip, including selecting mosfets (Double H-Bridge) and using PIC microcontrollers to make a sensorless brushless motor driver (ESC) http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1523

Open-BLDC -> Open Source Brush Less DC Motor Controller

http://open-bldc.org/wiki/Open-BLDC

Hard Disk motor converted to hall effect position sensing (links to more resources for driving BLDC motors & Arduino sketch)

http://www.instructables.com/id/BLDC-Motor-Control-with-Arduino-salvaged-HD-motor/

Probably what you're looking for, but in German. A quadcopter controller... and if my limited ability to read German is correct, some of the prototyping involved driving hard drives.

http://thomaspfeifer.net/

Another reason for building your own ESCs or modifying off-the-shelf ESCs is to eliminate the inaccuracies of PWM control. Designing for or modification to I2C bus for control from the micro-controller allows for faster response.

Mikrokopter, and the Hexakopter. They're building their own ESCs and here's the page:

http://www.mikrokopter.de/ucwiki/en/BrushlessCtrl#Brushless_Ctrl_.28or_Electronic_Speed_Controller.2C_ESC.29_.28General.29

It's based on the Atmel AtMega8.

Here's a schematic for a Towerpro 25A Brushless controller. It's AtMega8 controlled, takes in an RC PWM servo control signal and drives a FET array. http://www.rcgroups.com/forums/showthread.php?t=766589

In the discussion is I2C conversion as PWM will update 150/second and they've found that they have smoother operation with I2C giving them speed control changes at up to 300/second

Open-BLDC -> Open Source Brush Less DC Motor Controller

http://open-bldc.org/wiki/Open-BLDC

Hmm looks interesting. I think I might just stick to the commercial ones for my project (as it needs to be about 100A)

Mowcius

thanks guy but, the reason im looking at this is i need a very fast rate of change in the motors witch retail ESC's dont supply. also i need feedback from the motors, i need to know exactly what rpm the motors are at all times, for maximum efficency and control, cause what i understand about ESC's is that they basicly tell the motor to it a sirten rpm and if the motor doesnt hit the target the ESc does not know as no feedback is provided. i have looked at the mikrokopter, it was my main inspiration but im looking to do it my self without using there hardware and software. well thanks guys, please contiue posting i need your help!!

can the motor control shield do the job?? with feed back and everything stated in my last post?

cause what i understand about ESC's is that they basicly tell the motor to it a sirten rpm and if the motor doesnt hit the target the ESc does not know as no feedback is provided.

While it is true that most R/C brushless ESC's don't provide the user with a RPM feedback, it's untrue that the ESC itself doesn't have that information. Most now a days use a sensorless method that reads counter emf pulses on the 3 phase wires to 'count' the pulses and then determine the actual present RPM of the motor. Without this internal speed feedback the ESC would not be able to function correctly.

Lefty

can the motor control shield do the job?? with feed back and everything stated in my last post?

Not for a high power brushless motor...

Mowcius

Visualize what happens in a BLDC motor with this: http://en.nanotec.com/steppermotor_animation.html

At the top select center drop-down menu BLDC-Motoren and at the very bottom, Block-Sensorless.

You will now see a motor with six coils (in a standard rc motor there will usually be nine poles with phase a being wound on poles 1, 4, 7; phase b on 2,5,8 and phase c on 3,6,9).

Crank the voltage knob to 24 volts and watch the motor spin. To the right is a commutation table showing you the sequencing of the transistors in the three H bridges required, one H-bridge per phase. Below it is a scope representation of the back-emf you will try to sense so you can commutate at the proper time to prevent cogging or motor reversal.

As to your question about using the motor shield, most I've seen have two L293D chips http://focus.ti.com/lit/ds/symlink/l293d.pdf Since each chip has four half-H bridge drivers, and you need six, you would use all the drivers on one chip and half on the second. This will require experimentation to make sure you can switch the coils properly (see commutation table above). This will only work with a very light duty BLDC as these chips are not meant to source more than an amp. See here for someone who used the Adafruit shield to drive a HDD motor after modifying the AFMotor shield library to do what I just described: http://forums.adafruit.com/viewtopic.php?f=31&t=11583

IRL we're using 7 amp ESCs minimum hence six HEXFETs or similar for the actual switching, and it's really easy to let the magic smoke out if you overload...

Hence the quadcopter ESC is an Atmega 8 driving this MOSFET array with a voltage divider system that senses the back-emf for timing. http://www.mikrokopter.de/ucwiki/BL-Ctrl_Anleitung?action=AttachFile&do=view&target=BL-Ctrl_Schaltplan.gif