Hi, ich versuche gerade einen BLDC Motor mittels BEMF Verfahren anzusteuern. Ich verwende einen ATmega32M1 und ein kleines Treiberboard. Die BEMF Signale werden in den AnalogComparatoren ausgewertet und sehen auf dem Oszi soweit ganz gut aus, wenn ich sie im Programm auf I/Os lege. Für die Regelung hab ich mir folgendes Konzept ausgedacht: Nach dem Motoranlauf messe ich Periodendauern in 6 Variablen und zwar jeweils von der steigenden Flanke des ersten Komparators bis zur nächsten steigenden Flanke des ersten Komparators. Und das selbe für die fallenden Flanken sowie für Komparator 2 & 3. Daraus kann ich mir die Delays zwischen zwei Kommutationen ausrechnen (gemittelte Periodendauer / 6). Die Kommutation erfolgt in einem OutputCompare Interrupt eines Timers. In dieser ISR wird dann auch der nächste Interruptzeitpunkt bzw Kommutationszeitpunkt festgelegt, basierend auf dem errechneten Wert der AnalogComparatoren. Laut der Theorie müsste ja die Drehzahl des Motors bei konstanter Last (oder unbelastet) proportional zum PWM-Duty Cycle sein. Wenn ich aber mit dem obigen Konzept vom Motoranlauf (PWM Dutycycle + Delays vorgegeben) in den Regel Status wechsle (PWM Dutycycle vorgegeben + Delays berechnet mit AnaComp), wird der Motor nicht schneller, wenn ich den Dutycycle erhöhe. Im Gegenteil: ich kann sogar den PWM Dutycyle auf das maximum Erhöhen und die Drehzahl bleibt konstant oder geht runter. Wo liegt der Fehler in meinem Konzept? In Application Notes habe ich gelesen, dass der Kommutationszeitpunkt und der ZeroCross-Zeitpunkt (also meine AnaComp-Flanke) um 30 Grad verschoben sind. In meinem Programm wird der Kommutationszeitpunkt nicht aus dem ZeroCross Zeitpunkt errechnet, sondern nur die Delays zwischen zwei Kommutationen, kann das vielleicht die Ursache sein? Ich habe dieses Verfahren bewusst so gewählt, da ich auf dem Oszi gesehen habe, dass die Komparatorflanken und die echten Hallsignale (an deren Flanken im Idealfall eine Kommutation stattfinden sollte) eben nicht um 30 Grad verschoben sind, sondern in der einen Drehrichtung fast identisch sind. Siehe Oszi Bild: Die beiden unteren Signale sind der echte Hallsensor und der AnaComp Ausgang auf einem I/O. Danke fürs Lesen und jede konstruktive Idee! Gruß Markus
Markus E. schrieb: > Wo liegt der Fehler in meinem Konzept? > In Application Notes habe ich gelesen, dass der Kommutationszeitpunkt > und der ZeroCross-Zeitpunkt (also meine AnaComp-Flanke) um 30 Grad > verschoben sind. Das hängt meines Wssens auch ein bischen vom Motor ab. > In meinem Programm wird der Kommutationszeitpunkt nicht aus dem > ZeroCross Zeitpunkt errechnet, sondern nur die Delays zwischen zwei > Kommutationen, kann das vielleicht die Ursache sein? Aus dem Nulldurchgang zu berechnen, wäre zumindest mal die übliche Variante. Du zählst dann die Zeit von der Kommutation bis zum Nulldurchang und wartest dann nochmal solange (+Timing) für die nächste Kommutation. Damit hängt die Zeit zwischen zwei Kommutationen davon ab, wie lange der Motor gebraucht hat, um zu folgen. Bei deiner Variante wird sie basierend darauf gewählt, wie schnell der Motor bisher gedreht hat. Warum sollte er dann schneller werden? > Ich habe dieses Verfahren bewusst so gewählt, da ich auf dem Oszi > gesehen habe, dass die Komparatorflanken und die echten Hallsignale (an > deren Flanken im Idealfall eine Kommutation stattfinden sollte) eben > nicht um 30 Grad verschoben sind, sondern in der einen Drehrichtung fast > identisch sind. Und in der anderen? Wo kommen die Hall-Sensoren her?
Hi Rolf, > Warum sollte er dann schneller werden? Danke für die Antwort. Ich werd die Software mal entsprechend umschreiben. Und testen, ob das ganze läuft. > Und in der anderen? Wo kommen die Hall-Sensoren her? Es ist ein Motor mit fest eingebauten Hallsensoren. Mit Drehrichtung im Gegenuhrzeigersinn gilt AC0 = Hall1, AC1 = Hall2, AC2 = Hall3 Mit Drehrichtung im Uhrzeigersinn gilt AC0 = Hall2, AC1 = Hall3 und AC2 = Hall1
Geile Sache! Es läuft :D Jetzt mach ich mich mal an den PI-Regler für die PWM...
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.