Eigenbau Fernsteuerung mit HF-Modul Frsky XJT: Anbindung Empfänger X8R/S8R

Hallo.

ich baue gerade eine alte Graupner FM6014 Fernsteuerung auf Basis eines Arduino Mikrocontrollers mit Display und diversen zusätzlichen Schaltern und Reglern um. Die Knüppel, Schalter und Potis sind bereits angeschlossen und konnten mit einem separatem Arduino Nano Testaufbau überprüft werden. Die Hardware-Umbauten sind soweit erledigt. Ich hoffe, die beiden angehängten Fotos ermöglichen einen ausreichenden Eindruck:

Sender (außen).jpg
Sender (innen).jpg

Nachdem ich in meinem ersten Projekt noch ein altes Graupner FM-Sendemodul verwendet habe (Details zu dem Umbau findet ihr hier), möchte ich diesmal 2,4GHz nutzen und habe mich für ein Frsky-HF-Modul entschieden (viel mehr Alternativen außer von Jeti gibt es leider nicht mehr). Daher ist der nächste Schritt nun der Test und Anbindung des HF-Moduls. Leider funktioniert die Verbindung nicht und ich bin auf der Suche nach Hilfe und Tipps.

Aktueller Stand:
Mit einem Arduino Nano erzeuge ich ein PPM-Signal mit 8 Kanälen und 5V Pegel. Die Versorgung des HF-Moduls erfolgt über die Batterie der Fernsteuerung (Lipo 2S, 7,2V), der Arduino wird vom PC versorgt, Masse ist verbunden. Das PPM-Signal ist soweit in Ordnung, wie die Bilder vom Oszilloskop und Testaufbau zeigen:

PXL_20230407_065322964.jpg
PXL_20230407_065426582.jpg

Das Modul ist mit PPM, Batt+ und Batt-/GND wie folgt angeschlossen:

XJT-Pinbelegung.jpg

Den gleichen Code zur PPM Ereugung habe ich auch in meinem Vorgängerprojekt mit einem analogen HF-Modul genutzt. Dies hat tadellos funktioniert. Den zugehörigen Arduino Code habe ich unten angehängt (Test_PPM.txt, umbenannt als Textdatei). Somit scheint die Kette bis zum Eingang HF-Modul korrekt zu funktionieren.

Und nun zu meinem Problem:
In meinem Test bespiele ich alle acht Kanäle mit einem Sinus-Signal, sodass sich an jedem Kanal der Servo hin- und herbewegen müsste. Im ersten Schritt habe ich einen Frsky S8R Empfänger verwendet. Diesen konnte ich erfolgreich binden, sowohl der Empfänger als auch der Sender leuchtet grün, allerdings funktionieren die Servos nicht richig:
  • Kanal 1 und 3: keine Reaktion
  • Kanal 2, 4-8: Servo bewegt sich im Sinne eines Sinus hin und her, aber sehr ruckelig und auch leicht verzögert
Das PPM-Signal am Empfänger sieht aber ok aus, an Kanal 1 und 3 konnte ich nichts messen:

PXL_20230407_065643857.jpg
PXL_20230407_091030812.jpg

Da sich an Kanal 1 und 3 gar nichts bewegt und die übrigen nicht gleichmäßig bzw. ruckelig, habe ich auf einen defekten Empfänger geschlossen. Im zweiten Versuch habe ich daher zu einem Frsky X8R gegriffen. Auch diesen konnte ich erfolgreich binden, aber leider war es das dann auch. Der Servo zeigt an keinem der Ausgänge eine Bewegung.

PXL_20230407_091058108.jpg

