PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brushless Motoren



Pumba
24.07.2007, 12:03
Hallo zusamen,

ich habe zwar schon oft hier gelesen, aber heute schreib ich auch mal. O:)
Seit kurzem interessiere ich mich für brushless Motoren. Ist ja schon interessant, was für eine Leistung aus den kleinen Dingern zu holen ist.
Die (Traum)anwendung soll der Antrieb eines Fahrzeugs sein.
Das Thema war hier schonmal vor ein paar Wochen. Aber meine Ansprüche sind da etwas geringer. Ich denke mit 5-10kW Leistung komme ich hin.
Aber nun zu den Motoren:
In den Herstellerdaten bestimmt die Spannung die Drehzahl. Liegt diese Spannung über die gesamten 120Grad an der jeweiligen Spule an? Also ein Rechtecksignal? Oder reicht auch ein (oder mehrere) kurzer Puls, so das der Effektivwert für die 120Grad der jeweiligen Spannung entspricht? Oder sollte es gar ein Sinus sein?

Die meisten Daten fangen bei höheren Drehzahlen an. Was ist beim Anlaufen? Hat der Motor da auch volles Drehmoment?
Wie genau muß ich die Ankerposition wissen, um die jeweiligen Sulen zu beschalten? Reichen ein paar Grad aus? Ich frage weil von optischen Sensoren abgeraten wird. Es währe doch einfach über eine Lochscheibe und eine (oder zwei) Gabellichtschranke die Position auf 5 Grad zu erfassen.

Währe nett wenn Ihr mir bei diesen Grundlegenden Sache helfen könntet.

Gruss,

Achim

MeckPommER
24.07.2007, 12:17
Es gibt sehr gute, fertige Brushless-Regler für die BL-Motoren. Die Regelung solcher Motoren ist eine echte Wissenschaft für sich.

Ich würde aber mal aus Neugierde gerne wissen, was du anzutreiben gedenkst mit 5-10kW und woher die Energie kommen soll?

Pumba
24.07.2007, 14:38
Es gibt sehr gute, fertige Brushless-Regler für die BL-Motoren. Die Regelung solcher Motoren ist eine echte Wissenschaft für sich.

Ich würde aber mal aus Neugierde gerne wissen, was du anzutreiben gedenkst mit 5-10kW und woher die Energie kommen soll?

Ein Fahrzeug. Gebaut ähnlich einem Quad oder KraKa (Bundeswehr). Die Energie soll aus 4 oder 5 Stück 12V-100Ah-Bleiakkus kommen. in der Annahme, das ich nicht nur Vollast fahre, könnte ich dann eine Stunde fast lautlos durch mein Jagdrevier "tuckern".

Ein weiterer Gedanke ist, das ich beim Bremsen die Energie wieder in die Akkus laden kann. Da es sich bei Brushless-Motoren ja eigentlich um Syncronmotoren handelt, müssten sie ja auch als Generator zu betreiben sein.

Hessibaby
24.07.2007, 14:48
BLDC werden mit einer Treppenspannung bestromt. Für die Rotorpositionsabfrage werden üblicherweise Hall-Sensoren eingesetzt.
Schau mal auf der Seite www.teslamotors.com vorbei. Die Motoren sind von Samsung entwickelt. Auf der Semiconductorsite von Samsung findest Du auch komplette Treiberbrücken.
Gruß

sigo
26.07.2007, 14:19
Hi, eine einfache Blockkommutierung reicht aus. Wenn du die Antriebe über einen schnellen PWM - Drehzalregler (mit Inkrementalgeber am Motor) betreibst, kann sich die PWM ständig an den unterschiedlichen Strombedarf der Spulen, je nach Drehwinkel anpassen.

Eine Rückspeisung ist recht einfach machbar und auch unbedingt zum Schutz der Endstufe erforderlich, das ist bei einer Brückenendstufe mit Freilaufdioden aber eh schon der Fall. Spezielle Zusatzteile brauchst du dazu nicht.

Sigo

PasstScho
26.07.2007, 15:33
Hallo,
Ich finde, bei der Leistung solltest du deinen Antrieb etwas optimieren.
Ideal (aber aufwendig) wäre Field Oriented Control.
Einfacher aber etwas schlechter wäre eine Sinus-Regelung.

Letzteres könnte man wahrscheinlich auch mit einem AVR realisieren.

MfG Alex

Pumba
26.07.2007, 16:33
Also, wenn ich das jetzt richtig verstanden habe:
Ich gebe Spule 1 ein PWM-Signal. Ist der Motor langsamer wie erwünscht, mache ich die Pulse länger. Im Prinzip aber über die gesammten 120 Grad gleichbleibend lang.
Wenn ich mit Spule 1 fertig bin, also nach 120 Grad, mache ich das selbe mit Spule 2, usw. Oder sollen die Ansteuerungen überlappen?

Die Rückspeisung speist mir wieder Strom in die Batterie? Die müßte ich mir dann regelbar bauen. Je nach dem, wie stark ich bremse.

sigo
26.07.2007, 19:01
Pumba, mit einem Drehzahlregler auf Inkrementalgeberbasis meine ich einen schnellen Drehzahlregler. Dem gibtst du dann die Solldrehzahl vor, und der Regler sorgt dafür, dass der Motor die Drehzahl auch dreht. Dabei passt der Regler die PWM an.

