Hallo zusammen, ich möchte die Drehzahl eines BLDC-Motors regeln. Zum Aufbau: Ich habe einen 3_phasigen BLDC-Motor mir 3 Hall-Sensoren. Ein Treiber-IC (MP6535) steuert drei MOSFET-Halbbrücken an. Der Treiber-IC übernimmt die Kommutierung, Abschaltung bei Überstrom usw.. Über einen MKE04Z8VFK4 µC von NXP bekommt der Treiber ein PWM-Signal welches die die Anliegende Spannung an den Wicklungen steuert. Ich möchte die Drehzahl regeln. Zu deren Messung ist einer der Hallsensoren auf einen Eingang des µC zurückgeführt. Die Drehzahl soll konstant bleiben. Die Last schwankt und ist unbekannt. Regeln wollte ich das Ganze mit einem quasikontinuierlichen Regler. Also erst einmal ein einfaches Modell des Motors erstellen. Damit einen Regler entwerfen und diesen dann diskretisieren und auf dem µC implementieren. Jetzt scheitert es aber ein Bisschen an der Regelungstechnik. Im Grunde kann ich das einfache Modell (Bild) eines fremd- oder permanenterregten Gleichstrommotors verwenden, oder? Das habe ich mal versucht (Bild). Leider habe ich keine Daten zum Ankerwiderstand oder Ankeriduktivität. Das Datenblatt (Bild) gibt lediglich das Rotorträgheitsmoment sowie die Drehmomentkonstante her. Auch einige andere Daten, ob die mir allerdings weiterhelfen ist mir nicht klar. Da man in der Literatur oft liest, dass die mechanische Zeitkonstante >> elektrische Zeitkonstante ist, habe ich die elektrische einfach mal weggelassen und das Lastmoment vernachlässigt. Das ergibt dann die Übertragungsfunktion für den ganzen Kreis (G_m siehe Bild). Das ergibt mit den Parametern aus dem Datenblatt mit der Matlab-Fkt. "step()" die im Bild ersichtliche Sprungantwort. Der Verlauf an sich passt zu dem was ich erwarte. Die Zahlenwerte kommen mir aber sehr wenig vor. Wie ihr seht stochere ich ein bisschen im Nebel. In der Literatur wird nahezu immer der Strom geregelt. Ich muss ja aber die Drehzahl über die Spannung regeln. Wie macht man sowas üblicherweise? Ich will kein extrem detailiertes Modell. Würde gerne das grundsätzliche Verhalten des Motors in Abhängigkeit der PWM-Spannung abbilden. Weitere Frage: Im Grunde muss ich eigentlich mit der Störübertragungsfunktion arbeiten, oder? Die Drehzahl ist ja fest eingestellt.
Man braucht ja nur ein Mal irgendwas zu antworten, dann geht die Diskussion los. Also "zünde" ich sie mal. Elektrische/mechanische Zeitkonstante: Ich glaube, ich weiß was du meinst. Demnach würde ich die elektrische Zeitkonstante auch für eine erste Näherung vernachlässigen. Wenn der 3H-Treiber das tut, was ich annehme, dann kannst du sicherlich das einfache Modell des permanenterregten Gleichstrommotors annehmen. Von Stromsteuerung weiß ich nix, das sehe ich auch nicht ein. (Vielleicht schreiben das diejenigen, die auch von der "Stromspannung" reden.) Ansteuerung mit PWM bedeutet nur, dass der Motor effektiv so viel Spannung bekommt, wie sich aus Tastverhältnis * Betriebsspannung ergibt. Und die sich ergebende Drehzahl ist - in erster Näherung - proportional zur Spannung am Motor und in zweiter Näherung proportional zur Motorspannung minus Motorstrom * Innenwiderstand. (Der Motorstrom ist proportional zum Drehmoment). In dieser Näherung ist das Ersatzschaltbild des Motors ein Tiefpass, bestehend aus ohmschen Innenwiderstand und einer (großen) Kapazität C, die das Trägheitsmoment repräsentiert. Die Drehzahl entspricht der Spannung am C. Das entspricht wohl auch dem, was du oben gezeigt hast. Motorinduktivität (elektrische Zeitkonstante?), Reibungs- und andere Verluste, Innenwiderstände der 3H-Brücke und mehr gehören eher in die 3. Näherung und dürften für deine Aufgabenstellung irrelevant sein. So, wenn du das Ersatzschaltbild bzw. die Dimensionierung von C des Motors soweit weißt, sollte der Rest klar sein, um einen korrekten Regelkreis zu entwerfen.
Wenn das ein BLDC ist kann man die regelung über das timing, über den umschaltzeitpunkt machen. Den strom regelst du mit vor und rücklauf des rotors gegenüber dem drehfeld. Das ist gleich wie beim synchronmotor. Heisst du regelst den strom anhand der phasenverschiebung von drehfeld und rotor. Wobei die hochregelung schnell sein muss, die runterregelung nicht. Bedeutet du kommutierst mit fester frequenz. Wenn der hall vor der kommutierung kommt strom langsam zurück, wenn hall zu spät kommt strom schnell rauf.
:
Bearbeitet durch User
Staubsauger schrieb: > In der Literatur wird > nahezu immer der Strom geregelt. Ich muss ja aber die Drehzahl über die > Spannung regeln. Es ist ein Irrtum, wenn man glaubt, das die Drehzahl eines BLDC über vor- oder nacheilende Sensoren gesteuert wird. Tatsächlich ist es der Strom durch die Wicklungen, das ist genauso wie beim Bürstenmotor. Bei dem wird über den Kollektor kommutiert, beim BLDC über die Hallsensoren. Erhöht man den Strom durch die Wicklungen, dreht der Motor schneller - und zwar sowohl beim Bürstenmotor als auch beim BLDC. Der Bürstenmotor hat praktisch nur 2 Sektoren, der BLDC im Normalfall 6, was aber nichts am Prinzip ändert. Bei deinem Aufbau wird das über das PWM Signal vom MC gesteuert. Der Zeitpunkt der Kommutierung wird nicht geändert. Der höhere Strom bewirkt einen schnelleren Rotor, weil die Kraft zwichen Wicklung und Magnet steigt.
Matthias S. schrieb: > Tatsächlich ist es der > Strom durch die Wicklungen, das ist genauso wie beim Bürstenmotor. BLDC nicht verstanden ?
Sag' ich doch: Man braucht nur eine Antwort zu geben, schonen geht die Diskussion los. :-) Matthias S. schrieb: > Tatsächlich ist es der > Strom durch die Wicklungen, das ist genauso wie beim Bürstenmotor. Matthias, ich glaube, ich muss dich auch korrigieren: Bei beiden Motoren wird die Drehzahl durch die Spannung gesteuert. Die sich ergebende Drehzahl wird durch die Gegen-EMK erzeugt: Ist die Gegen-EMK gleich der Betriebsspannung, fließt kein Strom (bzw. in der Praxis nur ein geringer Strom, um die Verluste zu kompensieren). Bei konstantem Strom Strom durch die Wicklungen dreht der Motor nicht nur schneller, er dreht - theoretisch - unendlich schnell. Vor- oder nacheilende Sensoren grenzt aber auch bei mir an Unverständlichkeit. Sollte Pepe die Funktion eines Schrittmotors meinen? Volle Spannung auf die Ankerwicklungen auch bei Stillstand?
Der Zahn der Zeit (🦷⏳) schrieb: > Sag' ich doch: Man braucht nur eine Antwort zu geben, schonen geht die > Diskussion los. :-) Und wie immer jede Menge Blödsinn...;-) Aber warte erst ab, bis es ums Rekuperieren geht! Da zeigt sich jedes Mal, daß 95% der Leute Motoren überhaupt nicht verstehen. Nur eines ist wahr. Der TO baut nie im Leben seine Regelung. Viel zu theoretischer Ansatz. Dazu noch die "Hilfe" hier, na das kann nur schiefgehen.
Uwe S. schrieb: > Nur eines ist wahr. Der TO baut nie im Leben seine Regelung. Ich fürchte, dass du Recht hast. Wenn der Nick "Staubsauger" tatsächlich das Projekt kennzeichnet, dann tut es ein simpler Steller. > Viel zu theoretischer Ansatz. Dazu noch die "Hilfe" hier, na das kann nur > schiefgehen. Ja, das wäre Hilfe auf dem Holzweg. Weil es auch von allgemeinem Interesse sein könnte, tendiere ich dazu, eine gestellte Frage zu beantworten, und nicht statt dessen nur die Frage zu hinterfragen. Letzteres ist ja sehr beliebt - ich mag das eigentlich nicht. Aber in diesem Fall hätte ich zu (m)einer Antwort auch der Zweifel äußern sollen.
Der Zahn der Zeit (🦷⏳) schrieb: > Sollte Pepe die Funktion eines Schrittmotors meinen? Ist denn ein BLDC nicht ein schrittmotor mit 3 anstatt 2 phasen? Der Zahn der Zeit (🦷⏳) schrieb: > Volle Spannung auf die Ankerwicklungen auch bei Stillstand? Kann man machen, ist aber nicht gerade ökonomisch. Der Zahn der Zeit (🦷⏳) schrieb: >Vor- oder nacheilende Sensoren grenzt aber auch bei mir an Unverständlichkeit. Nicht die sensoren werden verschoben, sondern der kommutierungszeitpunkt. Z.b. sagt sensor "jetzt" aber der controller wartet noch +10 grad bis er kommutiert. Oder eben -10grad, das sind auch nur +350grad. Das durcharbeiten der sensorlosen Bernhard Konze source für BLDC ESC lohnt sich, ich hab das auch erst dabei verstanden. Nicht die simonk source, die ist viel komplizierter.
:
Bearbeitet durch User
Da der MP6535 die komplette Kommutierung für dich übernimmt kann dir erstmal egal sein, wie man auf das entsprechende PWM für die einzelnen Phasen kommt, das vereinfacht die Sache schonmal. Für die Regelung an sich werden dir 10 Leute 10 Antworten geben und viele Wege führen wie immer nach Rom. Hier mal ein in diesem Feld oft genutzter Ansatz für die Regelung: Zuerst einmal verwendet man nicht einen Regler, sondern kaskadierte: - Drehzahl (PI) -> Strom (PI) -> PWM - Position (P) -> Drehzahl (PI) -> Strom (PI) -> PWM Methoden zur Parameterfindung wären hier beispielsweise: - Betragsoptimum (Strom) - Symmetrisches Optimum (Drehzahl)
Pepe T. schrieb: > Ist denn ein BLDC nicht ein schrittmotor mit 3 anstatt 2 phasen? Die Ähnlichkeiten sind natürlich groß und man kann den BLDC auch als Schrittmotor betreiben. Auch bei denen wird sinnvollerweise die Spannung mit der Drehzahl erhöht. > Kann man machen, ist aber nicht gerade ökonomisch. Schrittmotoren werden auch nicht wegen ihres Wirkungsgrades eingesetzt. Volle Spannung auf die Ankerwicklungen auch bei Stillstand würde normalerweise zu Strömen führen, bei denen die Wicklung verbrennt. Der Zahn der Zeit (🦷⏳) schrieb: > Ich fürchte, dass du Recht hast. Wenn der Nick "Staubsauger" tatsächlich > das Projekt kennzeichnet, dann tut es ein simpler Steller. Und wenn es nur um eine einigermaßen konstante Drehzahl geht, würde ich die Stromaufnahme messen und den Motor-Innenwiderstand durch entsprechende Erhöhung der Spannung kompensieren. Stichwort: Negative Ausgangsimpedanz der Quelle. Das ist einfacher als eine Regelung.
Der Zahn der Zeit (🦷⏳) schrieb: >> Nur eines ist wahr. Der TO baut nie im Leben seine Regelung. Na das hoffe ich doch mal nicht. :D Naja, irgendwelche Feldregelungen etc fallen ja flach. Tatsächlich übernimmt die Kommutierung ja der Treiber-IC. Über PWM kann ich diesen vom Mikrocontroller aus. Die Transistoren, welche durch Kommutierungslogik freigeschalten sind bekommen dann die PWM Spannung ans Gate. Ich kann so sozusagen den Mittelwert der Motorspannung variieren. Zur Einordnung des Projekts: Es handelt sich um eine Studienarbeit. Die Hardware ist so schon vorgegeben. Ich soll die Software schreiben. Dazu gehört auch der Regler. Ich dachte eben, dass über den theoretischen Ansatz begründen kann welchen Regler ich hier verwende. Praktisch habe ich so etwas noch nie gemacht. Anwendung: irgend nicht näher spezifiziertes Akkuwerkzeug. Daher auch die unbekannte Last. Wie würde man denn aus rein praktischer Sicht an ein solches Problem herangehen? PID-Regler nehmen und einfach nach Ziegler/Nichols einstellen? Kevin M. schrieb: > Zuerst einmal verwendet man nicht einen Regler, sondern kaskadierte: > - Drehzahl (PI) -> Strom (PI) -> PWM > - Position (P) -> Drehzahl (PI) -> Strom (PI) -> PWM Die Antwort habe ich gerade erst gesehen... Diese Variante meinte ich mit Stromregler in der Literatur. Ich kann ja aber keinen Stromregler nutzen, da ich den Strom nicht als Information habe, oder? (Die Hardware ist so vorgegeben) Ich habe nur Istdrehzahl durch einen Hallsensor, der neben dem Treiber auch auf den Controller zurückgeführt wird.
Der Zahn der Zeit (🦷⏳) schrieb: > Und wenn es nur um eine einigermaßen konstante Drehzahl geht Wenn es um eine exakt konstante drehzahl geht machst du die kommutierung mit der entsprechenden frequenz, sowas wie drehzahl*pole*60. Den strom regelst irgendwo zwischen "motor kommt mit dem drehfeld mit" und "windungen brennen". Das drehzahlregeln über pwm ist in diesem fall käse.
Pepe T. schrieb: > Ist denn ein BLDC nicht ein schrittmotor mit 3 anstatt 2 phasen? Nein. Ein BLDC ist ein Motor, der durch Sensoren kommutiert. Er hat zwar Rastmomente, hat aber nichts mit einem Schrittmotor zu tun. Er wird nicht über die Frequenz des Drehfeldes geregelt, sondern über den Strom in den Wicklungen. Das ist ja kein Asynchron- oder Synchronmotor, sondern eben einer mit Sensoren. Ich habe übrigens Motorsteuerungen für 48V/4kW BLDC gebaut. Auch da wird über den Strom durch die Wicklungen geregelt, und sicher nicht über vor- und nacheilende Sensortimings. Konkret benutzte ich FOC, also Sinusmodulation. Das führt hier aber sicher zu weit, da der TE sicher nichts von dem Blabla versteht. Zur Funktion von Sensor-BLDC empfehle die Application Notes von AVR, z.B. AVR448 oder AVR447. Ausserdem z.B. AVR221 zum PID Regler. Die Regelung ist nicht schwierig, weil der Motor über die PWM gesteuert wird und ein Geschwindigkeitssignal über einen der Hallsensoren ausgibt. Muss nur noch ein Sollwert vorgegeben werden und ein bisschen skaliert. Das reicht für einen PID Regler.
Staubsauger schrieb: > Ich kann ja aber keinen Stromregler nutzen, da ich den Strom nicht als > Information habe, oder? Naja, grundsätzlich misst der Treiber ja den DC Strom, das könnte man an der Stelle mit einem Messverstärker abgreifen. Ich weiß nicht wer diese Hardware vorgegeben hat, aber in der Regel möchte man bei dem Motor erst einmal das Moment (Strom) regeln und übergeordnet dann den Rest. Das hat z.B. den Vorteil, dass beim Anfahren keine unzulässig hohen Ströme entstehen oder man kontrolliert über eine gewisse Zeit eine Überlast zulassen kann. Wenn die Messung gar nicht umsetzbar ist, kannst du auch mit dem Drehzahlregler starten und den Stromregler weglassen, die Einstellmethoden ändern sich dadurch ja nicht. Ich würde in diesem Fall aber den Sollwert für den Drehzahlregler über eine Rampe vorgeben, hierdurch kann man effektiv den Anlaufstrom "begrenzen". PS: komm bitte nicht auf die Idee einen PID zu benutzen, der macht dir mehr Probleme beim Einstellen als es die Sache wert ist. PI ist das was du möchtest.
:
Bearbeitet durch User
Matthias S. schrieb: > Ein BLDC ist ein Motor, der durch Sensoren kommutiert. > hat aber nichts mit einem Schrittmotor zu tun. Ein sensorless bldc IST eine 3-spulen schrittmotor. Darauf kann man sensoren pappen, dann hat man einen 3-spulen schrittmotor mit aufgepappten sensoren, einen sensored BLDC. > nicht über die Frequenz des Drehfeldes geregelt, sondern über den Strom > in den Wicklungen. Das ist quatsch.
Pepe T. schrieb: > Ein sensorless bldc IST eine 3-spulen schrittmotor. > Darauf kann man sensoren pappen, dann hat man einen 3-spulen > schrittmotor mit aufgepappten sensoren, einen sensored BLDC. Also erstmal gibt es mehrere Arten von Schrittmotoren, heute findet vor allem der Hybrid Schrittmotor Anwendung und der erzeugt sein Drehmoment im Gegensatz zum BLDC nicht nur aus Lorenzkräften, sondern auch aus Maxwellkräften (Reluktanz). Die beiden Motortypen unterscheiden sich also grundlegend in der Art wie sie Drehmoment erzeugen und selbst wenn wir das vernachlässigen sind sie bewusst deutlich anders Aufgebaut, da der Schrittmotor eben andere Eigenschaften haben muss. Selbst BLDC und BLAC sind im Prinzip elektrisch gesehen identisch, beide haben drei Phasen und das sind am Ende auch einfach 3 Wicklungen. Dennoch unterscheiden sich aber häufig in der Art wie die Wicklung aufgebaut ist.
Pepe T. schrieb: > Ein sensorless bldc IST eine 3-spulen schrittmotor. Nö. Ein sensorless BLDC ist eine Sonderform des BLDC. So einer wird zwar zum anlaufen mit einem Drehfeld beschickt, wird aber dann durch die Gegen-EMK der Spulen kommutiert. Pepe T. schrieb: >> nicht über die Frequenz des Drehfeldes geregelt, sondern über den Strom >> in den Wicklungen. > > Das ist quatsch. Leider erzählst du diesen Quatsch. Du hast vermutlich noch gar nichts mit BLDC zu tun gehabt.
Matthias S. schrieb: > aber dann durch die > Gegen-EMK der Spulen kommutiert. Das ist auch falsch. Die messende spule ist in der messphase stromlos. Das ist keine "Gegen-EMK", das ist die vom vorbeiziehenden magneten in der unbestromten spule induzierte strom. Schau das bild an. Gemessen wird auf der 0 linie. Die kommutationszeitpunkte werden dann GERECHNET! Nur bei "dummen" sensored-esc wird nicht gerechnet. Matthias S. schrieb: > Du hast vermutlich noch gar nichts > mit BLDC zu tun gehabt. Du denkst bei den BLDC läuft der rotor nicht snchron zu drehfeld. Du hast keinen schimmer.
:
Bearbeitet durch User
Matthias S. scheint der einzige zu sein, welcher sich in der Materie auskennt. Bei einem sensored BLDC kann die Drehzahl über die PWM geregelt werden, sprich über die Stromzufuhr in den Wicklungen. So kann z.B. ein Timer im MC die Dauer bis zur nächsten Kommutierung feststellen und bei Bedarf die PWM verkleinern. Erschreckend laienhaft, was hier so behaupted wird...
Staubsauger schrieb: > Anwendung: irgend nicht näher spezifiziertes Akkuwerkzeug. Daher auch > die unbekannte Last. Daher auch unbekannte Parameter für die Regelung. Kann es sein, dass du ein System entwickeln sollst, dass die optimalen Parameter selbst finden soll? Ansonsten läuft es wohl auf einen simplen I-Regler hinaus, der träge genug ist, dass die Maschine (ohne Last) nicht in Schwingungen gerät. Mit Last wird sie dann halt noch träger.
Hmm, ich glaube das ist der Punkt an dem ich auf dem Schlauch stehe. Ich kann ja gar keine Reglerparameter heraussuchen, wenn ich die Last nicht kenne. Vermutlich wird es darauf hinauslaufen. Einfach einen sehr robusten Regler durch probieren parametrisieren. Könnte ich hier jetzt eine Störübertragungsfunktion bestimmen und damit arbeiten? Z.B. indem ich ich den Motor sprungartig Belaste und dessen "Belastungsantwort" aufzeichne?
Pepe T. schrieb: > Du denkst bei den BLDC läuft der rotor nicht snchron zu drehfeld. Du hast keine Ahnung, was ich denke und was ich weiss. Du verwechselst eben Ursache und Wirkung. Natürlich dreht sich der Rotor in einem Drehfeld, aber das entsteht durch Kommutieren durch die Sensoren. Wie gesagt, das ist wie bei einem Bürstenmotor. Der Rotor bewegt den Kollektor, der dann in den nächsten Sektor schaltet. Beim BLDC ist es eben keine Bürste und Kollektor, sondern Sensoren. Die schalten die Wicklungen in den nächsten Sektor. Je stärker die Spulen bestromt werden, umso schneller dreht der Motor. Wieder genauso wie beim Bürstenmotor. Also zieh dir ein wenig Literatur rein oder ein Youtube Video, dann geht dir vllt. ein Licht auf. Diese Serie hilft dir evtl. dabei: https://www.youtube.com/watch?v=gNpoTPzEkco Übrigens kann die beschriebene Regelung auch für den TE interessant sein.
:
Bearbeitet durch User
Matthias S. schrieb: > Natürlich dreht sich der Rotor in einem > Drehfeld, Sagi ich dir doch dauernd. Jetzt überleg dir den rest auch nochmal. Hab keine zeit für individuelle nachhilfe.
Staubsauger schrieb: > Hmm, ich glaube das ist der Punkt an dem ich auf dem Schlauch > stehe. > Ich kann ja gar keine Reglerparameter heraussuchen, wenn ich die Last > nicht kenne. > Vermutlich wird es darauf hinauslaufen. Einfach einen sehr robusten > Regler durch probieren parametrisieren. > > Könnte ich hier jetzt eine Störübertragungsfunktion bestimmen und damit > arbeiten? Z.B. indem ich ich den Motor sprungartig Belaste und dessen > "Belastungsantwort" aufzeichne? Das setzt voraus, dass du die Störung (veränderliche Last) messen kannst um sie dann direkt zu kompensieren. Alternativ kannst du einen sehr robusten Regler entwerfen (H-Infty) oder einen adaptiven Regler, der sich auf die neue Last einstellt. Da musst du dir was raussuchen und schauen, wie gut die Regelung eben sein soll. Vielleicht reicht dir auch ein simpler PID Regler. Als Ing wählst du die Lösung aus, die die Anforderungen erfüllt und möglichst günstig ist.
Pepe T. schrieb: > Sagi ich dir doch dauernd. Jetzt überleg dir den rest auch nochmal. Du hast es anscheinend noch nicht kapiert. Schau dir die Videos an.
Pepe T. schrieb: > Sagi ich dir doch dauernd. Jetzt überleg dir den rest auch nochmal. > Hab keine zeit für individuelle nachhilfe. Hier noch ein Tipp bezüglich individueller Nachhilfe für Pepe T.: http://ww1.microchip.com/downloads/en/appnotes/00857b.pdf P.S. Sicher auch für den TO interessant.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.