User Tools

Site Tools


Sidebar

Für Profis

Helpers

Tags


aok:sonstiges:kommunikation

Kommunikation

Kommunikation zwischen AOK und PC-Tools

Die Kommunikation zwischen PC und AOK erfolgt über die serielle Schnittstelle. Dabei wird 38400,8,N,1 als Kommunikationsparameter genutzt. Eine Verbindung über die USB-Schnittstelle des AOK ist nicht möglich. Beim Anschluss darauf achten, dass der PC RS-232-Pegel, der AOK aber TTL-Pegel (auf dem äußeren UART-Anschluss) hat. Es ist also ein Pegelwandler zwingend erforderlich. Hierzu kann die kleine Zusatzplatine aus dem AOK-Shop benutzt werden.

Debug-Werte

Der AOK sendet ständig Debug-Werte über UART. Es wird mit maximal möglicher Rate gesendet. Da über die Konfigurationsvariablen DEBUG1..6 ein Bitfeld der zu sendenden Debug-Werte gelegt werden kann, kann man so

  • die Anzahl der gesendeten Werte festlegen
  • die Rate der gesendeten Werte erhöhen, wenn man nicht alle Werte benötigt.

Der Wert Flightstatus (also die Nummer 86) wird immer gesendet.

Jeder Debug-Wert kommt als Frame vom AOK. Die Übertragung ist binär.

  • 0x1c NUM B1 B2 B3 B4 CRC
    • NUM die Nummer des Debug-Werts
    • B1..B4 die 4 Bytes des Wertes (MSB first, vorzeichenbehaftet)
    • CRC als XOR der Bytes NUM..B4

Der PC kann mit den folgenden 2-Byte-Befehlen das Senden der Debug-Werte aus-, bzw. einschalten:

  • 0x63 0x01 (Debug aus)
  • 0x63 0x02 (Debug an)

Reset-Befehl

Der AOK kann mittels

  • 0x63 0x07

zurückgesetzt werden. Es hat sich bewährt, vorher ein Debug-Off zu senden.

Setzen der Parameter

Parameter werden wie folgt gesetzt (also ins AOK-RAM geschrieben)

  • 0x73 NUM B1 B2 B3 B4 CRC
    • NUM die Nummer des Parameter-Wertes
    • B1..B4 die Bytes des Integer-Wertes
    • CRC ein XOR der Bytes NUM..B4

Der AOK bestätigt einen korrekten Empfang mit einem 'O' (0x4F), einen Fehler mit einem 'E' (0x45), ist das Inflight-Parameterflag nicht gesetzt aber der Kopter fliegt, wird ein I (0x49) gesendet.

Lesen der Parameter

Zum Lesen der Parameter und beim Übertragen sonstiger Informationen ist der Debug-Modus des AOK immer vorübergehend auszuschalten. Das sollte die Kommunikationssoftware auf PC-Seite berücksichtigen. Sie muss außerdem sicherstellen, das die aktuell im Buffer befindlichen Werte verarbeitet sind. Aufgrund von Verzögerungen kann es auch sein, dass nach dem Senden von Debug-Off an den AOK noch der eine oder andere Wert übertragen wird. Also aufpassen!

Ein Parameterwert (aus dem RAM) wird durch

  • 0x67 NUM
    • NUM ist die Nummer des Parameters

angefordert.

Der AOK sendet daraufhin (bis Version 0.30)

  • B1 B2 B3 B4 CRC
    • die CRC ist wieder ein XOR über die Werte B1..B4

Der AOK sendet (ab Version 0.31) daraufhin

  • FF NUM B1 B2 B3 B4 CRC
    • die CRC ist wieder ein XOR über die Werte B1..B4

Ab Version 0.35 gibt es auch einen Bulk-Read, anstatt 0x67 NUM schickt man 0x47 NUM, woraufhin der AOK 16 Antwortpakete für die Parameter NUM bis NUM+15 schickt.

Speichern ins Flash

  • 0x63 0x04 NUM
    • NUM ist die Nummer des Flash-Speichers

Laden aus dem Flash

  • 0x63 0x03 NUM
    • NUM ist die Nummer des Flash-Speichers

Setzen des Start-Sets

  • 0x63 0x05 NUM
    • NUM ist die Nummer des Flash-Speichers

Hoffe, dass ich alles richtig eingetippt habe. Nicht drauf verlassen, dass alles genau so funktioniert. Benutzung der Infos auf eigene Gefahr. Die mit der aktuellen Firmware ausgelieferten legends-Dateien enthalten die Namen der Debug-Werte bzw. Parameter in aufsteigender Reihenfolge.

Motortest