Der Regler soll deshalb schnell sein, weil er dann auch innerhalb der 120° (die übrigens nur 60° sind, weil die BLDCs meist so gebaut sind, dass man in einer Umdrehung 6 Kommutierungszustände hat) die Drehzahl ausregelt. Wenn der Motor jetzt beschleunigt oder zu schwach wird (je nach Winkel des Rotors zum Stator) passt sich die PWM auch dann automatisch so an, dass die gewünschte Drehzahl gefahren wird. Auch Lastschwankungen werden so natürlich ausgeregelt.

Damit der Regler das kann bräuchtest du in diesem Fall einen Inkrementalgeber mit mind. 100, besser 500 Impulsen /U. die dann noch von der Auswertung vervierfacht werden.

Für eine langsame Drehzahlregelung reichen auch die Hallimpulse. Nur kann man damit nicht innerhalb einer Kommutierung regeln..

Sigo

Gruß Sigo

Pumba
28.08.2007, 17:09
Erstmal danke für eure Antworten.
Habe mich probiert nochmal ein bisschen schlau zu machen. Ganz so einfach scheint das mit den Reglern doch nicht zu sein. Mit fast keinen Englischkenntnissen wirds noch schlimmer.
Aber trotzdem will ich mich (vorerst) mal an der Planung eines Reglers versuchen.

Gesteuert werden sollen sie durch einen PIC. Der sollte wohl schnell genug sein.

Wieviel PWM-Pulse pro "Halbwelle" sind denn empfehlenswert? Von meinem jetzigen Verständnis würde ich sagen, das ich mit 10 Impulsen schon was erreichen kann. Wenn es zu viele sind würde ich zuviel Energie beim Schalten der FET´s verbraten. Außerdem kommen irgendwann die Induktivitäten der Spulen zum Tragen.

Wie werden die FET´s gesteuert? Pro Brücke habe ich zwei in Reihe zwischen Plus und Minus. Wenn ich den "Plus-FET" takte, dann kann ich doch die"Minus-FET´s" der beiden anderen Spulen dauernd leitend lassen, oder? Wenn ich es umgekehrt mache würde ich allerdings nur den halben Strom schalten. Hätte vielleicht auch was.

Zur Positionsbestimmung des Rotors dachte ich an eine Gabellichtschranke mit einer Strichscheibe. Ich stoppe mit dem PIC die Zeit zwischen zwei Strichen und weiß dadurch, ob der Motor im Soll-Drehzahlbereich liegt. Ansonsten wird er durch leichte Pulsänderung nachgeregelt.

Irgendwie soll es auch ohne Sensoren gehen. Das hab ich aber noch nicht ganz verstanden.

avion23
28.08.2007, 20:15
Hallo Puma,
mit null Englischkenntnissen wird das natürlich schwer :) Du solltest dir schon die Fachwörter aneignen.

Unter http://aquaticus.info/bldc_controller gibt's einen schönen Schaltplan. Hier http://mikrocontroller.cco-ev.de/ucwiki/BrushlessCtrl findest du eine bessere Zero Cross Detection. Mit den beiden Schaltplänen kannst du hoffentlich etwas anfangen :)

Du kannst die PWM erstmal weglassen, also die Spannung hart durchschalten. Das ist zwar nicht optimal, aber es sollte funktionieren. Die PWM kannst du später noch dazu schalten.

So ein Brushless regler ist eigentlich ein Frequenzumrichter mit Rückkopplung. Es wird ein Drehfeld erzeugt. Die drei Phasen sind 60° bzw. 120° zueinander verschoben und bestromen jeweils eine Wicklung. Dann befindet sich immer nur zwischen zwei Wicklungen Spannung, die dritte hängt frei im Raum.
Das ist der Trick: Die dritte frei hängende befindet sich immer noch im Motor, der sich dreht. Er wirkt also auch als Generator. In der freien Wicklung wird ein Strom induziert. Dieser Strom bzw. die Spannung kann man messen, genau das wird in der Zero Cross Detection gemacht. Dazu ist noch ein Tiefpass geschaltet, damit die PWM Pulse herausgefiltert werden können.
Über diese Zero Cross Detection (Nullpunkterkennung) kann dann die Position des Rotors mit leichter Verzögerung durch den Tiefpass erkannt werden. Danach richtet man das Drehfeld, lässt es entweder schneller oder langsamer werden. Und damit kann man dann die Drehzahl steuern :)

Was ich noch nicht ganz verstanden habe, aber trotzdem mal versuche: Die Geschwindigkeitsänderung. An sich versucht der Rotor immer dem Drehfeld zu folgen bzw. wird vor diesem weg getrieben. Wenn die Last an der Welle zu groß ist, "rutscht" er durch, das soll u.a. durch die freihängende Wicklung erkannt werden. Aber wie kriege ich den Rotor schneller? Meine Theorie ist, dass die PWM, d.h die Leistung durch die Spulen erhöt wird. Der Rotor bewegt sich dadurch ein Stück weiter als vorher vor dem Drehfeld. Das Drehfeld kann dann angepasst werden.


