PS2 Controller

TOBOR NG läßt sich jetzt mit einem Playstation2-Controller (wireless) steuern. Die Bluetooth-Steuerung vom Laptop aus ist Geschichte.

Wir verwenden im Moment einen wireless PS2-Controller von Lynxmotion. Durch seine Vielzahl von Knöpfen und Joysticks ist er geradezu dafür prädestiniert einen Roboter zu steuern. Weil PS2-Controller in großen Stückzahlen produziert werden, sind sie recht preiswert erhältlich.

Die Kommunikation mit dem Beinsteuerungs-FPGA des Roboters erfolgt über das übliche Sende-/Empfangsmodul, welches sonst in den Controllereingang der Playstation gesteckt wird (das Stecker-Gegenstück dazu mit offenen Kabelenden gibt es für ein paar Euro zu kaufen, siehe Bild unten).

Bei der Datenübermittlung handelt es sich um ein einfaches serielles Protokoll (der Roboter, bzw. die Playstation ist Master, der Controller Slave), basierend auf fünf Signalen: SELECT/ATTENTION, CLK und COMMAND sind Ausgänge am FPGA, die Requests zum Sende-/Empfangsmodul übertragen, DATA und ACKNOWLEDGE liefern die Antworten über den Zustand des Controllers (welche Knöpfe gedrückt sind, wie die Joysticks positioniert sind, usw.) von dort an die Eingänge des FPGA zurück. Die Auswertung des ACKNOWLEDGE-Signals ist dabei optional.

PS2_Anschluss

Anschlussbelegung:

Die Anschlussbelegung am Steckplatz des Sende-/Empfangsmoduls kann der folgenden Liste entnommen werden (von rechts nach links im Foto). Wir verwenden als Versorgungs- und als Signalspannungen 3.3 Volt, es sind jedoch auch 5.0 V möglich.

  1. DATA: Dies ist ein open-collector-Ausgang am Modul, zum Anschluss am Eingang des FPGAs muss ein pull-up Widerstand (ca. 1k-10k Ohm, wir verwenden 5k) gegen die Versorgungsspannung eingefügt werden.
  2. COMMAND: FPGA-Ausgang, auf dem die Kommandos gesendet werden.
  3. Spannungsversorgung der Vibrationsmotoren: (bei nicht-wireless Controllern) nicht angeschlossen.
  4. Ground
  5. Power: Spannungsversorgung, 3.3 V
  6. SELECT/ATTENTION: Dieses Signal signalisiert Beginn und Ende eines Requests des Masters (FPGA).
  7. CLK: Übertragungsclock. Mit diesem Signal wird die Übertragung der einzelnen Bits synchronisiert. Wir verwenden 250 kHz, auch 500 kHz sind möglich.
  8. ?: nicht angeschlossen.
  9. ACKNOWLEDGE: Ebenfalls ein open-collector Ausgang (pull-up Widerstand), der das Ende eines Bytes des DATA-Signals in jeder Antwort des Controllers signalisiert.

Timing der Signale:

Findet keine Übertragung statt, so hält der Roboter SEL/ATT, COMMAND und CLK logisch high, DATA und ACK sind durch die pull-up Widerstände ebenfalls high.

PS_SC1

  1. Um den Beginn eines Requests zu signalisieren, wird SEL/ATT vom FPGA auf low gesetzt.
  2. Nach ca. 15 Mikrosekunden beginnt die Übertragung mit dem Anlegen des LSB des ersten Bytes auf dem COMMAND-Signal, gleichzeitig mit dem Absenken der CLK-Leitung auf low. Wird nach einer halben Clock-Periode die CLK-Leitung auf high gesetzt, werden die Daten vom Controller übernommen. Bei diesem Protokoll werden also Signale in beide Richtungen (COMMAND und DATA) mit dem falling-edge von CLK gesetzt und jeweils mit dem rising-edge gelesen. Sind acht Bit auf diese Weise übertragen, so senkt der Controller die ACKNOWLEDGE-Leitung kurz ab. Danach können die nächsten Bytes auf dieselbe Weise gesendet werden.
  3. In diesem Zeitraum zwischen den Bytes ist CLK high und COMMAND low.
  4. Das jeweils letzte Byte eines Requests erhält kein acknowledge.
  5. Am Ende jedes Requests wird SEL/ATT wieder auf high gesetzt.
  6. Zwischen dem Beginn eines Requests und dem Beginn des darauf folgenden sollten typischerweise 16 ms liegen.

PS_SC3

Beispiel:

Standard Poll-Request (0x42): Nach dem Einschalten ist der Controller per Default im digitalen Mode. Durch folgende zwei Kommandos kann der Zustand der Buttons abgefragt werden:

byte      1:0x01   2:0x42   3:0x00   4:0x00   5:0x00
Command  10000000 01000010 00000000 00000000 00000000

byte      1:0xFF   2:0x41   3:0x5A   4:0xXX   5:0xXX
Data     11111111 10000010 01011010 abcdefgh ijklmnop

Antwort-Datenformat:

Dabei bedeuted die Antwort 0x41 des Controllers, dass er sich im digitalen Mode befindet (0x4) und genau ein 16 Bit Wort Daten übertragen werden. Die einzelnen Bits im 4. und 5. Byte der Antwort entsprechen den Buttons wie in folgender Tabelle gezeigt:

bit    a       b   c   d      e   f      g     h
Button Select  L3  R3  Start  Up  Right  Down  Left

bit    i   j   k   l   m         n  o  p
Button L2  R2  L1  R1  Triangle  O  X  Square

Übersicht der wichtigsten Requests:

  • 0x43 0x00 0x01 – Konfigurations-Mode an
  • 0x43 0x00 0x00 – Konfigurations-Mode aus
  • 0x44 0x00 0x01 – in analog-Mode umschalten
  • 0x44 0x00 0x00 – in digital-Mode umschalten

Es sind weitere Requests möglich, die wir jedoch bisher nicht einsetzen.

Lösungsvorschläge für häufige Probleme:

  • Sind auf der DATA- und der ACKNOWLEDGE-Leitung keinerlei Signale zu sehen, so ist wahrscheinlich die CLK-Frequenz nicht korrekt, oder die pull-up Widerstände wurden vergessen.
  • Sind auf der DATA-Leitung nur die ersten Bytes zu sehen, jedoch keine Daten, so ist vermutlich die Zeit zwischen zwei Requests zu kurz (siehe oben).
Dieser Beitrag wurde unter Sensoren, TOBOR NG veröffentlicht. Setze ein Lesezeichen auf den Permalink.