Hallo, ich bin gerade dabei die Blockkommutierung für einen BLDC Motor mit HALL-Sensoren zu programmieren. Da der Mikrocontroller ja immer etwas Zeit braucht um auf ein HALL-Event zu reagieren und den PWM Output entsprechend anzupassen, lässt man ja in der Regel einige Grad vorher kommutieren (Phase advance). Da ich HALL-Sensoren zur Positionsbestimmung nutze weiß ich nur alle 60° wann eine Phase beginnt bzw. endet, will ich vorher kommutieren muss ich anhand der Phasendauer den richtigen Zeitpunkt berechnen. Und genau da liegt das Problem, denn die Dauer der einzelnen Kommutierungsphasen unterscheiden sich sehr stark und scheinen sich auch nicht zu wiederholen: Phase 1: 250us Phase 2: 206us Phase 3: 284us Phase 4: 256us Phase 5: 194us Phase 6: 240us Phase 1: 312us Phase 2: 178us Phase 3: 252us Phase 4: 258us Phase 5: 218us Phase 6: 214us Egal ob ich die Dauer der letzten Phase, den Durchschnittswert der letzten beiden oder der letzten 6 Phasen benutze, das Ergebnis variiert so stark das es eher ein Glücksfall ist wenn zum richtigen Zeitpunkt kommutiert wird. Sind das normale Bauteilabhängige Toleranzen? Oder liegt das an meinem billigen Motor? Wie geht ihr mit dem Problem um? Viele Grüße, Andreas
Motoren haben da, zum Teil, erhebliche Toleranzen. Kommt es vom Motor, ist es periodisch. Dabei muß man aber die komplette mechanische Umdrehung betrachten, das können, je nach Polzahl, einige elektrische Umdrehungen sein. Ich hatte lange Zeit beruflich mit solchen Sachen zu tun, da haben wir einen Motorcontroller gebaut, der hat die periodischen Abweichungen 'gelernt', so konnte der Lauf viel ruhiger gemacht werden. Ist es aber sehr unregelmäßig, könnte es am unruhigen Lauf deines Motors liegen, oder an Störungen auf den Sensorleitungen, da könnten Tiefpassfilter in den Sensorleitungen helfen. Wird es besser, wenn Du an der Welle des Motors eine zusätzliche Schwungmasse anbringst? Wenn ja, liegt es am unruhigen Lauf. Mit freundlichen Grüßen - Martin
Danke für die schnelle Antwort, ich werde mal etwas rumprobieren. Gruß, Andreas
Andreas K. schrieb: > Da der Mikrocontroller ja immer etwas > Zeit braucht um auf ein HALL-Event zu reagieren und den PWM Output > entsprechend anzupassen, lässt man ja in der Regel einige Grad vorher > kommutieren (Phase advance). Ui Ui, programmierst du BASCOM oder JAVA ? Im Vergleich zum Motor reagiert der uC schon sehr schnell, und auch der Stromanstieg in der Motorspule auf Grund der Induktivität wäre weit langsamer und damit zeitbestimmender als dein langsamstes Programm. Der tatsächliche phase advance dient damit der Motor überhaupt dreht. Würde er nur genau zwischen den Spulen umschalten, würde der Motor gar keinen Grund sehen, zu drehen, er bekäme keinen Vortrieb in die Rotattionsrichtung. Durch phase advance (normalerweise 60 Grad) kommt es überhaupt erst dazu, daß der Motor ein "ziehendes" Magnetfeld bekommt. Den einzigen Ausgleich, den man machen soll und kann, ist der Ausgleich des Winkelfehlers durch die konstante Stromanstiegsgeschwindigkeit bei steigender Drehzahl, da nicht das Einschalten der Wicklung sondern das entstehende Magnetfeld getimt werden soll. Grosse DC Elektronmotoren mit Kollektorbürsten machen das ähnlich einer Zündzeitpunktverstellung beim Auto auch.
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.