Hallo Leute,

ich war mir nicht ganz sicher, ob ich das unter "Motoren" posten sollte, oder hier. Bitte entschuldigt also, wenn meine Frage nicht ganz passen sollte
Ich habe ziemlich viele Fragen zur Ansteuerung eines BLDC.

Ich bin im Moment daran, ein kleines Fahrzeug mit einem BLDC anzutreiben.
Ich habe einen maxon motor, dieser verfügt über 6 Hallsensoren. Da mein Fahrzeug auch sehr langsam fahren können muss, habe ich ein Getriebe 1:10 drin; die minimalste Drehzahl vom Motor möchte ich zwischen 100..200 U/min regeln (Maximal dann 8000 U/min).

Erst mal zur Ansteuerung des Motors. Diese mache ich wie folgt: jede Änderung der Hallsensoren löst einen Interrupt aus. Im Interrupt werden dann die aktuellen Hallsensor-Zustände abgefragt. Danach lege ich die zu bestromende Phase jeweils an einem Anschluss an Masse, mit dem anderen Anschluss "wackle" ich PWM-mässig zwischen 0V und 12V. So kann ich den Motor steuern. Ist das richtig so, oder sollte ich das anders machen? eine Seite fest auf Masse, und die andere PWM-mässig entweder offen oder 12V?
seltsam an meiner Ansteuerung ist nämlich, dass der Motor am meisten Strom verbraucht, wenn der Tastgrad so um 50% rum ist. Und das, obwohl ich eine grosse Totzeit eingebaut habe, von 2 us! mit kleineren Totzeiten wird es nicht besser. Zwar dreht der Motor immer sauber, aber es irritiert mich, dass er bei 50% duty cycle mehr Strom braucht als bei 100%. Woran könnte das liegen?


Dann, zur Regelung des Motors: ich messe mit einem Timer des Mikrocontrollers (ein STM32F4) die Pulsbreite der Hallsensoren, und diese versuche ich auf einen konstanten Wert zu regeln. Leider oszilliert meine Regelung und ist recht träge. Wenn ich Kp und Ti ändere, kriege ich das oszillieren im höheren Drehzahlbereich zwar weg (Stichwort Ziegler Nicholls), allerdings kann ich den Motor im Unteren Drehzahlbereich kaum regeln, weil ich ja nur 6 Impulse pro Umdrehung kriege. Ich dachte erst, das würde reichen, aber jetzt sehe ich, dass es ein wenig knapp ist. Oder liegt es tatsächlich an meinem Regler? den habe ich einfach so in 10 Minuten mal schnell zum Testen geschrieben und dann damit ein wenig experimentiert

Ich überlege gerade, ob ich noch einen Drehgeber an den Motor bauen soll, damit ich mehr Impulse pro Umdrehung kriege. Das würde wohl mein Problem lösen, oder?

dann, noch eine Frage. Im Moment fahre ich mit Blockkommutierung. Damit dreht der Motor gut, aber schöner wäre eine Sinuskommutierung. Ich habe mir jetzt überlegt:
ich könnte einen Timer nehmen, und diesen z.B. alle 100 us einen Interrupt auslösen lassen. Und im Interrupt zähle ich dann, abhängig von meiner gewünschten Drehzahl, eine Variable phi hoch, die mir den Rotorwinkel angibt. Mit einer Sinus-LUT könnte ich dann den duty cycle für die PWM bestimmen. Und dann, alle 60°, kriege ich von den Hallsensoren einen Interrupt, und kann phi wieder synchronisieren. Ist das ein möglicher Ansatz?

Noch besser wäre eine feldorientierte Regelung, ich möchte aber nicht unbedingt die Phasenströme messen. Wäre es auch möglich, eine solche zu bauen, wenn ich nur die Ströme an den lowside MOSFETs messe?

Ich hoffe, ihr könnt mir mit meinen Fragen ein wenig weiter helfen.

Wichtig: ich bin noch im Studium, also verzeiht mir, wenn ich teilweise etwas naiv Frage