Electrical – L6234D three phase motor driver, atmega328p, and brushless motor speed

atmega328pbrushless-dc-motor

Folks,

this question involves an arduino, a brushless motor, and L6234D three phase motor driver.

A very nice description of the principles to use the L6234D be found at this site. The gist it's operation is it does not use PWM, but rather a it employs "sine-wave modulated PWM" which essentially supplies psuedo-sine waves to the controller to run the brushless motor at low speeds.

To simplify things there are lovely boards that have the L6234D with a built in Atmega328p put together by our colleagues in china. (search "rctimer brushless gimbal controller")

The circuit for these boards can be found here

I have a long explanation of using a brushless motor driver at my github site that no one should care about. (My write and code to run the thing is in a comment below).

So my problem is this. I want the motor to run faster. The key issue is my code has a delay in it as it steps through passing PWMs to the three inputs to the L6234D, and if I shorten that delay to a small number of milliseconds, the motor stops turning and just jitters.

Does anyone have any suggestions for how I can increase the speed of the motor? The documentation up in my first link shows a graph where the motor runs faster when SPWM is not used – but I cant apply digital levels to the enable pins on the L6234D because I'm working with hardwired circuit board.

thanks in advance

Best Answer

A spinning motor will generate its own alternating voltage in the windings, known as back-electromotive force or back-EMF. The magnitude of the back-EMF is directly proportional to the motor speed, and it acts in opposition to the external winding voltage your motor driver is applying:

schematic

simulate this circuit – Schematic created using CircuitLab

The higher the back-EMF is relative to the supply, the lower the voltage over the winding resistance is. The torque developed by a motor is directly proportional to the winding current, so if the voltage over the winding resistance is too low, the winding resistance will eventually limit the current to a value that won't generate enough torque to overcome friction. Thus the faster a motor spins, the more voltage you need to allow the same amount of current to flow.

The "KV" rating of RC brushless motors is a simple ratio between rotation speed in RPM and the level of generated back-EMF in volts.

I want the motor to run faster. The key issue is my code has a delay in it as it steps through passing PWMs to the three inputs to the L6234D, and if I shorten that delay to a small number of milliseconds, the motor stops turning and just jitters.

The motor speed increases → the back-EMF increases → the voltages over the winding resistances decrease → the winding currents decrease → the torque decreases. Eventually the decreasing torque gets overcome by friction, and the motor slows down slightly.
Being a synchronous motor (brushless DC motors are also known as permanent magnet synchronous AC motors) and being driven open loop, slowing down even slightly relative to the motor driver output will cause the motor to fall out of phase (known as loss of synchronization) and grind to a halt, making weird noises in the process.

Does anyone have any suggestions for how I can increase the speed of the motor?

Sure, you can increase the motor supply voltage proportionally with increasing speed to counteract the effects of the back-EMF. This can be done simply by increasing the amplitude of the PWM-synthesized sine wave, or by increasing the supply voltage to the L6234D triple half bridge chip.

Be aware that you can't just increase the voltage forever. Motors are rated for a maximum current and a maximum voltage. Also, brushless gimbal motors are very ill-suited for high speed operation. They are wound to a very low KV, with many turns of very thin wire for maximum torque at low speed.

suggestion:

Your current brushless motor driver is driving the motor open loop, so you are effectively driving the motor as a three phase stepper motor with microstepping. This is fine for brushless gimbals where the motors are driven at extremely slow speeds (even below 1 RPM) and feedback is provided by MEMS gyroscopes, but makes little sense for higher speeds.

Typically brushless motors are driven closed loop, with the rotor position being continuously sensed to keep the driver output always in sync with the motor. Speed control is then achieved by varying the voltage fed to the motor.