Mal ein paar Gedanken vorneweg. Um die Drehzahl zu bestimmen, benötigt man ein Signal, daß mit der Drehung wechselt. So einen einfachen Encoder. Dann muß man "nur noch" die Zeit zwischen zwei gleichen Flanken bestimmen und kann daraus die Drehzahl bestimmen. Dazu reicht das Signal von einem Hallsensor aus. Man kann da z.b. die Capture-HW des µC verwenden und damit die Zeit zwischen zwei Low-High (bzw zwei High-Low) Flanken bestimmen.
Um die Drehrichtung zu bestimmen, braucht man noch ein zweites Signal, daß in der Phase zum ersten verschoben ist. Diese muß nicht 90° sein, da tun es auch die typisch 60° der Hallsensoren eines BLDCs. Wichtig ist nur, daß sich die Phasenbeziehung zwischen den beiden Signalen während einer Umdrehung nicht ändert. Stichwort ist da Inkrementalgeber. Am Ende braucht man von den drei Hallsensorsignalen nur zwei um Drehzahl und Richtung zu bestimmen.
Wie man das jetzt praktisch realisiert, hängt von den Umständen ab. Da ist zum ersten der Drehzahlbereich, den man erfassen will. Dann kommt der Aufbau des Motors dazu: wieviele Polpaare hat er. Daraus kann man dann die höchstmögliche Frequenz des Hall-Signals bestimmen. Dann kommt der µC. Wie schnell ist er? Kann ich Hallsignale in einem schnellen Timerinterrupt sampeln und daraus dann sowohl Drehzahl als auch Drehrichtung bestimmen? Hier mal etwas zur Drehrichtungserkennung, die Drehzahlbestimmung läßt sich da noch einbauen. Wenn die Frequenz des Hallsignals hoch und der Prozessor langsam ist, muß ich z.B. die Capture-HW zu Hilfe nehmen. Manche µC haben auch einen Quadratur-Encoder in HW, den könnte ich auch benutzen.
Das ist leider keine fertige Lösung für dein Problem, sollte aber mögliche Lösungswege aufzeigen.
MfG Klebwax
Lesezeichen