BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

12 Schritt:Schritt 1: Video Schritt 2: Werkzeuge und Materialien Schritt 3: Das Verständnis BLDC Steuer Schritt 4: Der Motor Schritt 5: Der Hallsensor Mechanischer Aufbau Schritt 6: Hall-Sensorschaltungen Schritt 7: Die Kalibrierung der Hall-Sensoren Schritt 8: Die Leistungselektronik Schritt 9: Regeneratives Brems Schritt 10: Verbindungen in die Arduino Schritt 11: Control Software für die Arduino Schritt 12: Eine alternative Hardware-basierenden Ansatz zu Kommutierungslogik

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren
Es gibt ein großes Interesse in diesen Tagen unter den Hobbyisten bei der Kontrolle der bürstenlose Gleichstrommotoren (BLDC), der Leistung und eine bessere Energieeffizienz als verbessert haben
herkömmlichen Gleichstrommotoren, sind jedoch schwierig zu bedienen. Viele off-the-shelf-Produkte gibt es für diesen Zweck. Zum Beispiel gibt es viele kleine BLDCs Regler für RC
Flugzeuge, die wirklich gut funktionieren.

Für diejenigen, die tauchen tiefer in BLDC Steuer gibt es auch viele verschiedene Mikro-Controllern und anderen elektronischen Hardware für industrielle Anwender und soll
diese in der Regel eine sehr gute Dokumentation. Bisher habe ich keine umfassende Beschreibungen, wie BLDC-Steuerung mit einem Arduino Mikrocontroller tun gefunden. Auch, wenn
Sie viele Produkte, die für den Einsatz mit kleinen Motoren oder sind daran interessiert, regeneratives Bremsen, oder unter Verwendung eines BLDC für die Stromerzeugung sind, habe ich nicht gefunden
viele Informationen darüber, wie ein 3-Phasen-Generator zu steuern.

Diese instructable begann als Demonstrationsprojekt in einer Klasse von Echtzeit-Computing, und die ich fortgesetzt, nachdem die Klasse beendet. Die Idee für das Projekt war es,
zeigen ein Modell eines Hybrid-Elektrofahrzeugs mit Schwungrad-Energiespeicher und regeneratives Bremsen. Die im Projekt verwendeten Motoren sind klein BLDCs
von defekten Festplatten abgefangen. Diese instructable beschreibt, wie BLDC-Steuerung mit einer dieser Motoren zu implementieren, ein Arduino Mikrocontroller und Hall-
Effekt-Positionssensoren, sowohl Autofahren und regeneratives Bremsen Modi. Beachten Sie, dass der Zugang zu einem Oszilloskop ist sehr hilfreich, wenn nicht unerlässlich, um dies zu tun
Projekt. Wenn Sie keinen Zugang zu einem Umfang, habe ich einige Vorschläge, wie es könnte, ohne ein (Schritt 5) durchgeführt werden aufgenommen.

Eine Sache, die dieses Projekt nicht, dass sollte in jedem praktischen Motorsteuerung alle Sicherheitsfunktionen wie Überstromschutz aufgenommen werden soll. Wie es ist, im schlimmsten
was passieren kann, ist, dass Sie sich die HD Motor zu verbrennen. Jedoch würde es nicht zu schwierig sein, Überstromschutz mit der aktuellen Hardware zu implementieren, und möglicherweise
Ich werde es zu einem bestimmten Zeitpunkt zu tun. Wenn Sie versuchen, Steuerung einer größeren Motor, können Sie hinzufügen, Überstromschutz, um Ihren Motor zu schützen und zu Ihrer eigenen Sicherheit.

Ich möchte versuchen, mit diesen Controller mit einem größeren Motor, der einige "echte" Arbeit zu tun, aber ich weiß nicht ein geeigneter Motor ist leer. Ich bemerkte eine 86W-Motor für den Verkauf auf eBay für
rund 40,00 €, das wie ein guter Kandidat zu sein scheint. Es gibt auch ein RC Website namens "GoBrushless", die Kits für die Zusammenstellung Ihrer eigenen BLDC verkauft. Diese sind nicht zu
teuer und Gebäude eine ist eine lohnende Erfahrung. Beachten Sie, dass die Motoren von dieser Website nicht über Hall-Sensoren.

Puh! Es war eine Menge Arbeit zu schreiben, bis diese instructable. Ich hoffe, Sie finden es nützlich und bitte posten Sie Ihre Kommentare und suggestions.Step 1: Video



BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Schritt 2: Werkzeuge und Materialien

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren
Tools

Digital-Multimeter (DMM) - Es ist hilfreich, wenn Ihr DMM hat einen Frequenzmesser
Oszilloskop (vorzugsweise mit mindestens 2 Kanäle)
T8 Torx (Sie benötigen eine von diesen zu öffnen, keine Festplatte). Eine gute Hardware haben sie.
Machine Shop und Rapid Prototype Machine (Diese waren sehr hilfsbereit, aber mit ein wenig Einfallsreichtum Ich denke, das Projekt ohne sie getan werden).

Materialien

