web analytics

Spining BLDC(Gimbal) motors at super slooooooow speeds with Arduino and L6234

First of all You won’t find here any information on high speed BLDC motor driving. For that purpose You need to know rotor’s position, so You have to measure back-EMF or use Hall sensors (not needed here).

For basic info about driving BLDC motors here is best “classic” articles on internets:
Driving a three-phase brushless DC motor with Arduino – Part 1. Theory

Driving a three-phase brushless DC motor with Arduino – Part 2. Circuit and Software

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

I used specialized triple half bridge IC L6234 (~ 8$). You can make the same spending less money (but more time) with MOSFET transistors or other IC.

But be careful, I found a lot of cases in various forums, where people burned their Arduinos or L6234 chips.

Magic Blue Smoke Attention

ATTENTION
If You connect L6234 INputs directly to Arduino and OUTputs to low impedance motor – current from Arduino pins will be driven directly through L6234 to the windings and to the ground (without external Vs power applied to L6234). This makes very good chance to burn Your lovely microprocessor.
Also in application note, one sentence is worth to mention – “To avoid overload of the logic INPUTS and ENABLES, voltage should be applied to Vs prior to the logic signal inputs.”

I also very recommend to study (or/and purchase) this open hardware driver board based on L6234 BLDC Motor Driver by Michael Anton. It has input protecting resistors, zeners, power supply/filtering components and even back-EMF sensing circuit with amplifier (not used here).


L6234 datasheet is surprisingly useless. Go straight to Application Note AN1088 instead.

My setup of Arduino and DIY driver-board:

P1090837a

I added current limiting resistors (1kΩ) to all INputs and ENable pins, a bunch of capacitors recommended in application note and current sensing shunt resistor 0.6Ω (big blue one).

There is main illustration, for basic BLDC driving using 6 step sequence(rectangular current):

6 step BLDC driving sequence
It works very well on high speeds. But on slow RPM’s You will have choppy steps. So we need to smooth out driving current to sine waves:
 six steps BLDC to sine wave

To achieve this, You simply set ENable pins to HIGH (as except few zero moments, voltage is continously changing). And feed the sine-wave modulated PWM (SPWM) to INput pins:
SPWM

I didn’t tried to force Arduino to make sine calculations. Lookup tables was used instead. Here is a link to OpenOffice spreadsheet:
openoffice_calc BLDC_SPWM_Lookup_tables
You can generate traditional sine waves (SPWM) and Space-Vector PWMs (SVPWM). Try both and decide which to choose for Yourself.

And here is actual Arduino code, fused from different sources:

After compilation You will have info that there are still plenty of memory. Even after heavy 360 values sine array.

So, there are 360 “steps” in one electrical revolution, and tested motor had 6 electrical revolutions, per one mechanical. This means 360×6 = 2160 “steps” per mechanical revolution or 0,16(7) degree of precision. If not enough, You can make even 3x more precise lookup table.

Here is some video illustrating results (You have to be very patient to notice movement on last one! )

SVPWM modulation is used in this video. Pot interactively changes delay(); value.

Support

If I helped You, please help me. Thank You!


Error: Your Requested widget "Buy Me a Beer Donation " is not in the widget list.
  • [do_widget_area blog-widget-area]
    • [do_widget id="pippin_recent_posts-3"]
  • [do_widget_area first-footer-widget-area]
    • [do_widget_area fourth-footer-widget-area]
      • [do_widget_area header-widget-area]
        • [do_widget_area primary-widget-area]
          • [do_widget id="search-2"]
          • [do_widget id="recent-posts-2"]
          • [do_widget id="recent-comments-2"]
          • [do_widget id="archives-2"]
          • [do_widget id="categories-2"]
          • [do_widget id="meta-2"]
        • [do_widget_area search-widget-area]
          • [do_widget_area second-footer-widget-area]
            • [do_widget_area shop-widget-area]
              • [do_widget_area third-footer-widget-area]
                • [do_widget_area top-left-widget-area]
                  • [do_widget_area top-right-widget-area]
                    • [do_widget_area widgets_for_shortcodes]
                      • [do_widget id="buymeabeer-2"]
                    • [do_widget_area wp_inactive_widgets]
                      71 Comments
                      1. Pingback: Driving A Brushless DC Motor Sloooooooowly | Ad Pub

                      2. Pingback: Driving A Brushless DC Motor Sloooooooowly - zeax blog (ze-ax.com)

                      3. Pingback: Driving A Brushless DC Motor Sloooooooowly | Hack The Planet

                      4. Pingback: Driving A Brushless DC Motor Sloooooooowly | MyWebspace

                      5. Pingback: Spining BLDC motors at super Slow speeds with Arduino and L6234 - Arduino collector blog

                      6. Pingback: Hard Drive Wall Clock (first concepts) | modified.systems

                      7. Pingback: Spining BLDC motors at super Slow speeds with Arduino and L6234 -Use Arduino for Projects

                      8. Pingback: [Tuto] Pilotage de moteur triphasé à faible vitesse

                      9. Pingback: Sensorless BLDC Motor Control Based on Arduino UNO - Electronics DNA

                      10. Pingback: Simple VFD 3 Phase Induction Motor SinePWM using Arduino UNO - Electronics DNA

                      11. Pingback: Preliminary experiment with SPWM 3 Phase Induction Motor - Electronics DNA

                      12. Pingback: Spining BLDC(Gimbal) motors at super slooooooow speeds with Arduino and L6234 -

                      13. Pingback: Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.1) - ElectronicsDNA

                      14. Pingback: Arduino Speed Control 3 Phase Induction Motor by TM-35 (V.2) - ElectronicsDNA

                      Leave a Comment