Motorcontroller-Firmware

From Nibo

Contents

PID Regler

Zur Regelung der Motoren dient folgender, modifizierter PID Regler:

image:Regler.png

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
Personal tools