BLDC-Motor von einer Computerfestplatte
Ein Magnetring (die Hälfte des Motors) von einer anderen Festplatte.
Mehrere (3-6) der Silberplatten von einer Festplatte
Ein zweiter kleiner Motor (DC gebürstetem OK)
Gummiband oder (vorzugsweise) Gürtel um den BLDC mit einem anderen Motor drehen
Elektronische Breadboard
feste Kerndraht 22 AWG Steckbrett für Verbindungen

Ein Arduino Duemilanove Mikrocontroller
Drei 120 k Ohm-Widerstände
sechs ~ 400 Ohm-Widerstände
Lineare oder rotatorische Potentiometers 100 k ohm

ST Microelectronics L6234 Drehstrommotor-Treiber-IC
Zwei 100 uF Kondensatoren
Eine 10-nF-Kondensator
Eine 220-nF-Kondensator
One 1 uF Kondensator
One 100 uF Kondensator
Drei recifier Dioden
eine 2,5-A-Sicherung
einem Sicherungshalter

3 Honeywell SS411A Bipolar Hall-Effekt Digital-Positionssensoren
Drei 1 K Widerstände

12 V Hobby große Bleibatterie

Schritt 3: Das Verständnis BLDC Steuer

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren
Wenn Sie vorhaben, dieses Projekt zu tun, empfehle ich, dass Sie die Zeit, um gründlich zu verstehen, wie ein BLDC arbeitet und kontrolliert zu verbringen. Es gibt Unmengen von Referenzen auf unserer Internetseite (siehe unten für einige Empfehlungen). Ich tue jedoch enthalten einige Diagramme und Tabellen von meinem Projekt, das Sie in Ihrem besseren Verständnis sollten.

Hier ist eine Liste der Konzepte, die ich denke, sind die für das Verständnis dieses Projekt wichtig:

MOSFET-Transistor
3-Phasen-Halbbrücken-
6-Schritt-Kommutierung einer 3-Phasen-Motor
Pulsweitenmodulation (PWM)
Hall-Effekt Digital-Positionssensoren

Allgemeine Hinweise

Brushless DC Motor Fundamentals von Microchip

AVR443: Sensorbasierte Steuerung von dreiphasigen bürstenlosen Gleichstrommotor von ATMEL

Brushless DC Motor Control Made Easy von Microchip

3-Phasen-BLDC Motor Control mit Hall-Sensoren von Freescale

Ein schönes Video von einem gespülten Festplatte Motor, aber der Autor scheint sich der Motor als Schrittmotor ausgeführt wird, nicht als BLDC

Weitere spezifische Angaben

Web Seite auf der L6234 Motor Driver IC, einschließlich Datenblatt, Applikationsschrift, und Kaufinformationen.
kostenlose Proben http://www.st.com/stonline/domains/buy/samples/index.htm

Entwurf eines PM bürstenlosen Motors für Hybrid Elektrische Fahrzeug-Lösungen . Dies ist die einzige Papier Ich habe gefunden, daß die Kommutierungsfolge zum regenerativen Bremsen beschreibt.

Dieses Papier, regeneratives Bremsen in einem Elektrofahrzeug war nützlich und ich lieh mir ein paar Zahlen aus, aber ich denke, dass es nicht richtig beschreibt, wie die Regeneration funktioniert.

Schritt 4: Der Motor

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Alle 7 Artikel anzeigen
Ich habe dieses Projekt mit einem geretteten Plattenantriebsmotor, weil es leicht zu bekommen, und ich die Idee, das Erlernen der Seile von BLDC-Steuerung mit einem kleinen, Niederspannungsmotor, der keine Fragen der Sicherheit stellen sich gern. Auch die Konfiguration der Magnete für die Hall-Sensoren wurde einfach durch die Verwendung eines Magnetrings (Rotor) von einer zweiten dieser Motoren (siehe Schritt 4).

Wenn Sie nicht wollen, um den ganzen Aufwand für die Installation und Kalibrierung der Hall-Sensoren gehen (Schritte 5-7), verstehe ich, dass zumindest einige CD / DVD Antriebsmotoren verfügen über integrierte Hallsensoren.

Um etwas Rotationsträgheit auf die Motoren liefern und ihnen ein bisschen eine Last, gegen, habe ich 5 Festplatte Festplatten auf dem Motor, leicht miteinander verklebt und mit dem Motor mit ein wenig Sekundenkleber zu arbeiten, um (das machte das Schwungrad in meiner ursprünglichen Projekt).

Wenn Sie vorhaben, den Motor von einer Festplatte zu entfernen sind, werden Sie eine T8-Torx-Schraubendreher sowie die interne brauchen, um das Gehäuse schrauben (oft gibt es ein oder zwei Schrauben in der Mitte, die hinter einem Klebeetikett versteckt sind) Schrauben, die den Motor an Ort und Stelle zu halten. Sie müssen auch den Kopf Leser (ein Schwingspulenstellglied) zu entfernen, so dass Sie die Speicherplatten entfernen, um an den Motor zu bekommen.

Außerdem werden Sie eine zweite, identische Festantriebsmotor von dem es den Rotor (die einen Ring von Magneten im Inneren hat) zu entfernen müssen. Um den Motor auseinander, packte ich den Rotor (oben) des Motors in einem Schraubstock und dann auf dem Stator (unten) mit zwei Schraubendreher um 180 ° versetzt aufgebrochen. Es ist nicht so leicht zu greifen ein Motor in einem Schraubstock fest genug, ohne sich zu verformen ist. Sie können eine Reihe von Holz v-Blöcke für diesen Zweck zu bauen.