Die Pegel für Plus und Minus am Empfänger sind vorhanden (4,8V), der Signalpegel ist 0, also hier kommt nichts an. Sowohl Sender als auch beide Empfänger habe ich mit dem letzten Firmware-Stand begespielt. Leider ist die Doku zu den Frsky-Komponenten sehr düfrtig, bei folgenden Punkten bin ich mir noch nicht zu 100 Prozent sicher:

  • Eingänge HF-Modul korrekt (offene Pins ohne Bedeutung)?
  • Pegel PPM-Signal: 5 V oder wie Batterie auf 7,2V
  • Muss der PPM-Pegel invertiert sein? (Hintergrund: Beim HF-Modul von Graupner gab es einen Transistor zur Invertierung, vermutlich um die Leistung sicherzustellen, ich hatte die PPM-Ausgabe vom Arduino temporär im Code invertiert, aber keine Veränderung feststellen können)
  • Sind die Updates korrekt X8R_ACCST_2.1.0_LBT, S8R_ACCST_2.1.0_LBT, XJT_ACCST_2.1.0_LBT korrekt oder gibt es noch einen besseren Stand?
  • Warum zeigt der X8R keinerlei Reaktion (ich kann den Servo mit der Hand verdrehen, sodass nicht einfach nur die Mittelstellung gehalten wird), während der S8R zumindest zuckt

Und nun bin ich mit meinem Latein am Ende. Ich habe leider keine Möglichkeit, die Empfänger und das HF-Modul separat zu testen. Das wäre natürlich sinnvoll, um die Fehlerquellen einzugrenzen. Meine Hoffnung/Vermutung war, dass der erste Empfänger defekt sei und es daher mit einem zweiten Empfänger definitiv funktionieren sollte, aber Pustekuchen...

Nun bin ich auf der Suche nach hilfreichen Tipps, wo der Fehler liegen könnte und dankbar für jeden Vorschlag oder Idee...
 

Anhänge

  • Tests_PPM.txt
    6,2 KB · Aufrufe: 76
Zuletzt bearbeitet:
das XJT Modul versteht invertiertes und nicht invertiertes Signal
Modulschacht.jpg

Modulschacht inv.jpg


Deine Pinbelegung passt auch. 5V Pegel geht auch.
die beiden kleinen Schalter am Modul müssen auf off stehen.
 

Wolfi

User
Hallo Chris (nehme ich mal an)

Sehr schöne Fernbedienung 👍

Ich hab mir den Code Mal angesehen, und zumindest eine problematische Stelle gibt's. Du hast eine Race condition beim ppm[] Array zwischen loop um der ISR. Du solltest das Array nur in einem atomic Block.ändrn.

Ich hab mich die letzte Zeit viel mit PPM Generierung beschäftigt und bin zu dem Entschluss gekommen dass eine ISR dafür keine Gute Idee ist. Ich schick dir morgen Mal Code um den Hardware PWM Generator dafür zu verwenden.
Ich werde mir deinen Code Mal auf einen Nano spielen und damit ansehen :

https://github.com/wlowi/PPMInspect

Grüße
Wolfgang
 
dann wäre es aber trotzdem ein gültiges Signal. Auch wenn es ungenau wäre. Erstmal muss es funktionieren. Was auffällt ist dass Du nur 7 Kanäle überträgst. 8Kanäle brauchen 9 Peeks. Siehe meine Screenshots. Wie lang ist die Pause zwischen den Blöcken? Stimmen die Zeiten? Die Einstellungen vom Oszi kann ich nicht erkennen. Puls-Puls ca1,5 ms, Frame 22ms. Damit sollte erstmal ein Signal entstehen was Sender und Empfänger auswerten können
 

Wolfi

User
Ich hab den Sketch mal auf einen Nano gepielt und mir das PPM Signal angesehen.

IMG_20230408_110300.jpg


IMG_20230408_110253.jpg


Sieht soweit gut aus. Jitter ist ca 15 Microsekunden.

Ca. 20 Microsekunden Framezeit ( +18 MIcrosekunden Jitter)
Auf Grund der Berechnung der Frame Zeit ist der untere Wert für die Frame Zeit nicht immer richtig.
Pulse variiert zwischen 339 und 355 microssekunden. Die Kanäle zwischen 993 und 2007.

