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