I gebohrt und bohrte ein Loch in der Magnetring auf einer Drehbank, so wäre es eng auf der Oberseite des Motors zu passen. Wenn Sie keinen Zugang zu einer Drehbank, können Sie den umgekehrten Rotor, um Ihren Motor mit Sekundenkleber fixieren.

Bild 2 und 3 zeigen den Innenraum der einen dieser Motoren, I auseinandergezogen. Im Inneren der oberen Hälfte gibt (der Rotor) sind 8-polig (Magnete, die in Kunststoffüberzug versehen sind). Auf der unteren Hälfte (der Stator) gibt es 12 Slots (Wicklungen). Jeder der drei Motorphasen mit 4 Löchern, die in Reihe geschaltet sind.

Einige HD Motoren haben drei Anschlüsse auf der Unterseite, einen für jede Phase, und eine Extra eine, der Mittenabgriff des Motors (in dem die drei Phasen erfüllen) ist. In diesem Projekt gibt es keine Notwendigkeit für die Mittelanzapfung, aber in sensorlose Steuerung kann es sich als nützlich erweisen (ich hoffe, eine instructable über sensorlose Steuerung eines Tages zu verfassen). Wenn Ihr Motor hat vier Kontakte, können Sie die Phasen mit einem Ohmmeter zu identifizieren. Der Widerstand betwee dem Mittelabgriff und eine Phase ist die Hälfte der Widerstand zwischen zwei beliebigen Phasen.

Die meisten Literatur über BLDC-Motoren betrifft diejenigen, mit trapezförmigen Gegen-EMK-Wellenformen, aber die Festplatte Motoren scheinen eine Gegen-EMK, die sinusförmig aussieht (siehe Foto unten). Soweit ich das beurteilen kann, es funktioniert gut, um einen sinusförmigen Motor mit einer Rechteckwelle PWM fahren, auch wenn es eine gewisse Abnahme der Effizienz sein.

Wie bei allen BLDC-Motoren, das ist eine durch einen Dreiphasen-Halbbrücken-Transistoren (siehe 2. Bild unten) angetrieben. Ich habe einen IC von ST Microelectronics (L6234) für die Brücke, die auch als Motortreiber bekannt ist. Die elektrischen Anschlüsse für die L6234 werden in Schritt 8 gezeigt, die dritte Foto unten zeigt eine schematische Darstellung der Motortreiber und die drei Motorphasen.

Um den Motorlauf im Uhrzeigersinn zu machen, würde die folgende Reihenfolge der Schalt erfolgen (erster Buchstabe ist der obere Transistor, der zweite ist die untere):

Stufe 1 2 3 4 5 6
Im Uhrzeigersinn: CB, AB, AC, BC, BA, CA
Gegen den Uhrzeigersinn: BC, BA, CA, CB, AB, AC

Das 6-Schritt-Sequenz dauert 360 "elektrische Grad", aber, für diese Motoren, nur 90 physikalische Grad. So geschieht die Sequenz viermal pro Motorumdrehung. Es scheint, dass diese beiden Sequenzen identisch sind, aber sie sind es nicht, da für jeden Schritt in der 6-Schritt-Sequenz, ist der Strom durch die Phasen in einer Richtung CW und in die entgegengesetzte Richtung CCW.

Dies können Sie für sich selbst sehen, indem eine Spannung von einer Batterie oder Netzteil an jeweils zwei Motorphasen. Wenn Sie Spannung anzulegen, wird der Motor ein wenig in eine Richtung drehen und dann aufhören. Wenn Sie könnten schnell die Spannung an den Phasen in einer der obigen Sequenzen ändern, würden Sie in der Lage, den Motor von Hand drehen. Die Transistoren und der Mikrocontroller tun all das Umschalten sehr schnell, wenn viele hundert Mal pro Sekunde der Motor mit hoher Drehzahl läuft.

Beachten Sie auch, dass, wenn Sie Spannung an zwei Phasen gelten, wird der Motor zu bewegen ein wenig und hält dann an. Dies ist, weil das Drehmoment auf Null geht. Sie können dies in der vierten Foto unten, der die Gegen-EMK von einem Paar von Motorphasen zeigt, zu sehen. Es ist eine Sinuswelle. Wenn die Welle kreuzt die x-Achse ist das Drehmoment von dieser Phase vorgesehen Null. In der sechsstufigen BLDC Kommutierung Sequenz, die nie passiert. Die Energie wird zu einem anderen Phasenkombination geschaltet ist, bevor das Drehmoment auf eine bestimmte Phase niedrig.

Schritt 5: Der Hallsensor Mechanischer Aufbau

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Größere BLDC-Motoren werden oft mit den Hall-Sensoren im Inneren des Motors gefertigt. Wenn Sie einen solchen Motor haben, dann können Sie diesen Schritt überspringen. Auch verstehe ich, dass zumindest einige CD / DVD Antriebsmotoren verfügen über integrierte Hallsensoren.