ABER: Ich traue es mir nicht zu so etwas zu bauen. Du musst
3 Halbbrücken steuern, mit richtig hohen Frequenzen und Strömen
Analoge Signalverarbeitung für Zero Cross
Aktiver Freilauf, Rückspeisung, Wirbelstrombremse
µC programmieren
die Theorie dahinter verstanden haben.

Und was ich überhaupt nicht verstehe; Warum suchst du nicht erstmal im Internet? Ist doch eigentlich sinnlos schonmal dagewesenes wieder zu kauen, informier dich doch erst. Gerade dazu gibt es tausende gute Seiten.
Z.B. solltest du das hier komplett gelesen haben, damit du nicht die selben Fehler machst:
http://www.mikrocontroller.net/topic/76166#new

EDIT: Direkt noch ein Link hinterher http://www.mikrocontroller.net/topic/45405#new
EDIT2: Ich bin über noch einen schönen link mit bunten Bildern gestolpert. Hier wird das mit PWM, ob sinus, etc erklärt: http://www.aerodesign.de/peter/2001/LRK350/SPEEDY-BL.html

Pumba
28.08.2007, 22:07
Hallo Puma,
mit null Englischkenntnissen wird das natürlich schwer :) Du solltest dir schon die Fachwörter aneignen.


Na ja, ist so 20 Jahre her. Ich klicke lieber weiter bevor ich mich vor mir selber blamiere.


Unter http://aquaticus.info/bldc_controller gibt's einen schönen Schaltplan. Hier http://mikrocontroller.cco-ev.de/ucwiki/BrushlessCtrl findest du eine bessere Zero Cross Detection. Mit den beiden Schaltplänen kannst du hoffentlich etwas anfangen :)


Mit den Plänen kann ich schon was anfangen. Bin gelernter Kommunnikationselektroniker. Hab jetzt zwar mehr mit programmieren von SPS-Steuerungen zu tun, aber dafür reichts noch.



Du kannst die PWM erstmal weglassen, also die Spannung hart durchschalten. Das ist zwar nicht optimal, aber es sollte funktionieren. Die PWM kannst du später noch dazu schalten.


Dann würde ich versuchen den Rotor mit vollster Leistung und noch ein bisschen mehr um eine drittel Umdrehung weiter zu drehen. Hätte er diesen Punkt erreicht würde er dort erstmal schwingen, bis ich die nächste Phase beschalte.



So ein Brushless regler ist eigentlich ein Frequenzumrichter mit Rückkopplung. Es wird ein Drehfeld erzeugt. Die drei Phasen sind 60° bzw. 120° zueinander verschoben und bestromen jeweils eine Wicklung. Dann befindet sich immer nur zwischen zwei Wicklungen Spannung, die dritte hängt frei im Raum.

Das ist der Trick: Die dritte frei hängende befindet sich immer noch im Motor, der sich dreht. Er wirkt also auch als Generator. In der freien Wicklung wird ein Strom induziert. Dieser Strom bzw. die Spannung kann man messen, genau das wird in der Zero Cross Detection gemacht. Dazu ist noch ein Tiefpass geschaltet, damit die PWM Pulse herausgefiltert werden können.
Über diese Zero Cross Detection (Nullpunkterkennung) kann dann die Position des Rotors mit leichter Verzögerung durch den Tiefpass erkannt werden. Danach richtet man das Drehfeld, lässt es entweder schneller oder langsamer werden. Und damit kann man dann die Drehzahl steuern :)


Ähhh, Moment....
die Wicklungen sind im Stern geschaltet, oder? Der Sternpunkt ist im Motor, also nicht zugänglich.
Da ich eine Phase/Spule gerade mit einem Sinus (oder was mal einer werden will) versorge, kann ich nur aus der Stromverteilung des zurückfließenden Stroms über die beiden anderen Spulen die Rotorposition bestimmen. Und das mach ich über den Spannungsabfall an den Shunts.
Oder hab ich da jetzt was grundlegend falsch verstanden?




Was ich noch nicht ganz verstanden habe, aber trotzdem mal versuche: Die Geschwindigkeitsänderung. An sich versucht der Rotor immer dem Drehfeld zu folgen bzw. wird vor diesem weg getrieben. Wenn die Last an der Welle zu groß ist, "rutscht" er durch, das soll u.a. durch die freihängende Wicklung erkannt werden. Aber wie kriege ich den Rotor schneller? Meine Theorie ist, dass die PWM, d.h die Leistung durch die Spulen erhöt wird. Der Rotor bewegt sich dadurch ein Stück weiter als vorher vor dem Drehfeld. Das Drehfeld kann dann angepasst werden.


Wenn wir von Deinem oben genannten Rechtecksignal ausgehen, kannst Du den Motor durch eine Frequenzerhöhung schneller machen. Wenn er das nicht schafft ist der Motor zu schwach.
Machst Du das mit PWM, dann brachst Du nur die Pulsfrequenz, und somit die Gesamtfrequenz des nachgebildeten Sinus erhöhen. Wird der Motor zu langsam (während eines Bruchteils einer Umdrehung) drehst Du die Leistung hoch, machst also die Pulse länger.





ABER: Ich traue es mir nicht zu so etwas zu bauen. Du musst
3 Halbbrücken steuern, mit richtig hohen Frequenzen und Strömen