Im Moment ist der Motortest so:

  • 0x31 mot1value crc Info:(0x31 = '1')
  • 0x32 mot2value crc Info:(0x32 = '2')
  • 0x33 mot3value crc Info:(0x33 = '3')
  • 0x34 mot4value crc Info:(0x34 = '4')
  • 0x35 mot4value crc Info:(0x35 = '5')
  • 0x36 mot4value crc Info:(0x36 = '6')
  • 0x37 mot4value crc Info:(0x37 = '7')
  • 0x38 mot4value crc Info:(0x38 = '8')
  • 0x39 mot4value crc Info:(0x39 = '9')
  • 0x41 mot4value crc Info:(0x41 = 'A')
  • 0x42 mot4value crc Info:(0x42 = 'B')
  • 0x43 mot4value crc Info:(0x43 = 'C')

Dabei ist crc jeweils

  • 0x31 ^ mot1value
  • 0x32 ^ mot2value
  • 0x33 ^ mot3value
  • 0x34 ^ mot4value

usw.

Ein gesetzter Wert bleibt 500ms im Kopter erhalten, d.h. wird er nicht mehr gesendet, ist der Motortest automatisch nach 500ms beendet.

Laden der Waypoints aus dem Flash ins RAM

  • 0x63 0x09

Waypoint 31 (POI im Flash) wird in den Waypoint 254 (POI RAM geladen)

Speichern der Waypoints aus dem RAM ins Flash

  • 0x63 0x08

Waypoint 254 (POI im RAM) überschreibt den Waypoint 31 (POI Flash)

Setzen der WayPoints, der FBC und der POI Position

Parameter werden wie folgt gesetzt (also ins AOK-RAM geschrieben)

  • 0x77 NUM A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 CRC
    • NUM die Nummer des Parameter-Wertes
      • 0-30 WayPoint 1-31
      • 31 Mission POI (im Flash gespeicher)
      • 254 POI im RAM wird durch Setzen im Mission Fenster gespeichert
      • 255 FBC Dieser Punkt wird als Zielpunkt angeflogen
    • A1..A4 Koordinate Longitude
    • B1..B4 Koordinate Latitude
    • C1..C4 Waypoint Action 1
      • unten 16bit = die eingegene Zahl + Offset von 32768, d.h. wenn man den Wert “1” senden will, muss man 1+32768 = 32769 senden
      • oberen 16bit = Action | also die gewählte Aktion
        • 'none' = 0
        • 'pause [s]' = 1
        • 'hold & climb [m]' = 2
        • 'hold & sink [m]' = 3
        • 'fly & climb [m]' = 4
        • 'fly & sink [m]' = 5
        • 'set fly speed [cm/s]' = 6
    • D1..D4 Waypoint Action 2
      • s.o.
    • CRC ein XOR der Bytes NUM..D4

Der AOK bestätigt einen korrekten Empfang mit einem 'O' (0x4F), einen Fehler mit einem 'E'.

Beim Abfliegen einer Mission wird diese beim ersten Waypoint der die Koordinaten 0/0 oder -1/-1 hat, abgebrochen.

Lesen der WayPoints, der FBC und der POI Position

Ein Waypoint wird durch

  • 0x78 NUM
    • NUM ist die Nummer des Waypoints

angefordert.

Der AOK sendet daraufhin

  • 0x77 NUM A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 CRC
    • 0x77 Headerbyte
    • NUM die Nummer des Parameter-Wertes
      • 0-30 WayPoint 1-31
      • 31 Mission POI (im Flash gespeichert)
      • 254 POI im RAM wird durch Setzen im Mission Fenster gespeichert
      • 255 FBC Dieser Punkt wird als Zielpunkt angeflogen
    • A1..A4 Koordinate Longitude
    • B1..B4 Koordinate Latitude
    • C1..C4 Waypoint Action 1
      • unten 16bit = der gesetzte Wert + Offset von 32768, d.h. wenn man den Wert “32769” liest, muss man das als 32769-32768 = 1 interpretieren
      • oberen 16bit = Action | also die gewählte Aktion, Bedeutung s.o.
    • D1..D4 Waypoint Action 2
      • s.o.
    • CRC ein XOR der Bytes NUM..D4

External Control

  • Datenformat: 0x53 R1 R2 N1 N2 Y1 Y2 P1 P2 E1 E2 C
  • Bespiel: 53 20 00 E0 FF 00 00 00 00 F4 01 CA
    • Roll (R1+2) = 32
    • Nick (N1+2) = -32
    • Yaw (Y1+2) = 0
    • Pitch (P1+2) = 0
    • Expiry (E1+2) = 500ms
    • CRC (C) = CA (XOR von R1 bis E2)
  • Die Stickwerte für R, N, Y gehen von -200 bis +200
  • Der Stickwert für Pitch wird nicht verwendet - stattdessen zieht der Höhenregler bzw. RC-Gas-Stick.
  • Expiry ist ein Timeout, trifft innerhalb dieser Zeit kein weiterer External-Control Datensatz ein, hat wieder die RC-Fernsteuerung die Kontrolle.
  • RC-Potis / Schalterfunktionen können über external control nicht übermittelt werden.
aok/sonstiges/kommunikation.txt · Last modified: 18.02.2013 22:04 by smartinick