Drei Hall-Sensoren für die Positionserfassung verwendet werden, wie der Motor dreht, so dass die Kommutierung zum richtigen Zeitpunkt erfolgt. Ich habe meine HD Motor so schnell wie 9000 RPM (150 Hz) laufen. Da es are24 Kommutierungen pro Umdrehung, bei 9000 RPM die Kommutierungen treten alle 280 Mikrosekunden. Das Arduino Mikrocontroller arbeitet mit 16 MHz, so dass in jedem Taktzyklus beträgt 0,06 Mikrosekunden. Ich weiß nicht genau, wie viele Taktzyklen es braucht, um die Kommutierung durchführen, aber auch wenn es 100, das ist fünf Mikrosekunden pro Kommutierung.

Die HD-Motoren keinen Hall-Sensoren, so ist es notwendig, sie auf der Außenseite der Motorhalterung. Die Sensoren müssen in Bezug auf die Motordrehung fixiert und zu einer Reihe von Magnetpolen, die in Abstimmung mit der Drehung des Motors zu ändern ausgesetzt werden. Meine Lösung war, um den Magnetring aus einem identischen Motor nehmen und montieren sie, umgekehrt, auf der Oberseite des Motors gesteuert werden. I dann angebracht, die drei Hall-Sensoren nur oberhalb dieses Magnetring, genau 30 Grad voneinander auf der Motorachse (120 elektrische Grade in der Motordrehrichtung).

Meine Hall-Sensor Halterung besteht aus einer einfachen Stand von drei Aluminiumteile, die ich bearbeitet und drei Kunststoffteile auf einem Rapid-Prototyping-Maschine gemacht. Wenn Sie keinen Zugriff auf diese Tools, sollte es nicht allzu schwierig sein, einen anderen Weg, um die Stellung zu beziehen zu finden. Erstellen einer Halterung für die Hall-Sensoren wird schwieriger werden. Dies ist eine Möglichkeit, die funktionieren könnte:

1. Finden Sie einen entsprechend dimensionierten Kunststoffscheibe, an die Sie sorgfältig Epoxidharz Die Hall-Sensoren.
2. Drucken Sie eine Vorlage auf Papier, die einen Kreis mit dem gleichen Radius wie der Magnetring und drei Markierungen 15 Grad voneinander entfernt hat
3. Kleben Sie die Schablone auf die Festplatte und dann sorgfältig Epoxidharz Die Hall-Sensoren an Ort und Stelle mit Hilfe der Schablone als Führung.

Schritt 6: Hall-Sensorschaltungen

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren
Jetzt haben Sie die ordnungsgemäß auf dem Motor montiert Hall-Sensoren verfügen, schließen jeweils mit der unten gezeigten Schaltung und testen Sie sie mit einem DMM oder Oszilloskop zu gewährleisten, dass der Ausgang geht hoch und niedrig, wenn der Motor gedreht wird. Ich betreibe diese Sensoren bei 5 V, mit der 5V-Ausgang des Arduino.
Schritt 7: Die Kalibrierung der Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Die Hall-Sensoren sind digitale Geräte, die Ausgabe entweder hoch oder niedrig (1 oder 0), je nachdem ob sie spüren einen Süd- oder Nordpol. Aufgrund ihrer Anordnung um 15 Grad auseinander und die Magnete, die unter ihnen drehen, wechselnder Polarität alle 45 Grad, sind die drei Sensoren nie alle hoch oder niedrig gleichzeitig. Wenn der Motor sich dreht, ändert sich die Sensorausgabe in einem Sechs-Stufen-Muster, das in der folgenden Tabelle dargestellt ist. Die Sensoren sind mit der Bewegung des Motors derart, dass eine der drei Sensoren an den Positionen der Motorkommutierung ändert genau ausgerichtet werden. In diesem Fall sollte der ansteigenden Flanke des ersten Hallsensors (H1) mit dem Einschalten der Kombination von Phasen übereinstimmen C (hoch) und B (low). Dies entspricht mit Transistoren 3 und 5 eingeschaltet, in der Brückenschaltung.

Ich habe ein Oszilloskop, um die Sensoren mit den Magneten auszurichten. Ich musste drei Kanäle des Anwendungsbereichs verwenden, um dies zu tun. Ich drehte den Motor über einen Riemen mit einem zweiten Motor verbunden ist, und maß die EMK zwischen zwei Phasenkombinationen (A und B, A und C), die die beiden sinusartigen Wellen auf dem Foto unten sind. Das Signal von einem Hall-Sensor 2 wurde dann auf Kanal 3 über den Umfang gesehen. Der Hall-Sensor Halterung eingeschaltet wurde, bis die steigende Flanke des Hall-Sensor wurde genau mit dem Punkt, an dem die Kommutierung sollte (siehe Foto unten) nehmen ausgerichtet. Ich erkenne jetzt, dass dieselbe Kalibrierung kann mit nur zwei Kanäle erfolgen. Wenn die BEMF der Phase BC Kombination verwendet wurden, wird die steigende Flanke des H2 würde mit dem Nulldurchgang der BC-Kurve übereinstimmt.

Der Grund, dass die Kommutierung sollte hier entstehen wird, das Motordrehmoment so hoch wie möglich halten zu allen Zeiten. Die EMK ist proportional zum Drehmoment und Sie werden feststellen, dass jede Kommutierung erfolgt, wenn der BEMF kreuzt unter der Kurve der nächsten Phase. So das Istmoment aus der höchsten Teile jeder Phasenkombination.

