
IR-Fernsteuerung dekodieren
Elektronik-Labor Projekte AVR
Ein Mini-Hubschrauber
Graupner Nano Star 3 GYRO kam unvermutet zu Weihnachten angeflogen.
Erstaunlich, wie stabil so ein Gerät fliegt und wie gut man es
steuern kann. Wir haben eifrig geübt und schafften es schon fast,
die Spitze des Weihnachtsbaums unfallfrei zu umrunden.
Die Dreikanal-Proportionalfernsteuerung des Nano Star 3 GYRO arbeitet
optisch mit Infrarotlicht. Da will man natürlich mal genauer wissen, wie das funktioniert
und welche Art von Protokoll hier verwendet wird. Ein erster Test mit einer
Fotodiode zeigte, dass Impulspakete mit 40 kHz gesendet werden. Das passt zu
dem sichtbaren IR-Empfänger des Flugmodells. Also wird ein handelsüblicher
integrierter Fernseh-IR-Empfänger an das Oszilloskop gelegt.
Am
Anfang sieht man eine Päambel mit einem kurzen und einem extralangen
Impuls. Darauf folgen lange und kurze Impulse, die für 1/0-Bits stehen.
Bewegt man die Steuerknüppel, lassen sich einzelne Gruppen zuordnen.
Die ersten Versuche legen folgendes Protokoll nahe: Es werden binäre
Daten mit die MSB voraus gesendet. Der erste Kanal (Gas geben) hat
sieben Bit , der zweite (vorwärts/rückwärts) dagegen sevhs Bit. Dann
folgt mit vier Bit die Einstellung der Geräteadresse A,B oder C. Der
vierte Block (rechts/links drehen) hat wieder sechs Bit. Dann folgt ein
Bereich mit vier Bit, der durch den Fein-Trimmer beeinflusst wird. Am
Ende steht noch ein Bit, das immer Null ist.
Die ersten Versuche mit einem Mega32 mit 11 MHz
verwenden zwei Unterprogramme zur Ermittlung der Impulslänge. Irpulsestart
wartet beliebig lange auf einen Impuls und misst dann seine Länge in Einheiten
von 10 µs. Die dann folgenden Impulse werden mit dem Unterprogramm Irpulsein
gemessen. Der Unterschied ist, dass diesmal auch für die Impulspause eine
maximale Länge als Abbruchbedingung festgelegt wird. Das hat sich als wichtig
erwiesen, falls einmal die erwarteten Impulse ausbleiben. In diesem Fall wird
in endlicher Zeit eine Folge Einsen gelesen.
Do
Irpulsestart
T1 = T
Irpulsein
T2 = T
Irpulsein
T3 = T
Irpulsein
T4 = T
Print T1
Print T2
Print T3
Print T4
Print
Waitms 100
Loop
Sub Irpulsestart
T = 0
Do
Waitus 10
T = T + 1
Loop Until Pinc.7 = 0
T = 0
Do
Waitus 10
T = T + 1
If T > 250 Then Goto Fehler1
Loop Until Pinc.7 = 1
Fehler1:
End Sub
Sub Irpulsein
T = 0
Do
Waitus 10
T = T + 1
If T > 80 Then Goto Fehler2
Loop Until Pinc.7 = 0
T = 0
Do
Waitus 10
T = T + 1
If T > 250 Then Goto Fehler2
Loop Until Pinc.7 = 1
Fehler2:
End Sub
End
Dieser erste Test bringt die ersten vier Impulslängen eines Rahmens. Das Ergebnis sieht typischerweise so aus:
41
133
74
41
Kurze Impulse haben also eine Länge von 41, lange
von 74. Eine Länge von 133 steht für den langen Startimpuls. Mit dieser
Information lassen sich die Bits auswerten. Die einzelnen Abschnitte des
Datentelegramms werden den Variablen D1 bis D5 zugeordnet. Am Anfang steht eine
Schleife, in der auf das lange Startbit gewartet wird. das erste kurze Bit wird
dabei überlesen. Versuche haben gezeigt, dass damit die beste Störsicherheit
erreicht wird. Störimpulse, wie sie z.B. von Leuchtstoffröhren erzeugt werden,
kommen meist als kurze Impulse und werden ebenfalls übergangen. Der erste
Impuls der Fernsteuerung dient also hauptsächlich dazu den IR-Empfänger auf den
richtigen Empfangspegel vorzubereiten.
Do
Do
Irpulsestart
Loop Until T > 100
D1 = 0
For N = 1 To 7
Shift D1 , Left
Irpulsein
If T > 55 Then D1 = D1 + 1
Next N
D2 = 0
For N = 1 To 6
Shift D2 , Left
Irpulsein
If T > 55 Then D2 = D2 + 1
Next N
D3 = 0
For N = 1 To 4
Shift D3 , Left
Irpulsein
If T > 55 Then D3 = D3 + 1
Next N
D4 = 0
For N = 1 To 6
Shift D4 , Left
Irpulsein
If T > 55 Then D4 = D4 + 1
Next N
D5 = 0
For N = 1 To 4
Shift D5 , Left
Irpulsein
If T > 55 Then D5 = D5 + 1
Next N
'If D3 = 7 Then
Print D1
Print D2
Print D3
Print D4
Print D5
Print
Locate 2 , 1
Lcd D1
Lcd " "
Lcd D2
Lcd " "
Lcd D3
Lcd " "
Lcd D4
Lcd " "
Lcd D5
Lcd " "
Pwm1a = D1
Pwm1b = D2
Waitms 100
'End If
Loop
Im Terminal sieht man die empfangenen Daten.
Das dritte Byte steht für den eingestellten Kanal der Fernsteuerung: C=6, B=7,
A=15. Alle Daten werden seriell ausgegeben und auch im LCD dargestellt. Zusätzlich
werden zwei der Steuerwerte über die PWM-Ausgänge an die LED1 und LED2
ausgegeben. Damit hat man bereits eine sinnvolle Anwendung, ein
Zweikanal-Helligkeitssteuerung über die Fernsteuerung. Die Ausgange lässt sich
an eine Bedingung knüpfen, z.B. an den korrekt übertragenen Fernsteuerkanal B
(D3 = 7). In dem Fall hat man eine gute Sicherheit gegen Übertragungsfehler,
denn bei einer gestörten Übertragung würde mit hoher Wahrscheinlichkeit auch
der dritte Block gestört. In dem Fall blieben die zuletzt empfangenen Werte
gültig, bis wieder ungestörte Daten empfangen werden.
Download: ESM32irRemote.zip
Elektronik-Labor Projekte AVR