0
\$\begingroup\$

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

\$\endgroup\$
3
  • \$\begingroup\$ My write up of brushless motors is here. The link to circuit diagram. My code and write up of brushless motor control here. \$\endgroup\$
    – Owen White
    Apr 18, 2017 at 11:07
  • \$\begingroup\$ Exactly which motor do you have, and how fast do you want it to run? \$\endgroup\$ Apr 18, 2017 at 16:45
  • \$\begingroup\$ I have several brushless gimbal motors. Here is one example, and I'd like it to run two-three times faster than this which I will try to achieve by following the suggestions from jms and changing the gearing. Originally I wanted as small a gear as possible to increase the amount of resolution (e.g., more turns per linear movement of the slider). \$\endgroup\$
    – Owen White
    Apr 18, 2017 at 23:50

1 Answer 1

1
\$\begingroup\$

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.

\$\endgroup\$
1
  • \$\begingroup\$ excellent suggestions and I'll try them very soon. We both agree that if I went with closed loop, I'd have to use a different circuit board as well as a different gimbal that has a sensor, correct? Thanks again. \$\endgroup\$
    – Owen White
    Apr 18, 2017 at 17:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.