Wenn Sie keinen Zugang zu einem Umfang, hier ist eine Idee, die ich für die Ausrichtung zu tun. Dies ist tatsächlich eine interessante Übung für alle, die ein Gefühl für die BLDC-Motor funktioniert. Wenn Sie Motorphasen A (positiv) und B (negative) eine Verbindung zu einem Netzteil und schalten Sie das Gerät, wird der Motor ein kleines bisschen zu drehen und dann aufhören. Wenn Sie bewegen Sie den Minuskabel an der Phase C und schalten Sie das Gerät, wird der Motor ein wenig weiter zu drehen und stoppt dann. Der nächste Teil der Sequenz wäre es, die positive führen zu B und so weiter schrittweise zu bewegen. Wenn Sie das tun stoppt der Motor stets in einem Punkt, wo das Drehmoment Null ist, die auf dem Graphen, um eine der Stellen, an denen die Graphen kreuzt die x-Achse entspricht. Feststellen, dass die Nullstelle der dritten Phasenkombination entspricht der Kommutierung Lage der ersten beiden Kombinationen. Daher ist der Null-Drehmoment-Position des BC-Kombination in dem Sie die steigende Flanke des H2 zu suchen. Markieren Sie diese Position mit einem feinen Marker oder einer scharfen Klinge, und dann unter Verwendung eines DMM, passen der Hall-Sensor montieren, bis der Ausgang des H2 geht hoch genau an dieser Marke. Selbst wenn Sie in dieser Kalibrierung sind etwas, sollte der Motor ziemlich gut zu funktionieren.

Schritt 8: Die Leistungselektronik

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Die drei Motorphasen wird Energie von der L6234 Drehstrommotor-Treiber zu erhalten. Ich habe festgestellt, dass es ein gutes Produkt, die den Test der Zeit gestanden hat sein. Arbeiten mit Leistungselektronik, gibt es viele Möglichkeiten, um versehentlich braten Ihre Komponenten, und mich nicht in der Elektroingenieur ich nicht immer genau verstehen, was vor sich geht. In meiner Schulprojekt haben wir auch unseren eigenen 3-Phasen-Halbbrücke aus 6 MOSFET Transistoren und sechs Dioden. Wir haben dies mit einem anderen Fahrer, der HIP4086 von Intersil, aber wir hatten jede Menge Probleme mit dieser Einrichtung - wir ausgebrannt eine Reihe von Transistoren und Chips.

Ich die L6234 (und damit den Motor) bei 12V.

Der L6234 hat eine ungewöhnliche Reihe von Eingaben, um die 6-Transistor Halbbrücke zu kontrollieren. Statt mit einem Eingang für jeden Transistor gibt es eine Eingangsfreigabe (EN) für jede der drei Phasen, und ein anderer Eingang (IN), die der Transistor in der Phase wählt ist (obere oder untere) gedreht wird. Zum Beispiel, um die Transistoren schalten 1 (oben) und 6 (niedriger) EN1 und EN3 beide hoch (EN2 gering zu halten, dass die Phase aus) und IN1 ist hoch und IN3 ist gering. Dies macht die Phasenkombination AC.

Obwohl die L6234 Anwendungshinweise deuten darauf hin, dass der PWM zur Steuerung der Motordrehzahl an die IN-Pins verwendet werden, beschloss ich, es auf die EN Stifte tun, weil, zu der Zeit, dachte ich, es "weird" sein würde, um die oberen und unteren Transistoren eines Phase abwechselnd eingeschaltet. In der Tat scheint es nichts falsch mit der niedrigen Transistoren aus zwei Phasen eingeschaltet werden, sofort, denn sie sind auf dem gleichen Potential, so dass kein Strom durch eine von ihnen geführt werden. Mit meinem Verfahren wird der High-Phase abwechselnd aktiviert und wird bei der PWM-Frequenz deaktiviert werden, während der Low-Phase auf der gesamten Kommutationsperiode gehalten.

Unten ist ein Diagramm der Motortreiber, auf die ich die Pin-Anschlüsse an das Arduino-Board aufgenommen. Ich habe auch eine 2,5-A-Sicherung zwischen dem positiven Batteriekabel und der Schaltung und einem 100 uF Kondensator zwischen Stromversorgung und Masse hinzufügen, um die Welligkeit der regenerative Strom zu reduzieren. Die Grafik ist recht klein, um zu sehen, so dass Sie in der Dokumentation für die L6234 für eine größere Version.

Schritt 9: Regeneratives Brems

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Da ich noch nicht viele Informationen über regenerative Bremsen mit einem 3-Phasen-Motor fand heraus dort, ich werde mein Verständnis, wie es funktioniert zu beschreiben. Beachten Sie, dass ich nicht bin ein Elektroingenieur, so dass alle Korrekturen an meiner Erklärung gebeten.

Beim Fahren, sendet das Steuersystem elektrischen Strom in den drei Motorphasen in einer solchen Weise, um das Drehmoment zu maximieren. In regeneratives Bremsen, das Steuersystem maximiert auch Drehmoment, aber diesmal ist es ein negatives Drehmoment, die der Motor veranlasst, zu verlangsamen, während zur gleichen Zeit sendet aktuelle zurück in die Batterie.

