Search:
Menu Software / Developer
Information

Developer


Software Entwicklung

Auf dieser Seite möchte ich Entwicklern von Tools und Erweiterungen helfen,
die vorhandenen Schnittstellen zu verstehen.
Sollten Fragen zu den Kommandos oder Protokollen entstehen, so werde ich diese gerne beantworten.
Auch Wünsche für zusätzliche Implementierungen nehme ich gerne auf.


Bild Terminalprogramm (42k)
Putty zur Konfiguration

Konfiguration mit einem Terminalprogramm

Zur Konfiguration der XMegaControl lässt sich jedes beliebige Terminalprogramm einsetzen.
Ich verwende zu diesem Zweck gerne das Freeware Programm "Putty".

Alle Parameter lassen sich über die serielle Schnittstelle mit Hilfe von Kommandos ändern bzw. abrufen.
Die Debug Schnittstelle ist zusätzlich in der Lage Messwerte (Telemetrie Daten) zu streamen oder den Kopter zu steuern.
Über die Debug Schnittstelle kann eine Verbindung sowohl mit der XMC sowie XMN und dem UBLOX Modul aufgebaut werden.

Bild Terminalprogramm (48k)
Putty Einstellungen

Die Schnittstellen Parameter sind 57600 Baud None Parity. Hier eine Verbindung mit dem Windows Tool Putty.


Kommandos zur Konfiguration der XMC

Diese Liste gibt einen Überblick der Befehle um die XMC zu Konfigurieren oder zu Testen.