IMG_20230408_110138.jpg


IMG_20230408_110203.jpg



Ich denke das sollte funktionieren. Bis auf etwas hohen Jitter halt.
 

Wolfi

User
Dann habe ich deinen Sinus Generator mal in meinen PPM Generator (über PWM Hanrdware) eingebaut.
Output ist auf Pin 9

Jitter 1 Microsekunde, Also kleiner als die Genauigkeit von PPMInspekt.

Der untere Wert der Frame Zeit stimmt nicht, das sollte 22001 sein.

Frame Zeit: 22 msec
Pulse: 300 Microsekunden

Code ist attached

IMG_20230408_113733.jpg



IMG_20230408_113557.jpg
 

Anhänge

  • TestPPM_PWM.ino.txt
    7,8 KB · Aufrufe: 47
Vielen Dank schon mal für die Rückmeldungen!!!

@PeGru Ich hatte das Signal auch invertiert ausprobiert, das hat aber leider nichts geändert.

@Voodoo-68 Ich übertrage aber 8 Kanäle, auf dem Oszi sind 9 Peaks zu sehen. Der letzte ist evtl. etwas schwach zu sehen, mein Oszi ist schon etwas verspackt. Tatsächlich hatte ich mit der Anzahl der Kanäle etwas herum probiert und sie variiert, aber das hatte letztlich keine Wirkung auf das Verhalten am Empfänger. Die Trennung der Kanäle erfolgt meinem Verständnis nach immer mit der ersten Flanke Peaks.

Die Zeitachse war eingestellt auf: 1 Block = 2ms

@Wolfi Danke für die ausführliche Analyse. Ich hatte die gesamte Frame-Länge des PPM-Signals auch mal variiert und sie bis auf 30ms hoch gesetzt. Die Wirkung war unverändert. Deine Änderungen im Code probiere ich noch aus.

Ich fasse mal zusammen:
- PPM-Signal hat zwar einen Jitter, ist aber grundsätzlich ok, sowohl Pegel als auch Form
- Sinus-Signal zum Testen überschreitet minimal die obere und untere Zeitgrenze (1ms..2ms), korrigiere ich noch
- XJT-Modul und Empfänger sind gebunden, da grüne LED am Empfänger leuchtet (und fängt an rot zu blinken, wenn ich das Sendemodul ausschalte)

Meine nächste Vermutung wäre, dass das Sendemodul doch einen Defekt hat? Wohnt zufällig jemand im Großraum Stuttgart, der auch das XJT-Modul verwendet, sodass ich das Modul testweise anschließen könnte, um die Ursache weiter einzukreisen?

Ich hätte noch eine grundsätzliche Frage zum PPM-Signal:
Wenn ein Kanal die 2ms Grenze überschreitet, verzögert das entsprechend den nächsten Kanal oder wird das bei Überschreiten einer Mindestzeit (ich hatte mal eine Mindestpausenzeit von 3,5ms gelesen...) als neues Paket interpretiert, auch wenn die 20-23ms noch nicht erreicht sind?
 
@Voodoo-68 Ich übertrage aber 8 Kanäle, auf dem Oszi sind 9 Peaks zu sehen. Der letzte ist evtl. etwas schwach zu sehen, mein Oszi ist schon etwas verspackt. Tatsächlich hatte ich mit der Anzahl der Kanäle etwas herum probiert und sie variiert, aber das hatte letztlich keine Wirkung auf das Verhalten am Empfänger. Die Trennung der Kanäle erfolgt meinem Verständnis nach immer mit der ersten Flanke Peaks.
ich hatte das Bild aus #2 von PeGru im Blick. Dieses zeigt ein 7-Kanal-Signal.
In #1 wird ein korrektes 8-Kanal-Signal abgebildet. Siehe auch Beitrag #3
 

Meier111