Das Verfahren zur regenerativen Brems ich kommt aus einem Papier von Oakridge National Laboratory, einem US Govt. Labor, das eine Menge Forschung auf Elektromotoren für Autos tut. Die folgenden Abbildungen sind von einem anderen Papier und zu veranschaulichen, wie es funktioniert (Ich glaube jedoch, dass die Erklärung in dieser zweiten Papier gegeben ist teilweise ungültig). Denken Sie daran, dass die Gegen-EMK-Spannung in den Motorphasen auf und ab geht, wie sich der Motor dreht. In dem Diagramm wird ein Moment in der Zeit gezeigt, wobei die BEMF ist hoch in Phase B und in Phase A Low In diesem Fall hat der Strom die Möglichkeit, von B nach A. fließenden

Was wesentlich für das regenerative Bremsen ist, dass der Low-Side-Transistor wird rasch zum Umschalten und aus (PWM-Schalt tausende Male pro Sekunde). Während der hohen Seite der Transistorschalter ist AUS; wenn der niedrige Transistor eingeschaltet ist, fließt der Strom wie in der ersten Abbildung. In der Terminologie der Leistungselektronik, die Schaltung wirkt wie ein Gerät namens ein Boost-Wandler und Energie in den Motorphasen abgespeichert (Wikipedia hat einen schönen Artikel erklären, wie ein Boost-Wandler works). Wenn der Low-Side-Transistor ausgeschaltet wird, wird diese Energie freigelassen, aber bei einer höheren Spannung und der Strom kurzzeitig durch die "Rücklauf" Dioden neben dem jedes Transistors und in die Batterie fließt. Die Dioden verhindert, daß Strom geht von der Batterie an den Motor. Unterdessen ist der Strom in dieser Richtung (entgegengesetzt von Motor) mit dem Ring von Magneten, die ein negatives Drehmoment, das den Motor verlangsamt erstellen. Der Low-Side-Transistors ist mit PWM eingeschaltet und die Pflicht des PWM steuert die Menge der Bremsen.

Beim Autofahren, die Kommutierung der Motorschalter von einer Phase in die nächste Kombination im richtigen Moment, um das Drehmoment so hoch wie möglich zu halten. Die Umschaltung Nutzbremsung, daß ein bestimmtes Muster von Schalt hält den Motor Erzeugen der höchstmöglichen Menge an negativen Drehmoments sehr ähnlich.

Wenn du das Video in Schritt 1 zu sehen sehen Sie, dass die regenerative Brems Werke, aber es bedeutet nicht, dass alles gut funktioniert. Ich denke, der Hauptgrund ist, dass die Festplatte Motor Ich benutze eine sehr geringe Drehmomentmotor, so dass es nicht erzeugen viel BEMF außer bei höchsten Geschwindigkeiten. Bei kleineren Drehzahlen gibt es sehr wenig, wenn überhaupt, ein regeneratives Bremsen. Außerdem arbeitet mein System mit einer relativ niedrigen Spannung (12 V) und, da jeder Weg durch eine Rücklaufdiode fällt die Spannung von ein paar Volt, das reduziert auch die Effizienz eine Menge. Ich verwende gewöhnliche Gleichrichterdioden und wenn ich verwendet einige spezielle Dioden mit einer geringeren Spannungsabfall ich könnte eine bessere Leistung zu erhalten.

Schritt 10: Verbindungen in die Arduino

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

Unten ist eine Liste der Ein- und Ausgänge auf dem Arduino. Ein Diagramm und eine Fotografie meiner Platten sind ebenfalls enthalten.

2- Halle 1 Digitaleingang - Auch 120 K Widerstand gegen GND
3 -Hall 2 Digitaleingang - Auch 120 K Widerstand gegen GND
4 -Hall 3 Digitaleingang - Auch 120 K Widerstand gegen GND

5 - IN 1 digitaler Ausgang in Serie mit 400-Ohm-Widerstand
6 - IN 2 Digitalausgang in Reihe mit 400 Ohm Widerstand
7 - IN 3 digitalen Ausgang in Serie mit 400 Ohm Widerstand

9 - DE 1 digitaler Ausgang in Serie mit 400 Ohm Widerstand
10 - DE 2 Digitalausgang in Serie mit 400-Ohm-Widerstand
11 - DE 3 Digitalausgang in Serie mit 400-Ohm-Widerstand

100 k-Ohm-Potentiometer auf + 5V angeschlossen ist und an den Enden und analoge pin 0 in der Mitte GND. Dieses Potentiometer wird benutzt, um die Motordrehzahl und die Höhe der Brems steuern.

+ 5V-Strom wird auch verwendet, um die Hall-Sensoren ausgeführt (siehe Schritt 5).

Schritt 11: Control Software für die Arduino

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren
Im Folgenden finden Sie das gesamte Programm, das ich für die Ardjuino schrieb, mit Anmerkungen enthalten:
/ *
* BLDC_congroller 3.1.1
* Von David Glaser
*
* Die 3.x Reihe von Programmen für die ST L6234 3-Phasen-Motor-Treiber-IC
*
* Führt einen Plattenantriebsmotor im Uhrzeigersinn
* Mit regenerativen Brems
* Motordrehzahl und das Bremsen wird durch einen einzigen Potentiometer geregelt
* Motorposition ist mit drei Hallsensoren ermittelt