Das ist eine meiner Fragen: Wie hoch müssen die Frequenzen sein?
Die Ströme schaltet mir so ein FET schon durch....wenn die Frequenzen sich in Grenzen halten.


Analoge Signalverarbeitung für Zero Cross

Wenn es dabei wirklich nur um den Null-Durchgang geht ist das machbar


Aktiver Freilauf, Rückspeisung, Wirbelstrombremse

O.K. jetzt fängt ein Thema an, wo ich noch nichts von weis.


µC programmieren

sollte ich mit ein bisschen Gedunt auch hin bekommen.


die Theorie dahinter verstanden haben.

Da bin ich ja gerade dran zu lernen



Und was ich überhaupt nicht verstehe; Warum suchst du nicht erstmal im Internet? Ist doch eigentlich sinnlos schonmal dagewesenes wieder zu kauen, informier dich doch erst. Gerade dazu gibt es tausende gute Seiten.
Z.B. solltest du das hier komplett gelesen haben, damit du nicht die selben Fehler machst:
http://www.mikrocontroller.net/topic/76166#new

EDIT: Direkt noch ein Link hinterher http://www.mikrocontroller.net/topic/45405#new
EDIT2: Ich bin über noch einen schönen link mit bunten Bildern gestolpert. Hier wird das mit PWM, ob sinus, etc erklärt: http://www.aerodesign.de/peter/2001/LRK350/SPEEDY-BL.html

[/quote]
Asche auf mein Haupt. Habe zwar schon viel gesucht, und auch ein bisschen gefunden. Aber ohne die richtigen Suchbegiffe ist es schwer.
Aber Danke für die Links. Da hab ich erstmal was zu lesen. Zwei kannte ich schon.

Alles was ich oben geschrieben habe ist das, wie ich es verstanden habe. Sollte ich da falsch liegen bin ich froh, wenn mir jemand widerspricht.

Danke für eure Hilfe.

avion23
28.08.2007, 23:25
Wow du hast dir ja viel Mühe gegeben :)


avion23 hat folgendes geschrieben::



Du kannst die PWM erstmal weglassen, also die Spannung hart durchschalten. Das ist zwar nicht optimal, aber es sollte funktionieren. Die PWM kannst du später noch dazu schalten.


Dann würde ich versuchen den Rotor mit vollster Leistung und noch ein bisschen mehr um eine drittel Umdrehung weiter zu drehen. Hätte er diesen Punkt erreicht würde er dort erstmal schwingen, bis ich die nächste Phase beschalte.



Genau, aber der Rotor würde eventuell sogar abgebremst werden, wenn das Drehfeld zu langsam ist. Dafür wäre die Leistungsregelung per PWM schon sinnvoll.



Ähhh, Moment....
die Wicklungen sind im Stern geschaltet, oder? Der Sternpunkt ist im Motor, also nicht zugänglich.
Da ich eine Phase/Spule gerade mit einem Sinus (oder was mal einer werden will) versorge, kann ich nur aus der Stromverteilung des zurückfließenden Stroms über die beiden anderen Spulen die Rotorposition bestimmen. Und das mach ich über den Spannungsabfall an den Shunts.
Oder hab ich da jetzt was grundlegend falsch verstanden?

Ja hast du :P Du brauchst keine Shunts. Wenn die Motorwicklungen einen Innenwiderstand von R01 haben, ist das sogar kontraproduktiv. Es wird ein virtueller Massepunkt gebildet, der entspricht dann sozusagen dem "Sternpunkt". Dabei wird gleich das Signal etwas über den Tiefpass geglättet. Eine meiner Meinung nach geniale Schaltung. Diese findest du im zweiten Link. Wie die EMK aussieht, kannst du dir im letzten Link mal ansehen: http://www.aerodesign.de/peter/2001/LRK350/SPEEDY-BL.html . Ich fand es hochinteressant :)



Das ist eine meiner Fragen: Wie hoch müssen die Frequenzen sein?
Die Ströme schaltet mir so ein FET schon durch....wenn die Frequenzen sich in Grenzen halten.

Die Frequenz für die Mosfets: 7*Umdrehungszahl für die Phasenkommutierung. Für die PWM sollte man in jeder high-phase noch 10 Schritte machen können, also ungefähr 10*7*Umdrehungszahl. Das ist die untere Grenze. Das ist ja nicht so furchtbar viel :) Nur darf es dabei keine Fehler geben. Bei jedem Fehler zerfetzt es Kabel oder die Mosfets ;)

Für Halbbrücken gibt es fertige Treiber, mit eingebauter totzeit. Diese verhindert, dass im Übergangsstadium beide Fets leiten. Wenn du den Highside Fet schaltest, kannst du evtl. eine Bootstrap schaltung benutzen.


avion23 hat folgendes geschrieben::


Aktiver Freilauf, Rückspeisung, Wirbelstrombremse

O.K. jetzt fängt ein Thema an, wo ich noch nichts von weis.


Ich bis vor kurzem auch nicht :) Auch wenn ich hier so tue als hätte ich die Weisheit mit Löffeln gefressen und würde so etwas jeden Tag machen: Ist nicht so.

