@Malthy: genau, der Stellwert geht direkt auf den Motor, ohne weitere Geschwindigkeitsregelung.
Der grobe Ablauf der Reglerschleife sieht so aus:
-Sollposition wird empfangen
-Istposition wird gemessen
-Istposition wird geglättet
-Abweichung wird berechnet (Differenz aus Soll- und Istwert) -> E
-Differenz aus Abweichung des letzten Rechenschritts und der aktuellen Abweichung wird berechnet -> dE
-ist dE betragsmäßig größer als ein bestimmter Wert, wird es auf diesen Wert beschränkt
-Integral wird berechnet (E wird auf E_int addiert, wenn PWM<1023) -> E_int
-Tastverhältnis = k_p*E + k_d*dE + k_i*E_int + Versatz
-je nachdem, ob Tastverhältnis positiv oder negativ ist, wird die H-Brücke auf Linkslauf oder Rechtslauf geschaltet
-Betrag von Tastverhältnis bilden und auf max. 1023 begrenzen (10-bit-PWM)
-Tastverhältnis an den PWM-Port übergeben
-Istwert an PC senden
Derzeit ist es leider so, dass der Regler im Interrupt der UART läuft, da ich nicht weiß, wie ich das Ganze sonst synchron zum Rechner halten soll. Eigentlich wäre es besser, wenn der Regler mit einem eigenen Timer läuft und den Rechner nach neuen Werten fragt anstatt umgekehrt. Was passiert dann aber, wenn der Rechner dann nix von sich hören lässt?
Ansonsten ist es sicher auch nicht verkehrt, eine kaskadierte Regelung aufzubauen (on innen nach außen Stromregler, Geschwindigkeitsregler und Positionsregler). Das soll auch ganz gut zu implementieren gehen, da man sich von innen nach außen vorarbeiten kann. Dann kann man jeden einzelnen Regler so einstellen, dass er das gewünschte Verhalten zeigt und er dann mit der zugehörigen Strecke als Blackbox behandelt werden kann.
Lesezeichen