* Die Arduino empfängt Ausgaben von 3 Hall-Sensoren (Pins 2,3,4)
* Und wandelt deren Kombination zu 6 verschiedene Kommutierungsschritte
* PWM-Ausgänge auf den Pins 9,10,11, bei 32 kHz (EN 1,2,3, die jeweils
* 3 DO auf den Pins 5,6,7 (1,2,3)
* Analog in 0 ist mit einem Potentiometer verbunden, um das PWM-Tastverhältnis und Veränderung Veränderung
* Zwischen Autofahren und regeneratives Bremsen.
* 0-499: Brems
* 500-523: Schub
* 524-1023: Autofahren
* Es gibt viele Zeilen auskommentiert, die für die Fehlersuche genutzt wurden
* Drucken verschiedener Werte an die serielle Verbindung.
* /

int HallState1; // Variablen für die drei Hall-Sensoren (3,2,1)
int HallState2;
int HallState3;
int HallVal = 1; // Binären Wert aller 3 Hall-Sensoren

int MSPEED = 0; // Geschwindigkeitsstufe des Motors
int bSpeed ​​= 0; // Bremsniveau
int Drossel = 0; // Diese Variable mit analogen in verwendet, um die Position der Drosselklappe Potentiometer messen

Leere setup () {
pinMode (2, INPUT); // Halle 1
pinMode (3, Eingang); // Halle 2
pinMode (4, Eingang); // Halle 3

// Ausgabe für den L6234 Motor Driver
pinMode (5, Ausgang); // IN 1
pinMode (6, Ausgang); // IN 2
pinMode (7, Ausgang); // IN 3
pinMode (9, OUTPUT); // EN 1
pinMode (10, OUTPUT); // EN 2
pinMode (11, OUTPUT); // EN 3

//Serial.begin(9600); // Kommentieren Sie diese Zeile, wenn Sie die serielle Verbindung verwenden
// Auch uncomment Serial.flush Befehl am Ende des Programms.

/ * Set PWM-Frequenz an den Stiften 9,10, und 11
// Dieses Stück Code kommt von
http://usethearduino.blogspot.com/2008/11/changing-pwm-frequency-on-arduino.html
* /
// Setze PWM für Stifte 9,10 bis 32 kHz
// Erste klar alle drei Vorteiler Bits:
int prescalerVal = 0x07; // Erzeuge eine Variable namens prescalerVal und stellen Sie es gleich der binären Zahl "00000111" Nummer "00000111" Nummer "00000111"
TCCR1B & = ~ prescalerVal; // Und der Wert in TCCR0B mit binären Zahl "11111000"

// Jetzt legen Sie die entsprechenden Bits Vorteiler:
int prescalerVal2 = 1; // Setze prescalerVal gleich binäre Zahl "00000001"
TCCR1B | = prescalerVal2; // Oder der Wert in TCCR0B mit binären Zahl "00000001"

// Setze PWM für Stifte 3,11 bis 32 kHz (Nur Stift 11 ist in diesem Programm verwendet)
// Erste klar alle drei Vorteiler Bits:
TCCR2B & = ~ prescalerVal; // Und der Wert in TCCR0B mit binären Zahl "11111000"

// Jetzt legen Sie die entsprechenden Bits Vorteiler:

TCCR2B | = prescalerVal2; // Oder der Wert in TCCR0B mit binären Zahl "00000001" // Erste klare allen drei Vorteiler Bits:

}
// Hauptschleife des PRGROM
Leere Schleife () {

// Zeit = millis ();
// Gibt Zeit seit Programmstart
//Serial.println(time);
//Serial.print("\n ");

Drossel = analogRead (0); // Wert des Drosselklappenpotentiometer
MSPEED = map (Drossel, 512, 1023, 0, 255); // Autofahren auf der oberen Hälfte des Poti zugeordnet
bSpeed ​​= map (Drossel, 0, 511, 255, 0); // Regeneratives Bremsen auf unteren Hälfte Topf
// MSPEED = 100; // Für das Debuggen verwendet

HallState1 = digitalRead (2); // Eingangswert von Halle 1 zu lesen
HallState2 = digitalRead (3); // Eingangswert von Halle 2 zu lesen
HallState3 = digitalRead (4); // Eingangswert von Halle 3 zu lesen
// Digital (8, HallState1); // LEDs eingeschaltet, wenn entsprechender Sensor ist hoch - die ursprünglich für die Fehlersuche verwendet
// Digital (9, HallState2);
// Digital (10, HallState3);

HallVal = (HallState1) + (2 * HallState2) + (4 * HallState3); // Berechnet den binären Wert der 3 Hall-Sensoren

/*Serial.print("H 1: "); // Für das Debuggen verwendet
Serial.println (HallState1);
Serial.print ("H 2");
Serial.println (HallState2);
Serial.print ("H 3");
Serial.println (HallState3);
Serial.println ("");
* /

//Serial.println(mSpeed);
//Serial.println(HallVal);
//Serial.print("\n ");

// Monitor-Transistorausgänge
// Verzögerung (1000);
/ * T1 = digitalRead (2);
// T1 = ~ T1;
T2 = digitalRead (4);
// T2 = ~ T2;
T3 = digitalRead (5);
// T3 = ~ T3;
Serial.print (T1);
Serial.print ("\ t");
Serial.print (T2);
Serial.print ("\ t");
Serial.print (T3);
Serial.print ("\ n");
Serial.print ("\ n");
Serial.print (digitalRead (3));
Serial.print ("\ t");
Serial.print (digitalRead (9));
Serial.print ("\ t");
Serial.println (digitalRead (10));
Serial.print ("\ n");
Serial.print ("\ n");
// Verzögerung (500);
* /

// Kommutierung für Motoring
// Jeder Binärzahl hat ein Gehäuse, das verschiedene Transistoren entspricht dem Einschalten
// Bit Math wird verwendet, um die Werte der Ausgabe ändern
// Für Anleitung, bitmath mit dem Arduino: http://www.arduino.cc/playground/Code/BitMath
// PORTD enthält die Ausgänge für die IN-Pins auf der L6234 Treiber
// Die bestimmen, ob der obere oder der untere Transistor jeder Phase verwendet wird
// Die Ausgaben für die EN Stifte werden von der Arduino Befehl analogWrite gesteuert, die
// Setzt die Leistung der PWM (0 = AUS, 255 = ON oder Drossel Wert, der durch das Potentiometer gesteuert wird).

if (Drossel> 511) {
Schalter (HallVal)
{
Fall 3:
// PORTD = B011xxx00; // Gewünschte Ausgangs für Stifte 0-7 xxx bezieht sich auf die Hall-Eingänge, die nicht geändert werden sollten
PORTD & = B00011111;
PORTD | = B01100000; //

analogWrite (9, MSPEED); // PWM auf Phase A (High-Side-Transistors)
analogWrite (10,0); // Phase B aus (Pflicht = 0)
analogWrite (11255); // Phase C auf - Pflicht = 100% (Low-Side-Transistors)
Unterbrechung;
Fall 1:
// PORTD = B001xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111; //
PORTD | = B00100000; //

analogWrite (9, MSPEED); // PWM auf Phase A (High-Side-Transistors)
analogWrite (10255); // Phase B auf (Low-Side-Transistors)
analogWrite (11,0); // Phase B aus (Pflicht = 0)
Unterbrechung;
Fall 5:
// PORTD = B101xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111; //
PORTD | = B10100000;

analogWrite (9,0);
analogWrite (10255);
analogWrite (11, MSPEED);
Unterbrechung;
Fall 4:
// PORTD = B100xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111;
PORTD | = B10000000; //

analogWrite (9255);
analogWrite (10,0);
analogWrite (11, MSPEED);
Unterbrechung;
Fall 6:
// PORTD = B110xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111;
PORTD = B11000000; //

analogWrite (9255);
analogWrite (10, MSPEED);
analogWrite (11,0);
Unterbrechung;
Fall 2:
// PORTD = B010xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111;
PORTD | = B01000000; //

analogWrite (9,0);
analogWrite (10, MSPEED);
analogWrite (11255);
Unterbrechung;
}
}

// Kommutierung für Regenerative Brems
// PORTD (Ausgänge für IN-Pins auf L6234) Pins sind immer niedrig, so dass nur die
// Unteren Transistoren auf jeder Phase verwendet werden,
// Oberen Transistoren sind immer während regen. Bremsen.
else {
// PORTD = B000xxx00; // Gewünschte Ausgangs für Stifte 0-7
PORTD & = B00011111;
PORTD | = B00000000; //
Schalter (HallVal)
{
Fall 3:
analogWrite (9, bSpeed);
// AnalogWrite (9,0);
analogWrite (10,0);
analogWrite (11,0);
Unterbrechung;
case 1:
analogWrite(9,bSpeed);
analogWrite(10,0);
analogWrite(11,0);
Unterbrechung;
case 5:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
Unterbrechung;
case 4:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
Unterbrechung;
case 6:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
Unterbrechung;
case 2:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
Unterbrechung;
}
}
//time = millis();
//prints time since program started
//Serial.println(time);
//Serial.print("\n");
//Serial.flush(); //uncomment this if you will use serial port for debugging
}

Step 12: An Alternate Hardware-Based Approach to Commutation Logic

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

BLDC Motor Control mit Arduino, geborgen HD Motor und Hall-Sensoren

It has occurred to me that the operations performed by the Arduino in this project are so simple that it almost seems like a waste to use a microprocessor for this task. In fact, the L6234 application notes recommend a simple programmable logic gate array (GAL16V8 made by Lattice Semiconductor) to do this job. I don't have any familiarity with programming this type of device, but the IC costs only € 2.39 at newark.com, and other similar ICs are also very inexpensive.

Another option is to piece together discreet logic gates. I figured out some relatively simple logic sequences that should work to drive the L6234 IC from the output of the three hall sensors. Das
diagram for phase A is shown below and also the truth tables for all three phases (In order to make the logic circuit for phases B and C the "not" gate must be switched to the other side of the "or" . The problem with this approach is there are nearly 20 connections per phase, so it would be quite a bit of work to put it together. Better would be to program this into a programmable logic gate.