Aktiver Freilauf: Eine Silizium-Diode hat ohne Last eine Vorwärtsspannung von 0.7V. Damit kann man die Induktionsspitze einer Spule (Motor) auffangen. Eine Shottky hat ~0.3V Vorwärtsspannung, unter hoher Last auch mehr. Das ist bei 50A einiges an Verlustleistung, die man gerne vermeidet.
Fets haben eine Diode integriert, können also auch als solche missbraucht werden. Der Trick ist, dass man den Fet kurz einschaltet, wenn gerade Strom durch die Diode fließt. Dieser Strom fliest dann "im Kreis" in der Motorwicklung und hält den Strom aufrecht (nicht lückender Betrieb). Der Spannungsabfall am Mosfet ist dabei nur von R_DS_on bestimmt, also nahe null.

Rückspeisung: Wenn man die Drehzahl verringert, speist man die entstehende EMK zurück in die Batterie. Man muss dabei aber den maximal möglichen Ladestrom und Betriebsspannung beachten. Im Normalfall bei Batteriegetriebenen Motoren kein Problem.

Wirbelstrombremse: Habe ich nur so als Stichwort eingeworfen. Ich weiß nicht ob es tatsächlich gemacht wird, aber man kann den Motor auch mit Strom abbremsen. Dabei gibt es natürlich hohe Ströme und hohe Verlustleistung, aber beim Auto z.B. ist das erwünscht bevor man gegen den Baum fährt.


Alles was ich oben geschrieben habe ist das, wie ich es verstanden habe. Sollte ich da falsch liegen bin ich froh, wenn mir jemand widerspricht.
Bei mir gilt das gleiche :) Und widersprochen habe ich dir ja ;)

