Motorcontroller-Firmware
From Nibo
Contents |
PID Regler
Zur Regelung der Motoren dient folgender, modifizierter PID Regler:
Der Regelungsalgorithmus ist optimiert für Ganzahlen und wird 100 mal pro Sekunde (alle 10 ms) aufgerufen. Der Wertebereich des Ausgangssignals lieg im Intervall [-32768 ... +32768]. Der Soll- und der Ist-Wert werden als Ticks/Sekunde angegeben, ein Tick ist 1/20 einer kompletten Radumdrehung.
Odometrie
Die Werte der vier IR-Phototransistoren werden mit einer Frequenz von ca. 8 kHz abgetastet. Die gemessenen Analogwerte werden aufbereitet und durch einen Zustandsautomaten in Schritte umgewandelt.
Kommandos
Die folgenden Kommandos können über die TWI Schnittstelle zum Motorcontroller geschickt werden.
Kommando | Größe | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 |
---|---|---|---|---|---|---|
Stop | 1 | 0x00 | - | - | - | - |
SetPWM | 5 | 0x01 | PWM links | PWM rechts | ||
SetSpeed | 5 | 0x02 | Soll links | Soll rechts | ||
SetParameters | 4 | 0x03 | Ki | Kp | Kd | - |
ResetOdometry | 5 | 0x04 | Odo links | Odo rechts |
Stop
Die beiden Motoren werden sofort abgeschaltet. Der Motorcontroller befindet sich nach dem Einschalten oder nach einem reset in diesem Zustand.
SetPWM
Das Puls/Pause-Verhältnis wird für die beiden Motoren auf die übertragenen Werte festgesetzt. Die Wertebereich liegt im Interval -1024 (-100%) bis +1024 (+100%).
SetSpeed
Der PID Regler versucht die angegebenen Soll-Drehzahlen für die Motoren zu halten. Die Geschwindigkeit wird in Ticks/Sekunde angegeben, wobei 20 Ticks einer Radumdrehung entsprechen.
SetParameters
Mit diesem Befehl werden die Konstanten für den PID-Regler in das EEPROM des Motorcontrollers übertragen. Sie bleiben auch nach einem Ausschalten des Roboters erhalten.
ResetOdometry
Dieser Befehl setzt die internen Odometriezähler auf die übertragenen Werte zurück.
Zustand
Das folgende Datenpaket kann über die TWI Schnittstelle vom Motorcontroller abgefragt werden und beschreibt den aktuellen Zustand:
Größe | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 |
---|---|---|---|---|---|---|---|---|
8 | Odo links | Odo rechts | Geschw. links | Geschw. rechts |
16-Bit Werte
16-Bit Werte werden immer folgendermaßen übertragen:
Byte0 | Byte1 |
---|---|
Hi-Byte | Lo-Byte |