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.