Puh, ich bin froh dass ich diesen Quotekrieg jetzt überstanden habe. Wenn meine Projekte die ich hier habe gelaufen sind, dann ist auch ein Brushless controller dran. Ich stelle mir die Hardwareseite recht einfach vor, Softwaretechnisch kommt da einiges auf mich zu. WENN es jemals so weit kommt, kann ich dir natürlich die Pläne und alles geben. Aber das dauert minimum ein halbes Jahr :(

PasstScho
29.08.2007, 02:43
Hallo,
Ich würde dich nochmal gerne darauf hinweisen, dass eine derart Simple Regelung bei 5-10kW ziemlich peinlich ist.
Schau dir mal die Ideale Regelung an, die man machen könnte: nennt sich Field oriented Control (FOC / Vektorregelung)... wäre natürlich schön, aber wird zu kompliziert sein für den Anfang (oder du nimmst den IRMCK203 von IRF ... und viel Englisch)

Was aber mindestens sein sollte und auch mit ohne Englisch schaffbar sein dürfte ist: Sinus-Kommutierung.

Bei Sinus-Kommutierung (&Regelung) speichert man eine Sinus-Tabelle im Speicher und regelt je nach Rotor-Position den Strom im Motor möglichst exakt, sodass mit 3 PWM Kanälen eine 3-Phasen Sinusspannung zwischen den drei Motor-Phasen nachgebildet wird.

Schau dir mal den Link an (vorallem unten, die zwei Bilder): http://www.motionsystemdesign.com/Issue/Article/17763/Electronic_motor_control_Part_1.aspx

Wenn du nur eine simple Ansteuerung machst, wie du es anscheinend bisher vor hast, dann hast du nur 6 verschiedene Strom & Drehmoment-Vektoren, die unnötige Verluste erzeugen.
Die simple Ansteuerung wäre dann vorallem im niedrigen Drehzahlbereich einem Schrittmotor mit 6 Schritten/Umdrehung ähnlich. Wenn du z.b. einen Roller baust, mit derart ruckeligem Anlaufverhalten... au weia...
Sinus-Kommutierung entspräche einem Schrittmotor mit Microstepping - wäre also erheblich sanfter beim anlaufen.
Bei kleinen BLDC Motoren im Modellbau Bereich lohnt sich mehr Mühe natürlich nicht, wegen Preis & Baugröße dieser Regelungs-Arten.

Wenn du allerings einen Antrieb planst, der 5-10kW hat solltest du die paar Euros nicht sparen, denn dadurch steigt die Effektivität deutlich. Dass mit dem Sanfteren Anlauf könnte auch wichtig sein, denn bei langsamen Drehzahlen dürfte so eine übliche Modellbau-BLDC Steuerung grauenhaft sein.

P.S.: Auch ich bin kein Profi und kann mich irren... allerdings habe ich mich die letzte Zeit sehr mit Bürstenlosen Motoren und deren Regelung befasst (vorallem die, mit Magneten drinnen) und weiß, dass man sich am Anfang gerne etwas weniger Arbeit machen würde als nötig...

MfG Alex

avion23
29.08.2007, 14:17
Hallo PasstScho,
danke für deinen Kommentar. Ich hatte ja gehofft, das man das ganze erst so einfach aufbaut wie möglich um viele Fehlerquellen auszuschließen. Wenn du meinst, dass man da mit Sinus dran muss oder sogar mit Vektoren.... das wird nochmal eine ganze Dimension schwerer :(

Wenn du dich damit in letzter Zeit beschäftigt hast, kannst du noch etwas dazu sagen? Vor allem wie man es am besten realisiert. Und was ich alles falsch gesagt habe.

PS: Dein Link funktioniert nicht :(

PasstScho
29.08.2007, 15:09
Hi,

Vor allem wie man es am besten realisiert. Und was ich alles falsch gesagt habe.

Ist mir ein bisschen zu aufwendig, da nun zu schauen was alles falsch oder richtig war, aber ich sage mal wie ich an die Sache ran gehen würde - davor sei noch gesagt, dass der Bau von Endstufen nicht unbedignt mein Gebiet ist (mosfets & deren Ansteuerung...) und ich hauptsächlich in der Digitalen Welt lebe:

Als Endstufe brauchst du bekanntlich 6 Mosfets, die wie auch immer mit PWM angesteuert werden. Ich empfehle da auch ein IC, dass die Deadtime automatisch einfügt (zum Vergleich: ich nehme IR2184 - sind für deine Ansprüche allerdings nicht zu empfehlen)

Die Eingänge der Mosfet-Treiber werden so geschaltet, dass nur 3 PWM Kanäle nötig sind (z.b. mit einem Inverter die anderen 3 Signale für die Endstufen nehmen, oder ein Treiber-IC, dass es eh integriert hat...)

Dann brauchst du noch 2 Stromsensoren, die in zwei Motorphasen den Strom messen, den du regeln willst. Bei kleineren Strömen wie sie bei mir vorkommen nehme ich Shunts, bei Strömen wie sie bei dir vorkommen dürften Hallsensoren sinnvoll sein (gibts als fertige Strom-Sensor-ICs oder du bastelst selber welche mit Ferritkern & Hall-Sensor).
Zusätzlich wirst du einen Winkelgeber brauchen, der möglichst genau den Rotor-Winkel verrät - ein einfacher HEDS/HEDx (siehe eBay) sollte schon reichen. Ich befürchte allerdings, dass du einen Absolutgeber brauchen wirst, denn bevor du das erste mal Strom durch den Motor schickst, musst du wissen wo der Rotor sich befindet - sonst gibt es einen unkontrollierten Ruck um 0-60° (je nach Motor & Glück) beim Einschalten (Es gibt auch elektronische Wege das zu messen, aber da kann ich nichts genaueres zu sagen) !!!.

Als Gehirn dürfte ein AVR noch ausreichend sein - mit PICs kenne ich mich nicht so aus, aber PICs sind langsamer soweit ich weiß... ob der reicht kann ich dir nicht garantieren.
Die große Ausnahme sind einige dsPIC DSPs, das sind Digitale Signal Prozessoren, die extra für Motor-Regelung entworfen wurden - damit wäre dann sogar FOC möglich (ist natürlich aufwendiger & C-Compiler kostet glaube ich auch).

In diesem Bild vom Link oben(der übrigends bei mir geht), siehst du wie die Stromregelung dann ablaufen müsste:
http://www.motionsystemdesign.com/Content/Site011/Articles/01_01_2006/motor0400gif_00000009727.gif

Im Bild ist das Eingangssignal das gewünschte Drehmoment - da du wahrscheinlich allerdings eine Drehzahlregelung haben willst, müsstest du da noch einen PI Regler dazu machen, der Soll & Ist-Drehzahl vergleicht und dessen Ausgangswert der "desired torque" ist.

Du hättest dann also drei PI Regler in deinem AVR, der erste Regelt die Drehzahl nach, indem er das gewünschte Drehmoment einstellt.

Das Drehmoment ergiebt sich aus dem Strom, der durch die Phasen fließt und dem Winkel zwischen Drehfeld und Rotor-Lage!!. Es kann extrem viel Strom fließen und trotzdem hat der Motor 0 Drehmoment - wenn der Strom ein Drehfeld in falscher Winkellage ergibt (deshalb ist der Drehgeber wichtig).
Wenn zwischen dem Elektrischen Feld im Motor (Drehfeld, vom Strom erzeugt) und dem "Magnet vom Rotor" ein 90° Winkel ist, so hat der Motor das größte Drehmoment - bei 0° hat der Motor kein Drehmoment (obwohl Strom fließt).

Der "desired torque" Eingang bestimmt also das Drehmoment, indem es den Winkel zwischen Drehfeld & Rotor ändert. Je nachdem, was die Drehzahlregelung ergibt, wird der Winkel höher oder kleiner (um Strom zu sparen sollte auch der Strom mit dem Winkel niedriger werden - da bin ich mir aber nicht ganz sicher wie es in der Praxis läuft, da ich mich hauptsächlich mit FOC beschäftigt habe).

Nachdem der Winkel nun für das gewünschte Drehmoment angepasst wurde, werden die Ströme berechnet, die im Motor fließen müssen, damit er das Drehmoment erreicht. Dazu wird eine Sinus-Tabelle gespeichert, aus der die Werte für die drei Phasen errechnet werden ( Atmel hat ein paar nette BLDC-Dokumente, aus der du dir den Winkel->Strom-Werte Algorithmus klauen könntest).
Die so berechneten Stromwerte nimmst du als Soll-Wert für deine zwei PI-Strom Regler. (die dritte Leitung muss nicht geregelt werden, denn der Strom in der dritten Leitung hängt nur von den anderen beiden, geregelten Leitungen ab).

Die Strom-Regelung sollte möglichst schnell laufen (am Besten mit der PWM-Frequenz, sodass vor jeder Periode ein Korrektur-Wert angewendet wird).
Die Drehzahl-Regelung muss nicht so schnell sein, je nach Trägheit deines Antriebs... Ich vermute 200 Hz könnten schon reichen.



Sooo, jetzt fällt mir erstmal nichts wichtiges mehr ein und du dürftest einen groben Überblick über die Geschichte haben.


Hier will ich noch mal erwähnen, dass ich kein Profi bin und mich irren kann... vorallem habe ich mich hauptsächlich mit FOC und nicht mit Sinus-Kommutierung beschäftigt. Fehler können also vorhanden sein - Korrektur erwünscht!

MfG Alex

avion23
29.08.2007, 15:33
Danke PasstScho,
genau das habe ich mir vorgestellt :)
Ich möchte nur mal erwähnen, dass ich nicht der Threadersteller bin. Ich habe mich eingeklinkt, weil mich das Thema auch persönlich interessiert. WENN ich jemals einen brushless controller baue, wäre es in der Leistungsklasse <500W. Dazu ist der motor sehr träge weil unter Wasser.

Aber deine Tipps sind klasse. Auch wenn ich das mit dem Strom über die Shunts noch nicht verstehe. Ist das sozusagen die Rückkopplung für die Leistung? Das kann man doch auch statisch machen?

Ich lese mir das alles in Ruhe nochmal durch, verstanden habe ich es noch nicht ;) Pumba dürfte es auch sehr helfen.

Deine Seite funktioniert übrigens wieder :)

