Hallo liebe µC.net Gemeinde!
Zur Lageregelung eines Antriebes übergebe ich die Stellgröße des
P-Reglers an eine Funktion zur PWM-steuerung des Motors. Der Wert P wird
je nach Regelanforderung zwischen 15 und 50 variiert.
Funktionsdefinition:
1 | void MOTOR_set_rpm(int speed);
|
Der Wert speed wird innerhalb der Funktion auf +1499 und -1499 begrenzt.
Für jede Drehrichtung ergibt das 100% PWM Duty-Cycle am jeweiligen
Ausgang
Funktionsaufruf:
1 | MOTOR_set_rpm( P*(soll-ist) );
|
Soll und Istwert sind jeweils unsigned 16-bit Digitalwerte.
Übersteigt der Wert P*(soll-ist) den Wertebereich vom 16-bit int, ergibt
sich ein Überlauf und die Regelung funktioniert nicht mehr.
Meine Frage:
1) Wie lässt sich das Problem am besten lösen?
2) Mit welchem Wertebereich/Kommazahlen wird die Berechnung
P*(soll-ist)an sich ausgeführt?
Ich verwende den µC SAMD21G18 und Atmel Studio 7.
Ich hoffe, dass ich alles verständlich formuliert habe - ansonsten bitte
einfach nachfragen.
Vielen herzlichen Dank,
Johannes