NIBO 2/Coprozessor-Firmware

Aus Nibo Wiki
Wechseln zu: Navigation, Suche

Die Firmware für den Coprozessor teilt sich in zwei Teile: Die Motoransteuerung und die Distanzmessung mittels IR. Die Firmware wird durch die Initializer2 Software auf den ATmega88 übertragen.

Motor

PID Regler

Zur Regelung der Motoren dient folgender, modifizierter PID Regler:

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

Infrarot

Kommandos

Die folgenden Kommandos können über die TWI Schnittstelle zum Infrarotcontroller geschickt werden.

Kommando Größe Byte0 Byte1 Byte2
Stop 1 0x00 - -
StartMeasure 1 0x01 - -
TransmitRC5 3 0x02 RC5 Code

Stop

Diesed Kommando stoppt das Aussenden von IR-Signalen.

Zustand

Das folgende Datenpaket kann über die TWI Schnittstelle vom Infrarotcontroller abgefragt werden und beschreibt den aktuellen Zustand:

Größe Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
8 Dist. L Dist. VL Dist. V Dist. VR Dist. R RC5 Zähler RC5 Code

16-Bit Werte

16-Bit Werte werden immer folgendermaßen übertragen:

Byte0 Byte1
Hi-Byte Lo-Byte

Weblinks

Wikipedia - PID-Regler