User
Nun bin ich auf der Suche nach hilfreichen Tipps, wo der Fehler liegen könnte und dankbar für jeden Vorschlag oder Idee...
Wenn Du schon so einen Aufwand treibst, dann lieber gleich richtig. Zum Beispiel mit dem ARUni.
Kann man zwar nicht mehr als Bausatz neu kaufen, aber vielleicht bekommst Du die Platine. Und lötest den µC drauf.

Da ja alles open source ist, kann man das "leicht" nachbauen.
Ist für OpenTX. HF-Module: beliebige.

So sehen meine Funken aus:
DX4e_Futaba.jpg


HF-Module bei mir: Spektrum und Futaba DM8.
SpektrumHF.jpg

Das DX5e Modul steckte in der DX4e, kann max 6 Kanäle ausgeben.

MPM geht auch...
 

Wolfi

User
Ich hätte noch eine grundsätzliche Frage zum PPM-Signal:
Wenn ein Kanal die 2ms Grenze überschreitet, verzögert das entsprechend den nächsten Kanal oder wird das bei Überschreiten einer Mindestzeit (ich hatte mal eine Mindestpausenzeit von 3,5ms gelesen...) als neues Paket interpretiert, auch wenn die 20-23ms noch nicht erreicht sind?

Wenn das sync Signal zu kurz wird wird es evtl. als ein zusätzliches Servo interpretiert.
Ich denke das Sendmodul wird mal kurz ausser Tritt kommen.

Bei 8 Kanälen und 2.1 mSec ( == 150% Servoweg ) = 16.8 mSec.
Bleiben bei 20 mSec Frame noch 3.2mSec für sync. Könnte reichen aber da würde ich schon eher auf 22 mSec gehen.

8 Kanäle bei 2 mSec ( 125% Servoweg) und 20 mSec Frames reicht dicke.
 
Wenn Du schon so einen Aufwand treibst, dann lieber gleich richtig. Zum Beispiel mit dem ARUni.
Kann man zwar nicht mehr als Bausatz neu kaufen, aber vielleicht bekommst Du die Platine. Und lötest den µC drauf.

Da ja alles open source ist, kann man das "leicht" nachbauen.
Ist für OpenTX. HF-Module: beliebige.

So sehen meine Funken aus:
Anhang anzeigen 12416261

HF-Module bei mir: Spektrum und Futaba DM8.
Anhang anzeigen 12416262
Das DX5e Modul steckte in der DX4e, kann max 6 Kanäle ausgeben.

MPM geht auch...
er will aber selbst programmieren…

Wenn openXX , dann auf dem aktuellen Stand. Auf RCG portiert jemand gerade edgeTX auf Esp32. Was das sauber läuft, hätte das was…
 
Hallo ChrisCross
Kann sein, dass sich das Thema schon erledigt hat.
Ansonsten würde ich dir folgendes empfehlen:
Suche jemanden in der einen Frsky Sender mit JR-Schacht hat.
Versuch dann über den Sender zwischen XJT Modul und dem X8R eine Verbindung herzustellen.
(Der S8R ist für diese Zwecke ungeeignet.)
Dann siehst du auch ob die Verbindung sauber läuft, oder ob beim Binden irgendwas schief gelaufen ist.
Erst wenn das funktioniert, würde ich an der Software weiter schrauben.
Grüße Netti
 
  • Like
Reaktionen: AMA
Hast du auch drauf geachtet, dass der Abstand zwischen Modul und Empfänger beim Binden zwischen 1,5 und 2 Meter sein soll?
(Zu nah macht Probleme)
 
Hi @Wolfi , @netti57
nein, leider alles unverändert. Ich konnte das Problem bisher nicht weiter einkreisen. Ich bin mir definitiv sicher, dass das Signal korrekt erzeugt wird und konsistent zum Sendemodul gelangt. Ich werde es nochmal mit einem neuen Sendemodul ausprobieren, bin allerdings etwas ratlos.
 
Ansicht hell / dunkel umschalten
Oben Unten