mantis.
29.08.2007, 15:44
hi leute

auf www.infineon.com gibt es sehr gute dokus über bldc's und die ansteuerungsmöglichkeiten

mfg
MaX

Pumba
29.08.2007, 21:08
Erstmal Danke an alle!
Mit soviel Infos hatte ich gar nicht gerechnet. Ehr mit Sprüchen, wie, "Das klappt sowieso nicht".
Habe jetzt erstmal was zu lesen.
Ein paar Fragen sind schon aufgekommen. Da melde ich mich die Tage zu.

Kurz zum Thema "quote":
Einfach einmal schreiben:

/quote
Leerzeile
...quote

Das markieren und kopieren. Bei allem, wo man was zu zu sagen hat, rechte Maustaste und einfügen. Dann in der Leerzeile schreiben.
Ich meine, dann liest sich so eine Diskussion viel einfacher.

Danke nochmal,

Achim

Pumba
31.08.2007, 15:23
Ich bin gerde schon an die erste Grenze gestoßen:

Wenn ich für die PWM-Impulse eine Länge zwischen 0-255 einstellen möchte,
und ich 16 Impulse pro Sinuswelle haben möchte,
und ich das pro Spule zwei mal pro Umdrehung machen soll,
und der Motor 200 U/sec. macht,

dann komme ich auf schlappe 1,6MHz

Ich gebe zu, das ich am Anfang dachte "Ihr mit euren PWM-Ausgängen, das mach ich eben zu Fuß über einen normalen Digiport".
Na ja, hab wohl vergessen das Hirn einzuschalten. Bei den Schaltzeiten fällt die Idee mit dem einfachen PIC wohl ins Wasser. Die schaffen keine 20kHz.

avion23
31.08.2007, 16:42
Ich habe mich noch etwas informiert. Auf www.atmel.com :) sind einige app notes dazu. Sowohl sensorless als auch hall-sensoren. Leider ist alles auf englisch. Dafür sind aber viele schöne Bilder da und c-code.

Die steuern brushless motoren übrigens mit einem Trapez an.

Und die 1,6MHz sind die Referenzfrequenz für die PWM, also die Frequenz von der sich die PWM ableitet. Üblich sind 8MHz - 64MHz bei den neuern Atmel cpus. Ohne die Codegröße zu beachten würde ein attiny25 schon reichen, der schaft bei 8bit eine PWM frequenz von 250kHz.

PasstScho
31.08.2007, 23:54
Hallo,
So ein Atmel wäre wirklich ideal... einfach mal nen ATmega8 nehmen und probieren ;).

Der dürfte eigentlich schon reichen...
Der Luxus ist ein AT90PWM3, das ist der mit 64Mhz Clock für PWM... Da könnte man dann sehr weiche Drehungen erstellen.

MfG Alex

Dilettant
17.06.2011, 02:15
1. Ich kann nur noch staunen; wir haben TU, (Techn.Unis) eine Motorenindustie für BLDC u. nicht automatisch die Regelung dazu?
2. Dem Jäger im Wald mit seinem Bundeswehr-Jeep und 5x 12V/ 100Ah sage ich; die Rekuperation kannst gleich vergessen; bei der Berechnung gleich ganz weglassen, denn real wirst du kaum Strom in die Batterien zurückpumpen können.
Bei den geringen Geschwindigkeiten im Wald- Herr Jägersmann!
3. Ich sehe, falls das hier stimmt, bei E-Motoren das totale Versagen derer, die Regler bauen;
4. Sind die zu blöd, für jeden Motor die passende Regelung dazu zu liefern?
Oder hat die community unendlich übrige Zeit, für den Krampf selber zu bauen?
5. Wenn das einmal gelöst ist, wieso soll ich mich da mit eigenen Schaltungen rumquälen?
----------------------------------------------------------------------------------

