Im Modellbau, besonders bei Quadcoptern haben sich die bürstenlosen Gleichstrommotoren (brushless DC, BLDC) durchgesetzt, da sie verschleissfrei sind und höhere Drehzahlen erreichen. Der Aufbau ist so, dass der Rotor aus Permanentmagneten aufgebaut ist und der Stator aus Spuelenmagneten. Hier wird nochmal mit aussenliegenden Magneten (Aussenläufer) oder innenliegenden (Innenläufer) unterschieden. Der Rotor muss somit nicht über Bürsten an der Welle mit Strom versorgt werden. Die Rotation kommt dabei über ein geschicktes Umschalten der Spulenmagnete zustande.
Und genau hier liegt die Komplexität. Das Umschalten muss über eine Steuerung erledigt werden. Deswegen muss beim Kauf eines BLDC Motors auch ein Controller (ESC, electronic speed controller) mit angeschlossen werden. Der Controller erledigt das schnelle Umschalten der Spulen und damit auch die Geschwindigkeit.
Die meisten BLDC Motoren haben drei Anschlüsse, die je nach gewünschter Ausrichtung des Magneten geschaltet werden. Fliesst zum Beispiel ein Strom von Anschluss U nach W, so fliest der Strom durch Spule L1 in einer und durch L2 in einer anderen Richtung und bilden somit zwei unterschiedliche Pole. Je nach Stromrichtung wird zwischen den beiden Spulen sich der Nord bzw Südpol des Magnetens dazwischen ausrichten. Es reicht also nicht aus einfach Gleichstrom anzulegen und der Motor dreht sich. Es müssen also die Verbindungen U,V,W entprechend durchgeschaltet werden, dass eine Rotation statffinden kann. Für eine bessere Rotation werden immer zwei Leitungen von U,V und W an Plus und eine an Minus oder umgekehrt gelegt. So sind immer alle drei Spulen aktiv. Eine Rotation kann somit in sechs Phasen aufgeteilt werden
- U+ V- W-
- U+ V+ W-
- U- V+ W-
- U- V+ W+
- U- V- W+
- U+ V- W+
BLDC Motoren haben eine Kenngrösse kV. Diese bedeutet Umdrehungen pro Volt. Hat zum Beispiel ein Motor 1000 kV und wird 10V angelegt so hat dieser 10000 U/min ( = 1000 kV * 10V). Die Angabe Turns gibt die Anzahl der Wicklungen der Spulenmagnete an. Je größer der Turn, desto größer das Drehmoment und kleiner die Drezahl und der Stromverbrauch. Die Angabe bei den Motorreglern zB 10A entspricht der Stromleistung.
Ein Lithium-Polymer Akku (LiPo) besteht aus mehrere Zellen. Dabei hat jede Zelle 3,7V. Am Akku selber steht die Anzahl der Zellen mit S (seriel) gekennzeichnet. Somit bdeutet 1S = 3,7V, 2S = 7,4V usw. Selten gibt es die Zusatzangabe P (parallel). Diese erhöht aber nicht die Gesamtspannung.
Eine weitere Angabe ist die Kapazität C. Diese gibt an, wieviel Strom aus dem Akku gezogen werden kann. Hat zB ein Akku eine Ladung (Kapazität) von 10Ah und 10C, so kann dieser mit 100A ( = 10Ah * 10C) entladen werden. Dies ist wichtig, falls man starke Motoren verwendet und der Akku nicht kaputt gehen soll.
Um die richtige Kombination aus Motor, Propeller, Motorregler (ESC) und Akku zu bestimmen schaut man erst einmal in die Spezifikation des Motors nach. Dort ist meist angebeben, bei welchen Schub mit welchem Propeller, bei welcher Spannung wieviel Strom gezogen wird. Daraus ergibt sich dann die Angaben für den Akku die Spannung und daraus die Zellenzahl S und Leistung A. Die Leistung A kann aus der Kapazität C und Ladung Ah berechnet werden (C * Ah). Der ESC muss dann auch die Leistung A unterstützen.
Will man nun einen BLDC Motor mit einem Controller regeln, so braucht man Leistunsgbausteine, die die hohen Ströme verarbeiten können. Diese laufen unter dem Begriff H-Brücke oder Vierquadrantensteller. Für die folgende Schaltung hab ich einen L293D Baustein verwendet, der vier H-Brücken enthält. Zum Schalten von hohen Strömen befinden sich darin MOSFET Bausteine.
Für die Ansteuerung der drei Phasen werden lediglich drei von vier Outputs verwendet. Über die Input Leitung werden die Output Leitungen gesteuert. Dazu müssen die zwei Enable Leitung auf high liegen. Am Arduino werden zum Ansteuern drie PWM fähige digitale Outputleitungen verwendet. PWM deshalb, weil sich eine reine digitale Ansteuerung als nicht ideal erweist.
Ein simples Program für die Steuerung nach dem obigen sechs Phasen sieht dann für die Schaltung folgendermassen aus:
// PWM Pins. int pinU = 9; int pinV = 10; int pinW = 11; int wait = 10; char inChar; void setup() { pinMode(pinU, OUTPUT); pinMode(pinV, OUTPUT); pinMode(pinW, OUTPUT); digitalWrite(pinU, LOW); digitalWrite(pinV, LOW); digitalWrite(pinW, LOW); Serial.begin(9600); } void loop() { if (Serial.available()) { inChar = (char)Serial.read(); if (inChar == '-') { wait -= 1; } else { wait += 1; } Serial.println(wait); } //Phase 1 digitalWrite(pinU, 1); digitalWrite(pinV, 0); digitalWrite(pinW, 0); delay(wait); //Phase 2 digitalWrite(pinU, 1); digitalWrite(pinV, 1); digitalWrite(pinW, 0); delay(wait); //Phase 3 digitalWrite(pinU, 0); digitalWrite(pinV, 1); digitalWrite(pinW, 0); delay(wait); //Phase 4 digitalWrite(pinU, 0); digitalWrite(pinV, 1); digitalWrite(pinW, 1); delay(wait); //Phase 5 digitalWrite(pinU, 0); digitalWrite(pinV, 0); digitalWrite(pinW, 1); delay(wait); //Phase 6 digitalWrite(pinU, 1); digitalWrite(pinV, 0); digitalWrite(pinW, 1); delay(wait); }
Der Motor dreht sich aber leider erweist sich eine reine digitale Ansteuerung als zu hakelig. Um zwischen den Magnetrichtungen sanfter übergehen zu können wären drei um 120° versetzte Sinuskurven besser.
Links:
https://de.wikipedia.org/wiki/Vierquadrantensteller
https://github.com/sky4walk/documents/raw/master/ArduinoBLDC-Controller.fzz