achs x (x=0/1 Schaltet Achskopplung ein oder aus) default=1
achs? (Zeigt an ob die Achskopplung eingeschaltet ist)
beepf (x=0/1 schaltet den Beep Generator aus oder ein, für Experimente am Kopter nervt der Beeper ja sonst)
bma? (Zeigt Register des Beschleunigungssensors an)
cal x (x=accel/gyros Kalibriert Accel oder Gyros und schreibt die Kalibrierungsdaten ins EEPROM)
cal? (Zeigt alle Kalibrierungsdaten an)
calaccx x (Legt den Kalibrierungswert der ACC X-Achse fest)
calaccy x (Legt den Kalibrierungswert der ACC Y-Achse fest)
calaccz x (Legt den Kalibrierungswert der ACC Z-Achse fest)
calgyrx x (Legt den Kalibrierungswert der GYRO X-Achse fest)
calgyry x (Legt den Kalibrierungswert der GYRO Y-Achse fest)
calgyrz x (Legt den Kalibrierungswert der GYRO Z-Achse fest)
calmagvx x (Legt den Kalibrierungswert für die Verstärkung der MAG X-Achse fest)
calmagvy x (Legt den Kalibrierungswert für die Verstärkung der MAG Y-Achse fest)
calmagvz x (Legt den Kalibrierungswert für die Verstärkung der MAG Z-Achse fest)
calmagx x (Legt den Kalibrierungswert der MAG X-Achse fest)
calmagy x (Legt den Kalibrierungswert der MAG Y-Achse fest)
calmagz x (Legt den Kalibrierungswert der MAG Z-Achse fest)
calwcor x (legt den Kalibrierungswert für die Winkeldeckung ACC und Gyro fest)
default (Setzt alle Parameter wieder auf Default Werte)
display? (Zeigt die Displayausgabe der Jetibox an)
drift x (x=0/1 Schaltet Driftkompensation ein oder aus) default=1
drift? (Zeigt an ob die Driftkompensation eingeschaltet ist)
driftz x (x=0/1 Schaltet Driftkompensation Z-Achse ein oder aus) default=1
driftz? (Zeigt an ob die Driftkompensation Z-Achse also der Kompass eingeschaltet ist)
error? (Zeigt den permanent-Errorspeicher an und löscht diesen dann)
gascorr x (Legt den Gaskorekturwert fest, Nick/Roll/Gier-Stellwert Gasdrosselung) default=5
gascorr? (Zeigt den Gasskorekturwert an, Nick/Roll/Gier-Stellwert Gasdrosselung)
gk lat lon (Angegebene Koordinate wird zum Sollpunkt > XMN)
hh x (x=0/1 Heading Hold ein oder ausschalten) default=0
hh? (Zeigt an ob Heading Hold ein oder ausgeschaltet ist)
hight x (x=0/1 1=Höhenregelung kann aktiviert werden) default=0
hight? (Zeigt an ob die Höhenregelung aktivierbar ist)
i2cerror? (Zeigt die Fehlercounter am I²C Motorbus an)
is (Scannt den internen I²C Bus nach Devices)
ir x y (Liest das Device x mit der Adresse y)
iw x y z (Schreibt in das Device x auf die Adresse y die Daten z)
init x (x=accel/gyros Initialisiert Accel und Gyros neu)
int x (x=0/1 0=stopt alle Lageberechnungen in Gyro-Interuptroutine 1=startet alle Lageberechnungen in Gyro-Interuptrutine)
jetia x (erzeugt einen Jeti Alarm mit Morsecode x)
jetib x (erzeugt einen Jeti Beep mit Morsecode x)
kamxl x (Legt die untere Servo Begrenzung für Roll fest)
kamxo x (Legt den Offset für den Rollausgleich fest)
kamxp x (Legt die Verstärkung für den Rollausgleich fest)
kamxu x (Legt die obere Servo Begrenzung für Roll fest)
kamyl x (Legt die untere Servo Begrenzung für Nick fest)
kamyo x (Legt den Offset für den Nickausgleich fest)
kamyp x (Legt die Verstärkung für den Nickausgleich fest)
kamyu x (Legt die obere Servo Begrenzung für Nick fest)
kd x (Legt den Differenzialfaktor des Nick Roll Gyro-Reglers fest) default=50
kd? (Zeigt den Differenzialfaktor des Nick Roll Gyro-Reglers an)
kdh x (Legt den Differenzialfaktor des Höhen-Reglers fest) default=10
kdh? (Zeigt den Differenzialfaktor des Höhen-Reglers an)
kdp x (Legt den Differenzialfaktor des Positionsreglers fest)
kdp? (Zeigt den Differenzialfaktor des Positionsreglers an)
kdw x (Legt den Differenzialfaktor des Nick Roll Winkel-Reglers fest) default=30
kdw? (Zeigt den Differenzialfaktor des Nick Roll Winkel-Reglers an)
kdz x (Legt den Differenzialfaktor des Gier Gyro-Reglers fest)
kdz? (Zeigt den Differenzialfaktor des Gier Gyro-Reglers an)
kdzh x (Legt den Differenzialfaktor des Höhen-Reglers ACC-Z-Achse fest) default=30
kdzh? (Zeigt den Differenzialfaktor des Höhen-Reglers ACC-Z-Achse an)
ki x (Legt den Integralfaktor des Nick Roll Gyro-Reglers fest) default=0
ki? (Zeigt den Integralfaktor des Nick Roll Gyro-Reglers an)
kip x (Legt den Integralfaktor des Positionsreglers fest)
kip? (Zeigt den Integralfaktor des Positionsreglers an)
kiw x (Legt den Integralfaktor des Nick Roll Winkel-Reglers fest) default=10
kiw? (Leigt den Integralfaktor des Nick Roll Winkel-Reglers an)
kiz x (Legt den Integralfaktor des Gier Gyro-Reglers fest)
kiz? (Zeigt den Integralfaktor des Gier Gyro-Reglers an)
koz (Legt den Gier Trim Wert fest)
koz? (Zeigt den Gier Trim Wert an)
kp x (Legt den Proportionalfaktor des Nick Roll Gyro-Reglers fest) default=50
kp? (Zeigt den Proportionalfaktor des Nick Roll Gyro-Reglers an)
kph x (Legt den Proportionalfaktor des Höhen-Reglers fest) default=35
kph? (Zeigt den Proportionalfaktor des Höhen-Reglers an)
kpp x (Legt den Proportionalfaktor des Positionsreglers fest)
kpp? (Zeigt den Proportionalfaktor des Positionsreglers an)
kpw x (Legt den Proportionalfaktor des Nick Roll Winkel-Reglers fest) default=80
kpw? (Zeigt den Proportionalfaktor des Nick Roll Winkel-Reglers an)
kpwz x (Legt den Proportionalfaktor des Gier Winkel-Reglers fest. x=0 Regler ist abgeschaltet) default=128
kpwz? (Zeigt den Proportionalfaktor des Gier Winkel-Reglers an)
kpz x (Legt den Proportionalfaktor des Gier Gyro-Reglers fest) default=78
kpz? (Zeigt den Proportionalfaktor des Gier Gyro-Reglers an)
ktwz x (Legt die Verzögerungszeit der Gier Lock Funktion fest [1/10s])
ktwz? (Zeigt die Verzögerungszeit der Gier Lock Funktion an [1/10s])
led_b x (x=0/1 schaltet LED blau)
led_g x (x=0/1 schaltet LED grün)
led_r x (x=0/1 schaltet LED rot)
led_y x (x=0/1 schaltet LED gelb)
mag? (Zeigt die Register und Auswertung des Magnetometers an)
matrix a b c (a=x/y/z/g b=1-8 c=Wert Legt die Werte in der Motormatrize fest) default=Quadro
matrix? (Zeigt die Motormatrize an Quadro, Hexa, Okta)
motorf x (x=0/1 Schaltet Motoren ein oder aus)
motorf? (Zeigt an ob die Motoren ein oder ausgeschaltet sind)
motorg? x (x=Motornummer Zeigt den Gaswert des Motors an)
motorm x (Legt den minimalen Gaswert der Motoren fest) default=2000
motorm? (Zeigt den minimalen Gaswert der Motoren an)
motorn x (x=4/6/8 Legt die Anzahl der Motoren fest) default=4
motorn? (Zeigt die Anzahl der verwendeten Motoren an 4/6/8)
motors? x (x=Motornummer Zeigt die Stromaufnahme des Motors an)
motorsf (x=0/1 Schaltet Motor Anlaufsicherung 1=aus oder 0=ein)
motorsf? (Zeigt an ob die Motor Anlauf Sicherung ausgeschaltet ist)
motorstartg x (Legt den Gas Wert für den Start der Motoren fest. Sicheres Anlaufen.) default = 0
motorstartg? (Zeigt den Gas Wert für den Start der Motoren an)
motorstartt x (Legt die Zeit in 1/10 Sek für den Start der Motoren fest. Sicheres Anlaufen.) default = 0
motorstartt? (Zeigt die Zeit in 1/10 Sek für den Start der Motoren an)
motort x y (Motor Test x=Motornummer y=Gaswert, reagiert nur bei ausgeschalteten Motoren)
motorta x (Motor Test für alle Motoren x=Gaswert)
motortyp x (x=0/1 Legt die Ansteuerungsart der Motoren fest 0=I²C 1=PWM) default=1
motortyp? (Zeigt die Ansteuerungsart der Motoren an)
mst x (Legt die Start und Stop Verzögerung der Motoren fest)
mst? (Zeigt die Start und Stop Verzögerung der Motoren an x=1/10Sek)
navi x (x=0/1 1=Navigation mit Schalter aktivierbar)
navi? (Zeigt an ob die Navigation mit dem Schalter aktivierbar ist) default=0
notgas x (Legt den Gas Regler Wert zum langsamen Sinken fest) default=10000
notgas? (Zeigt den Gas Regler Wert zum langsamen Sinken an)
notgaszeit x (x=Sek Legt die Tot Gas Zeit fest) default=20
notgaszeit? (Zeigt die Not Gas Zeit an)
out x y (x=1/2/3/4 Plotkanal y=Messwert Ausgabe einiger Messwerte und Zwischenergebnisse in Echtzeit)
out x (x=start/stop Startet oder stopt die Echtzeit Messwert Ausgabe
ppm? (Zeigt alle PPM Kanäle und Kanalzustand der Summensignalauswertung)
ppmcal x (Legt den Kalibrierungswert für die PPM-Mittelstellung fest) default=5960
ppmcal? (Zeigt den Kalibrierungswert für die PPM-Mittelstellung an)
ppmcala x (x=0/1 1=Automatische PPM Kalibrierung ist an) default=0
ppmcala? (Zeigt an ob die Automatische PPM Kalibrierung aktiv ist)
ppmch x (x=0/9/12 Legt die Anzahl der Kanäle im Summensignal fest 0=Automatik ohne PPM Sicherheitsauswerung) default=0
ppmmix x y (Zuweisung der Kanäle x=Ausgangskanal y=Einganskanal) default= 1=1 2=2 usw.
ppmmix? (Zeigt die Zuweisung aller PPM Kanäle an)
press? (Zeigt die Register und Auswertung des Luftdrucksensors an)
pwmfa x (Legt die Framezeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 fest) default=5000 2,5ms
pwmfa? (Zeigt die Framezeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 an)
pwmfb x (Legt die Framezeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 fest) default=5000 2,5ms
pwmfb? (Zeigt die Framezeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 an)
pwmfc x (Legt die Framezeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 fest) default=5000 2,5ms
pwmfc? (Zeigt die Framezeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 an)
pwmoa x (Legt den Offsetzeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 fest) default=2400 1,2ms
pwmoa? (Zeigt die Offsetzeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 an)
pwmob x (Legt den Offsetzeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 fest) default=2400 1,2ms
pwmob? (Zeigt die Offsetzeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 an)
pwmoc x (Legt den Offsetzeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 fest) default=2200 1,1ms
pwmoc? (Zeigt die Offsetzeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 an)
pwmra x (Legt den Range der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 fest) default=55 0,6ms
pwmra? (Zeigt den Range der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 an)
pwmrb x (Legt den Range der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 fest) default=55 0,6ms
pwmrb? (Zeigt den Range der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 an)
pwmrc x (Legt den Range der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 fest) default=41 0,8ms
pwmrc? (Zeigt den Range der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 an)
pwmsa x (Legt den Startzeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 fest) default=2200 1,1ms
pwmsa? (Zeigt die Startzeit der PWM Ausgänge PWM0,PWM1,PWM2,PWM3 an)
pwmsb x (Legt den Startzeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 fest) default=2200 1,1ms
pwmsb? (Zeigt die Startzeit der PWM Ausgänge PWM4,PWM5,PWM6,PWM7 an)
pwmsc x (Legt den Startzeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 fest) default=2200 1,1ms
pwmsc? (Zeigt die den Startzeit der PWM Ausgänge PWM8,PWM9,PWM10,PWM11 an)
readeeprom (Liest alle Parameter aus dem EEPROM)
reboot (Startet XMegaControl Firmware neu)
rvpmin x (Legt die Mindestgeschwindigkeit für den D-Positionsreglers fest)
rvpmin? (Zeigt die Mindestgeschwindigkeit für den D-Positionsreglers an)
rx x (x=0/1/2 Legt den Typ des Empfängers fest 0=PPM 1=Graupner 2=Jeti 3=Spektrum) default=0
rx? (Zeigt den Empfängertyp an)
rydpmax x (Legt den maximalen Stellwert des D-Positionsreglers fest)
rydpmax? (Zeigt den maximalen Stellwert des D-Positionsreglers an)
ryhmax x (Legt den maximalen Stellwert des Höhen-Reglers fest) default=3000
ryhmax? (Zeigt den maximalen Stellwert des Höhen-Reglers an)
ryipmax x (Legt den maximalen Stellwert des I-Positionsreglers fest)
ryipmax? (Zeigt den maximalen Stellwert des I-Positionsreglers an)
rymax x (Legt den maximalen Stellwert des Nick Roll Gyro-Reglers fest) default=16000
rymax? (Zeigt den maximalen Stellwert des Nick Roll Gyro-Reglers an)
ryppmax x (Legt den maximalen Stellwert des P-Positionsreglers fest)
ryppmax? (Zeigt den maximalen Stellwert des P-Positionsreglers an)
ryzmax x (Legt den maximalen Stellwert des Gier Gyro-Reglers fest) default=12000
ryzmax? (Zeigt den maximalen Stellwert des Gier Gyro-Reglers an)
setting? (Gibt alle Parameter aus)
start x (x=accel/gyros Testausgabe Accel oder Gyros)
stickdp x (Legt den Differenzialfaktor des Roll- Nicksticks fest)
stickdp? (Zeigt den Differenzialfaktor des Roll- Nicksticks an)
stickdt x (Legt die Zeitkonstante des Differenzialanteils des Roll- Nicksticks an)
stickdt? (Zeigt die Zeitkonstante des Differenzialanteils des Roll- Nicksticks an)
stickp x (Legt den Verstärkungswert des Roll- Nicksticks fest) default=2500
stickp? (Zeigt den Verstärkungswert des Roll- Nicksticks an)
stickpg x (Legt den Verstärkungswert des Gassticks fest) default=8
stickpg? (Zeigt den Verstärkungswert des Gassticks an)
stickpz x (Legt den Verstärkungswert des Giersticks fest) default=4096
stickpz? (Zeigt den Verstärkungswert des Giersticks an)
stop (Beendet alle Testausgaben)
vbat? (Zeigt Status der Spannungsüberwachung und Kalibrierung an)
vcal x (Kalibrierung der Spanungsüberwachung x=mV pro Bit)
version? (Zeigt die installierte Firmware Version der XMegaControl an)
vmin x (Legt untere Spannung für die Spannungswarnung fest x=mV) default=3300
wp n 0 0 0 0 0 0 0 (Ende der Waypointliste ins XMN EEPROM schreiben)
wp n lat lon dir high radius time kam (Waypoint ins XMN EEPROM schreiben)
writeeeprom (Schreibt alle veränderten Parameter ins EEPROM)
xmc (Wechselt die Kommandoschnittstelle zur XMegaControl)
xmn (Wechselt die Kommandoschnittstelle zur XMegaNavi)
xmncom x y z (Befehl x wird mit Parametern y z auf XMN ausgeführt)

Kommandos zur Konfiguration der XMN

Diese Liste gibt einen Überblick der Befehle um die XMN zu Konfigurieren oder zu Testen.

rebxmn (Startet XMegaNavi Firmware neu)
version? (Zeigt die installierte Firmware Version der XMegaNavi an)
cm x (x=0 Echo ein / x=1 Echo aus)
gps (Kommunikation zum GPS Modul wird durchgeroutet)
xmn (Kommunikation wieder auf die XMN)
test x (x=pos Positionsdaten GPS und Dezimal wird ausgegeben)
(x=dif Differenz zum Sollpunkt wird ausgegeben
(x=vel Geschwindigkeit in Ost- und Nordrichtung
(x=fix GPS FIX Information)
(x=dis Distanz zum Ziel)
(x=reg Regler Ausgabe)
output x' (Ausgabe für Graph festlegen)
(x=rp Ausgabe des Stellwertes P-Regler)
(x=rd Ausgabe des Stellwertes D-Regler)
(x=ri Ausgabe des Stellwertes I-Regler)
gp (Istpunkt wird zum Sollpunkt)
sh (Istpunkt wird zum Startpunkt)
gh (Startpunkt wird zum Sollpunkt)
gw (Waypoint-Liste wird zum Sollpunkt)
gk lat lon (Angegebene Koordinate wird zum Sollpunkt)
vs z x y (z=Kompass Wert (z-Winkel) wird übermittelt um die Differenz zum Zielvektor zu ermitteln, x/y=Stickposition)
wp n lat lon dir high radius time kam (Waypoint ins XMN EEPROM schreiben)
wp n 0 0 0 0 0 0 0 (Ende der Waypointliste ins XMN EEPROM schreiben)
wpr n (Waypoint aus XMN EEPROM auslesen)
binary x (x=1 Binary Protokoll starten und zur XMC senden)

Folgende Befehle können sowohl auf der XMC als auch auf der XMN ausgeführt werden.
Besser ist aber die Eingabe auf der XMC da die Speicherung der Parameter mit "writeeeprom" nur dort erfolgen kann.

kpp x (Regel_kp_p (PID Regler Faktoren) 20 = 0,3 Grad/m
kip x (Regel_ki_p)
kdp x (Regel_kd_p) 14 = 3 Grad bei 6m/s
rvpmax x (legt die maximale Geschwindigkeit für die dynamische D-Regelung fest)
ryppmax x (Regel_yp_p_max Max. Stellwert) 545 = 3 Grad
ryipmax x (Regel_yi_p_max Max. Stellwert)
rydpmax x (Regel_yd_p_max Max. Stellwert) 545 = 3 Grad


Terminal Funktionen für Experten


Firmware Version

Um die installierte Firmwareversion zu erfahren, bitte folgendes ins Terminal eingeben:
>version?
XMegaFlight 0.89
05-04-2012 23:25:00
EEPROM Ver:15
OK

Fehler auslesen

Die rote LED zeigt an, ob Fehler vorhanden sind.
Blinkt diese LED, so handelt es sich um einen permanenten Fehler.
Der Fehler ist also zur Zeit noch vorhanden.
Leuchtet die rote LED dagegen dauernd, so wurde im Betrieb ein Fehler erkannt,
welcher aber zur Zeit nicht mehr vorhanden ist.
Um die genaue Art des Fehlers zu ermitteln, verwendet man den Befehl:

>error?
00000000
00000000
OK

Die erste Zeile der Ausgabe zeigt die gespeicherten Fehler an.
Die zweite Zeile zeigt die aktuellen Fehler an.
Beim Aufruf des Befehls wird der gespeicherte Fehlerstatus gelöscht.
Folgende Fehler werden binär ausgegeben:
00000001 : PPM Einganssignal für mehr als 20 Zyklen ausgefallen.
00000010 : Zellenspannung unter vmin gesunken.
00000100 : I²C Fehler am Motorbus aufgetreten.
00001000 : Magnet Error am Kompass aufgetreten.
00010000 : GPS Error, keine Daten von der XMN oder kein FIX.
Fehler können auch in Kombination auftreten.
Ein PPM-Fehler und ein I²C Fehler werden dann im Bitmuster als ODER Verknüfung dargestellt:
00000101

I²C-Fehler am Motor Bus können noch einmal gesonder analysiert werden:

>i2cerror?
I2C Error Report:
M1 ACK1:0 BUS1:0 ACK2:1 BUS2:0 BUF:0
M2 ACK1:0 BUS1:0 ACK2:2 BUS2:0 BUF:0
M3 ACK1:0 BUS1:0 ACK2:0 BUS2:0 BUF:0
M4 ACK1:1 BUS1:0 ACK2:3 BUS2:0 BUF:2
M5 ACK1:0 BUS1:0 ACK2:0 BUS2:0 BUF:0
M6 ACK1:1 BUS1:0 ACK2:2 BUS2:0 BUF:0
OK

Speichern aller geänderten Parameter

Nach der Trennung des Akkus von der IMU gehen alle eingestellten Parameter aus dem RAM verloren.
Damit diese trotzdem beim nächsten Start der IMU zur Verfügung stehen, müssen sie mit dem Komando:
>writeeeprom
OK
ins EEPROM geschrieben werden. Die Firmware der IMU liest alle Werte nach einem Neustart aus dem EEPROM wieder zurück ins RAM.
Sollte sich ein eingestellter Parameter als nützlich erweisen, also bitte nicht vergessen ihn mit diesem Kommando zu speichern.

Sollte man nach einer Parameteränderung doch lieber wieder den alten Wert verwenden, so kann dieser aus dem EEPROM zurückgelesen werden.
>readeeprom
OK
Mit dem Befehl:
>default
OK
werden alle Parameter auf den Default Zustand zurückgesetzt.
Die IMU befindet sich also wieder im Werkszustand.

Um alle Parameter anzuzeigen verwendet man:
XMC:>setting?

[Version]
eeprom 36
hw 29
typ 1

[Receiver]
ppmch 0
rx 2
ppmcala 0
ppmcal 0
ppmmix 1 1
ppmmix 2 2
ppmmix 3 3
ppmmix 4 4
ppmmix 5 5
ppmmix 6 6
ppmmix 7 7
ppmmix 8 8
ppmmix 9 9
ppmmix 10 11
ppmmix 11 10
ppmmix 12 12

[Batterie]
vcal 10957
vmin 3276

[Motor]
motortyp 0
motorstartg 0
motorstartt 0
motorm 2000
motorn 4
gascorr 5
matrixx 0 0 -256 256 0 0 0 0
matrixy -256 256 0 0 0 0 0 0
matrixz 256 256 -256 -256 0 0 0 0
matrixg 512 512 512 512 0 0 0 0

[Failsave]
notgas 10000
notgaszeit 20

[Flag]
achs 1
drift 1
driftz 1
hh 2
hight 1
navi 1

[Stick]
stickp 150
stickpz 200
stickpg 8
stickdt 8
stickdp 30

[ReglerL]
kpw 50
kiw 16
kdw 15
kp 50
kd 50
rymax 24000
kpwz 128
ktwz 10
kpz 100
kdz 20
ryzmax 12000

[ReglerH]
kph 40
kdh 80
kdzh 80
ryhmax 3000

[ReglerP]
kpp 50
kip 4
kdp 330
rvpmax 350
ryppmax 1800
ryipmax 1800
rydpmax 1000

[PWM]
pwmfa 40000
pwmfb 5000
pwmfc 5000
pwmsa 2200
pwmsb 2200
pwmsc 2200
pwmoa 2400
pwmob 2400
pwmoc 2200
pwmra 47
pwmrb 47
pwmrc 41

[Kamera]
kamxp 0
kamxo 0
kamxu 2000
kamxl -2000
kamyp 0
kamyo 0
kamyu 2000
kamyl -2000

[CAL]
calgyrx -35
calgyry 33
calgyrz 5
calaccx -117
calaccy 225
calaccz 8651
calmagx -59
calmagy -238
calmagz -40
calmagvx 49
calmagvy 47
calmagvz 52
calmagde 0

OK

Schnittstellen für Programmierer


Telemetrie Protokoll

Abonieren von Telemetrie Streams

Telemetrie Daten können von der XMC über die Debug Schnittstelle aboniert werden.
Es stehen 4 getrennte Übertragungskanäle für jeweils ein Abonement zur Verfügung.
Mit Hilfe des out Befehls wird ein Abonement auf einem Übertrakungskanal angefordert (Telemetrie-Stream).
Die Daten werden dann so lange gesendet, bis das Abonement wieder abbestellt wird.
Es handelt sich bei den Telemetriedaten um ein Binary-Protokoll.

Hier ein Beispiel:

XMC:>out 1 vbat

Mit diesem Befehl wird die Batterie Spannung auf dem Übertragungskanal 1 aboniert.
Es gibt jetzt noch ein zweites Kommando, welches die Übertragung aller Kanäle startet und auch wieder stoppen kann (also ein Hauptschalter).
Hier der Befehl zum Starten:

XMC:>out start

Ab jetzt wird die Batteriespannung im Binary-Protokoll auf Kanal 1 gestreamt. Um alle Stream Ausgaben zu unterbrechen ist dieses Kommando zu verwenden:

XMC:>out stop

Dabei bleibt das Abonement jedoch erhalten und der Stream kann jeder Zeit wieder gestartet werden. Um das Abonement auf Kanal 1 abzubestellen verwendet man dann:

XMC:>out 1 0

Telemetrie Binary Protokoll

Die Daten eines Telemetrie-Kanals können aus bis zu 16 verschiedenen Datensätzen bestehen.
Im vorherigen Beispiel (Batteriespannung), war es nur ein Datensatz.
Bei den Fernsteuerkanälen sind es z.B. 12 Datensätze.
Jeder Kanal sendet 40 Datensätze pro Sekunde.
Ein Datenpaket kann aus 4 oder 6 Bytes bestehen.
In einem Datenpaket sind Datensätze von 2 Byte oder 4 Byte enthalten.
Die Datensätze haben folgenden Aufbau:

SyncSubChannel+Typ+ChannelData (Int16/Int32)(2/4 Bytes)
1. Byte2.Byte3.Byte, 4.Byte (5.Byte, 6.Byte)
bx10101010bxXXXXXXXX2 oder 4 Bytes Data
hxAAbxXXXX0XXXMSB, LSB (Int16)
hxAAbxXXXX1XXXMSB, 3. Byte, 2. Byte, LSB (Int32)

Die Übertragung startet immer mit einem Sync Byte (hxAA bx10101010).
Dann folgt ein Byte mit verschiedenen Kennungen.
Channel
Hier wird der Kanal (1-4) zurückgemeldet, auf welchem die Daten angefordert wurden.
Typ
Gibt Auskunft darüber ob die Daten vom Typ Int16 oder Int32 sind (0 = Int16, 1 = Int32).
SubChannel
Der SubChannel zeigt an, welcher Datensatz folgt (0-15).

Daten, welche aboniert weren können

gyro_x, gyro_y, gyro_z

  • SubChannel_0 (Typ_0 = Int16):
    Die direkten GYRO Messwerte der drei Achsen.

gmax_x, gmax_y, gmax_z

  • SubChannel_0 (Typ_0 = Int16):
    Die maximalen absoluten GYRO Messwert zwischen zwei Datenübertragungen.
    Die Werte können für Vibrationsmessungen herangezogen werden.

wink_x, wink_y, wink_z

  • SubChannel_0 (Typ_0 = Int16):
    Die berechneten und fusionierten Lage-Winkel aus GYRO und ACC.

stick_x, stick_y, stick_z

  • SubChannel_0 (Typ_0 = Int16):
    Die berechneten Messwerte der Stickausschläge.
    Hier wird die Verstärkung und Differenzierung aus den Stickeinstellungen mit berücksichtigt.

diff_x, diff_y, diff_z

  • SubChannel_0 (Typ_0 = Int16):
    Die Differenz zwischen Sollwert und Istwert (Stickwert und Lage-Winkel).

stell_x, stell_y, stell_z, stell_h

  • SubChannel_0 (Typ_0 = Int16):
    Die Stellwerte, Ausgang der Regler.

acc_x, acc_y, acc_z

  • SubChannel_0 (Typ_0 = Int16):
    Die direkten ACC Messwerte der drei Achsen.

acc3_x, acc3_y, acc3_z

  • SubChannel_0 (Typ_0 = Int16):
    Die stark gemittelten ACC Messwerte der drei Achsen.

accw_x, accw_y

  • SubChannel_0 (Typ_0 = Int16):
    Die berechneten Lage-Winkel aus ACC.

kompa_x, kompa_y

  • SubChannel_0 (Typ_0 = Int16):
    Die Beschleunigung in X/Y-Richtung auf die Horizontale transformiert.

mag_x, mag_y, mag_z

  • SubChannel_0 (Typ_0 = Int16):
    Die direkten Magnetometer Messwerte der drei Achsen.

kompm_x, kompm_x

  • SubChannel_0 (Typ_0 = Int16):
    Die Kompass Werte in X/Y-Richtung auf die Horizontale transformiert.

kompm_w

  • SubChannel_0 (Typ_0 = Int16):
    Der berechnete Kompass Winkel.

press_n

  • SubChannel_0 (Typ_0 = Int16):
    Der Luftdruck auf den Start-Druck bezogen.

ppm

  • SubChannel_0 (Typ_0 = Int16):
    Der Fernsteuerkanal 1.
  • SubChannel_1 (Typ_0 = Int16):
    Der Fernsteuerkanal 2.
  • SubChannel_2 (Typ_0 = Int16):
    Der Fernsteuerkanal 3.
  • SubChannel_3 (Typ_0 = Int16):
    Der Fernsteuerkanal 4.
  • SubChannel_4 (Typ_0 = Int16):
    Der Fernsteuerkanal 5.
  • SubChannel_5 (Typ_0 = Int16):
    Der Fernsteuerkanal 6.
  • SubChannel_6 (Typ_0 = Int16):
    Der Fernsteuerkanal 7.
  • SubChannel_7 (Typ_0 = Int16):
    Der Fernsteuerkanal 8.
  • SubChannel_8 (Typ_0 = Int16):
    Der Fernsteuerkanal 9.
  • SubChannel_9 (Typ_0 = Int16):
    Der Fernsteuerkanal 10.
  • SubChannel_10 (Typ_0 = Int16):
    Der Fernsteuerkanal 11.
  • SubChannel_11 (Typ_0 = Int16):
    Der Fernsteuerkanal 12.

vbat

  • SubChannel_0 (Typ_0 = Int16):
    Die Batteriespannung.
    Um die tatsächliche Batteriespannung zu erhalten,
    muss noch die Kalibrierung berücksichtigt werden:
    vbat * vcal / 1000000

m1, m2, m3, m4, m5, m6, m7, m8

  • SubChannel_0 (Typ_0 = Int16):
    Die Motoren Ansteuerungswerte.

besz

  • SubChannel_0 (Typ_0 = Int16):
    Die Beschleunigung der Z-Achse.

xmn

  • SubChannel_0 (Typ_0 = Int16):
    Messwert aus der XMegaNavi, welcher vorher auf der XMN aboniert wird.

gpx

  • SubChannel_0 (Typ_1 = Int32):
    Die GPS-X-Position (Longitude).
  • SubChannel_1 (Typ_1 = Int32):
    Die GPS-Y-Position (Latitude).
  • SubChannel_2 (Typ_1 = Int32):
    Die GPS-H-Position (Height).
  • SubChannel_3 (Typ_0 = Int16):
    Anzahl der verwendeten GPS Satelliten.
  • SubChannel_4 (Typ_0 = Int16):
    Die Kopterausrichtung fusioniert aus Magnetometer + Gyro.
  • SubChannel_5 (Typ_0 = Int16):
    Die LiPo Akkuspannung am Kopter. (Roh-Daten Digits)
  • SubChannel_6 (Typ_0 = Int16):
    Die barometrische Höhe, bezogen auf den Startpunkt. (Roh-Daten Digits)
  • SubChannel_7 (Typ_0 = Int16):
    Der Roll Winkel (X-Achse)
  • SubChannel_8 (Typ_0 = Int16):
    Der Nick Winkel (Y-Achse)
  • SubChannel_9 (Typ_0 = Int16):
    Die Geschwindigkeit über Grund

gpx_b

  • SubChannel_0 (Typ_0 = Int16):
    Der Gas Sollwert (Stick oder Höhen-Reglung)
  • SubChannel_1 (Typ_0 = Int16):
    Der Roll Sollwert (Stick oder Positions-Regelung)
  • SubChannel_2 (Typ_0 = Int16):
    Der Nick Sollwert (Stick oder Positions-Regelung)
  • SubChannel_3 (Typ_0 = Int16):
    Der Gier Sollwert (Stick oder Kompass-Regelung)
  • SubChannel_4 (Typ_0 = Int16):
    Aktueller Error Code

status

  • SubChannel 0 (Typ_0 = Int16):
    Dieser Wert wird nur nach einer Änderung übertragen.
    Es gibt folgende Statusmeldungen:
    Out_status = 1 "Motoren an"
    Out_status = 2 "Motor Sicherung aus"
    Out_status = 3 "Motoren aus"
    Out_status = 4 "Kalibrierung ACC"
    Out_status = 5 "1. Kalibrierung Kompass warten"
    Out_status = 6 "Kompass nicht eingeschaltet"
    Out_status = 7 "Kalibrierung GYRO und Druck"
    Out_status = 8 "Kalibrierung PPM"
    Out_status = 9 "2. Kalibrierung Kompass Roll"
    Out_status = 10 "3. Kalibrierung Kompass Nick"
    Out_status = 11 "4. Kalibrierung Kompass Gier"
    Out_status = 12 "Kompass Kalibrierung erfolgreich"
    Out_status = 13 "Kompass Kalibrierung fehlerhaft"
    Out_status = 14 "Höhenregelung an"
    Out_status = 15 "Höhenregelung aus"
    Out_status = 16 "GPS kommt zurück"
    Out_status = 17 "GPS hält Position"
    Out_status = 18 "GPS Wegpunkt"
    Out_status = 19 "GPS aus"
    Out_status = 20 "Heading Hold Flugmodus an"
    Out_status = 21 "Heading Hold Flugmodus aus"
    Out_status = 22 "Foto Flugmodus an"
    Out_status = 23 "Foto Flugmodus aus"
    Out_status = 24 "Acro Flugmodus an"
    Out_status = 25 "Acro Flugmodus aus"
    Out_status = 26 "Fehler Empfänger"
    Out_status = 27 "Fehler Batterie"
    Out_status = 28 "Fehler I2C"
    Out_status = 29 "Fehler Kompass"
    Out_status = 30 "Fehler GPS"

Beispiel in VB.NET

Damit Ihr das ganze auch praktisch nachvollziehen könnt, hier ein Beispiel in VB.NET: BAT_DEMO.zip

In dem Beispiel wird zunächst eine Verbindung zur COM Schnittstelle hergestellt.
Nach dem Drücken auf den Button "Read Settings", werden alle Parameter in einen String eingelesen.
Aus diesem String ist es dann möglich, mit einem Funktionsaufruf einen bestimmten Parameter auszulesen.
In dem Beispiel ist es die Kalibrierung für die Spannungsmessung.
Der Button "Start" aboniert dann einen Stream mit der Batteriespannung,
welche dann über einen Timer regelmäßig zur Anzeige kommt.
Der Kalibrierungswert, wird dabei mit einbezogen.

Steuerung des Kopters über die Debug-Schnittstelle

Fly to this Point

Die Koordinaten zu einem neuen Zielpunk kann die XMC über ein spezielles Kommando empfangen.
gk lat lon lat=Latitude lon=Longitude (Koordinaten als Int32 Wert)
Befindet sich der Kopter in "Position Hold" oder "Coming Home", wird der Befehl sofort ausgeführt und die neue Sollposition übernommen.
Der Kopter fliegt zum Ziel.