Hallo Puma,
mit null Englischkenntnissen wird das natürlich schwer :) Du solltest dir schon die Fachwörter aneignen.

Unter http://aquaticus.info/bldc_controller gibt's einen schönen Schaltplan. Hier http://mikrocontroller.cco-ev.de/ucwiki/BrushlessCtrl findest du eine bessere Zero Cross Detection. Mit den beiden Schaltplänen kannst du hoffentlich etwas anfangen :)

Du kannst die PWM erstmal weglassen, also die Spannung hart durchschalten. Das ist zwar nicht optimal, aber es sollte funktionieren. Die PWM kannst du später noch dazu schalten.

So ein Brushless regler ist eigentlich ein Frequenzumrichter mit Rückkopplung. Es wird ein Drehfeld erzeugt. Die drei Phasen sind 60° bzw. 120° zueinander verschoben und bestromen jeweils eine Wicklung. Dann befindet sich immer nur zwischen zwei Wicklungen Spannung, die dritte hängt frei im Raum.
Das ist der Trick: Die dritte frei hängende befindet sich immer noch im Motor, der sich dreht. Er wirkt also auch als Generator. In der freien Wicklung wird ein Strom induziert. Dieser Strom bzw. die Spannung kann man messen, genau das wird in der Zero Cross Detection gemacht. Dazu ist noch ein Tiefpass geschaltet, damit die PWM Pulse herausgefiltert werden können.
Über diese Zero Cross Detection (Nullpunkterkennung) kann dann die Position des Rotors mit leichter Verzögerung durch den Tiefpass erkannt werden. Danach richtet man das Drehfeld, lässt es entweder schneller oder langsamer werden. Und damit kann man dann die Drehzahl steuern :)

Was ich noch nicht ganz verstanden habe, aber trotzdem mal versuche: Die Geschwindigkeitsänderung. An sich versucht der Rotor immer dem Drehfeld zu folgen bzw. wird vor diesem weg getrieben. Wenn die Last an der Welle zu groß ist, "rutscht" er durch, das soll u.a. durch die freihängende Wicklung erkannt werden. Aber wie kriege ich den Rotor schneller? Meine Theorie ist, dass die PWM, d.h die Leistung durch die Spulen erhöt wird. Der Rotor bewegt sich dadurch ein Stück weiter als vorher vor dem Drehfeld. Das Drehfeld kann dann angepasst werden.


ABER: Ich traue es mir nicht zu so etwas zu bauen. Du musst
3 Halbbrücken steuern, mit richtig hohen Frequenzen und Strömen
Analoge Signalverarbeitung für Zero Cross
Aktiver Freilauf, Rückspeisung, Wirbelstrombremse
µC programmieren
die Theorie dahinter verstanden haben.

Und was ich überhaupt nicht verstehe; Warum suchst du nicht erstmal im Internet? Ist doch eigentlich sinnlos schonmal dagewesenes wieder zu kauen, informier dich doch erst. Gerade dazu gibt es tausende gute Seiten.
Z.B. solltest du das hier komplett gelesen haben, damit du nicht die selben Fehler machst:
http://www.mikrocontroller.net/topic/76166#new

EDIT: Direkt noch ein Link hinterher http://www.mikrocontroller.net/topic/45405#new
EDIT2: Ich bin über noch einen schönen link mit bunten Bildern gestolpert. Hier wird das mit PWM, ob sinus, etc erklärt: http://www.aerodesign.de/peter/2001/LRK350/SPEEDY-BL.html

Richard
17.06.2011, 12:17
1. Ich kann nur noch staunen; wir haben TU, (Techn.Unis) eine Motorenindustie für BLDC u. nicht automatisch die Regelung dazu?
2. Dem Jäger im Wald mit seinem Bundeswehr-Jeep und 5x 12V/ 100Ah sage ich; die Rekuperation kannst gleich vergessen; bei der Berechnung gleich ganz weglassen, denn real wirst du kaum Strom in die Batterien zurückpumpen können.
Bei den geringen Geschwindigkeiten im Wald- Herr Jägersmann!
3. Ich sehe, falls das hier stimmt, bei E-Motoren das totale Versagen derer, die Regler bauen;
4. Sind die zu blöd, für jeden Motor die passende Regelung dazu zu liefern?
Oder hat die community unendlich übrige Zeit, für den Krampf selber zu bauen?
5. Wenn das einmal gelöst ist, wieso soll ich mich da mit eigenen Schaltungen rumquälen?
----------------------------------------------------------------------------------

Das scheint eher Bastler Ehrgeiz als fehlende Industrie Treiber/Regler zu sein. Alle nahmen haften Hersteller solcher Motoren bieten auch dazu passende Treiber in allen Leistungsklassen an. Als kleines Beispiel für so einen KaKa Antrieb....
http://www.dmg-movement.de/

http://www.dmg-movement.de/Grafik/Golfmotor_tn.jpg

http://www.dmg-movement.de/Grafik/Rad_mit_16_Felge-seite.jpg

Gruß Richard