Brauche Hilfe bei BLDC Ansteuerung / BEMF

14/07/2010 - 01:23 von Gabriel Schuster | Report spam
Hi,
ich versuche zur Zeit einen Brushless DC Motor sensorlos also mit Back-
EMF-Feedback zu betreiben.
Ich verwende einen ATmega32M1 und eine selbstgebastelte Treiberstufe; für
die BEMF verwende ich die internen Komparatoren und eine Filterstufe
bestehend aus einem Widerstandsnetzwerk und Tiefpàssen (wie in einer
Atmel AppNote beschrieben).

Mein Testmotor hat Hallsensoren, daher kann ich die Signale aus dem
Analog-Comparator mit den echten vergleichen und ich krieg schöne Signale
raus.
Den Motoranlauf hab ich auch schon programmiert und zwar komm ich damit
in einen Drehzahlbereich (~2000rpm), in dem ich ein gutes Feedback-Signal
bekomme (mit einer LED lass ich mir anzeigen, ob eine Richtige Folge von
mehreren AnalogComp-Flanken erfasst wurde).
Parallel dazu mess ich noch den Strom durch den Motor an einem 0.15Ohm
Shunt.

Jetzt zum Knackpunkt: Ich messe die Zeit zwischen zwei Komparator-Flanken
um den nàchsten Umschaltzeitpunkt - also den Kommutationszeitpunkt - zu
Berechnen. Und das klappt überhaupt nicht: Hab schon versucht mehrere
Zeiten zu mitteln oder zu sortieren und nur die in der Mitte zu
verwenden, aber egal was ich mach: immer wenn ich vom Hochlauf (in dem
die Delays zwischen den Umschaltzeitpunkten vorgegeben sind) in den
Feedback-Modus (in dem ich den nàchsten Umschaltzeitpunkt berechne)
wechsel, wird der Motor stetig langsamer.
Auch bei konstantem oder sogar zu hohem PWM Verhàltnis. Hier hàtte ich
zumindest erwartet, dass der Motor sich irgendwann schneller dreht, oder
nicht mehr langsamer wird, wenn er durch das hohe PWM Verhàltnis stàrker
beschleunigt wird, als für die Drehzahl eigentlich benötigt wird.

Wenn ich zu dem berechneten Wert für die Delays einen festen Wert
dazuzàhle oder abziehe, werden die Delays schlagartig so klein bzw so
groß, sodass sich das magnetische Feld schneller dreht, als der Stator
des Motors.

Was mach ich nur falsch?

Übrigens das ist kein kommerzielles Projekt oder so, ich mach das nur um
das Prinzip der Motoransteuerung zu verstehen und möchte mein eigenes
Programm dazu schreiben... und vielleicht mal einen Quadrokopter basteln.

Danke für eure Antworten (und fürs lesen ;))
G.S.
 

Lesen sie die antworten

#1 wernertrp
14/07/2010 - 07:31 | Warnen spam
On 14 Jul., 01:23, Gabriel Schuster wrote:
Hi,
ich versuche zur Zeit einen Brushless DC Motor sensorlos also mit Back-
EMF-Feedback zu betreiben.
Ich verwende einen ATmega32M1 und eine selbstgebastelte Treiberstufe; für
die BEMF verwende ich die internen Komparatoren und eine Filterstufe
bestehend aus einem Widerstandsnetzwerk und Tiefpàssen (wie in einer
Atmel AppNote beschrieben).

Mein Testmotor hat Hallsensoren, daher kann ich die Signale aus dem
Analog-Comparator mit den echten vergleichen und ich krieg schöne Signale
raus.
Den Motoranlauf hab ich auch schon programmiert und zwar komm ich damit
in einen Drehzahlbereich (~2000rpm), in dem ich ein gutes Feedback-Signal
bekomme (mit einer LED lass ich mir anzeigen, ob eine Richtige Folge von
mehreren AnalogComp-Flanken erfasst wurde).
Parallel dazu mess ich noch den Strom durch den Motor an einem 0.15Ohm
Shunt.

Jetzt zum Knackpunkt: Ich messe die Zeit zwischen zwei Komparator-Flanken
um den nàchsten Umschaltzeitpunkt - also den Kommutationszeitpunkt - zu
Berechnen. Und das klappt überhaupt nicht: Hab schon versucht mehrere
Zeiten zu mitteln oder zu sortieren und nur die in der Mitte zu
verwenden, aber egal was ich mach: immer wenn ich vom Hochlauf (in dem
die Delays zwischen den Umschaltzeitpunkten vorgegeben sind) in den
Feedback-Modus (in dem ich den nàchsten Umschaltzeitpunkt berechne)
wechsel, wird der Motor stetig langsamer.
Auch bei konstantem oder sogar zu hohem PWM Verhàltnis. Hier hàtte ich
zumindest erwartet, dass der Motor sich irgendwann schneller dreht, oder
nicht mehr langsamer wird, wenn er durch das hohe PWM Verhàltnis stàrker
beschleunigt wird, als für die Drehzahl eigentlich benötigt wird.

Wenn ich zu dem berechneten Wert für die Delays einen festen Wert
dazuzàhle oder abziehe, werden die Delays schlagartig so klein bzw so
groß, sodass sich das magnetische Feld schneller dreht, als der Stator
des Motors.

Was mach ich nur falsch?

Übrigens das ist kein kommerzielles Projekt oder so, ich mach das nur um
das Prinzip der Motoransteuerung zu verstehen und möchte mein eigenes
Programm dazu schreiben... und vielleicht mal einen Quadrokopter basteln.

Danke für eure Antworten (und fürs lesen ;))
G.S.



Sensorless ist viel komplizierter.
Vor allem der Start oder geringe Drehzahlen.
Auf den BEMF Signalen ist auch jede Menge PWM Störsignal drauf.


http://docs.google.com/viewer?a=v&q=cache:O6lskunoQx8J:www.st.com/stonline/books/pdf/docs/10401.pdf+Sensorless+BLDC

+Controller&hl=de&gl=de&pid=bl&srcid­GEESiq_q9-LcAHAVs1D-
dTMNiXGq9dNls0IBzXbrCiqZjCrUUd6PfxuCBwfC7m5RYJrpMcWHcGn2T9rbJU3vjktLH5DxWwxrSBZyT6rxU-

0o6F2ycZjBkpjIGZjdUmconuMvzgSPwO&sig=AHIEtbR6JOt5YxbP5xXHTOdyW5w8tyqtUw

Ähnliche fragen