Forum: Mikrocontroller und Digitale Elektronik BLDC Blockkommutierung + Phase-Advance


von Andreas K. (aksper)


Lesenswert?

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

von Martin S. (led_martin)


Lesenswert?

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

von Andreas K. (aksper)


Lesenswert?

Danke für die schnelle Antwort, ich werde mal etwas rumprobieren.

Gruß,

Andreas

von Michael B. (laberkopp)


Lesenswert?

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
Noch kein Account? Hier anmelden.