Controlling 3x BLDC motors

arduinobrushless-dc-motorlaunchpadstellaristexas instruments

I'd like to control 3x L6234 IC's (3x BLDC motors) with the cheapest microcontroller/board/lauchpad but I'm a bit confused about the requirements needed for the microcontroller. As I understood each motor needs 3 PWM control signals so I'd need 9 PWM's, but I'd also need 9 timers in the microcontroller right? Or can I use just 3 combined with prescalers?

I was thinking about using Arduino boards but they are still more expensive than texas launchkits (MSP430 launchpad and stellaris could do the work?).

Best Answer

One L6234 driving one BLDC motor needs 3 PWM signals.
Three L6234 driving three BLDC motors need 9 PWM signals. This assumes each motor requires independent speed control.

Several manufacturers, for example Texas Instruments BLDC Cntrol have extensive documentation and videos on driving BLDC motors.

Their advice is to use a type of PWM called 'centred', 'symmetric' or 'up-down counting'.

Wikipedia PWM types shows the three types. One type counts up, another counts down, and the third is centred.

Up-counting PWM counts upwards, triggers the output pin 'on' when it matches the threshold value, reaches a maximum count, then resets the count to zero, switches the PWM 'off' and repeats. Down counting PWM is the opposite, with 'on' happening at the stat of the cycle, and 'off' being controlled by the timer threshold. (Some PWM timers can also reverse the sense of the PWM signal.)

The point is, either the start of the PWM signal becomes 'on' at a consistent timer, and the 'off' is controlled, or the 'off' is consistent and the 'on' controlled by the threshold value.

'Centred' PWM counts up, 'triggers-on', continues to count to the maximum, then counts backwards towards zero, 'un-triggers-off', continues down to 0, then repeats. So both the start and the end are controlled symmetrically. According to TI, this is the best way to drive BLDC control.

For BLDC control, typically, one timer can drive three PWM outputs, and control one BLDC motor. For one BLDC motor, the three PWM signals are synchronised, so they can be driven by a single, common timer. It is okay to use more timers to drive the PWM signals, it takes a couple of extra lines of code to keep the timers in synch.

An Arduino UNO has three timers, but each timer generates only 6 PWM, so it could drive two BLDC motors. The Arduino software use one of the timers to generate a 'millis clock', so that one couldn't necessarily be used for BLDC speed control. So it is awkward to use for more than one BLDC, using that L6234.

You are looking for a MCU which has three independent timers, each timer has at least three PWM outputs. There are a lot of MCUs which can do that. It appears that the L6234 could be driven by a 3.3V MCU.

AFAIK the Arduino Due has plenty of timers and PWM channels.

Lots of STM32F, which are available in very low-cost ST NUCLEO boards. These are under 10GBP including Tax. Those boards look like 'flash memory' so loading programs does not require any extra hardware programmer. The board includes hardware (SWD) debugging, too.

Nucleo's can be used with mbed software, so you don't need to install an IDE to get started.