Hallo,
als OP wollte ich nach längerer Zeit (Sommerpause) den Threat nun mit ein paar Bemerkungen abschließen, falls später nochmal jemand darauf aufbauen möchte.:
- Der Code von Jurs (reply#13) zur Dekodierung der Servosignale aus dem RC-Receiver läuft zusammen mit der Standard-Servo lib., der Flieger fliegt und regelt leidlich die Lage um die Längsachse. Danke nochmal für den Code-Schnipsel, jurs !
Nur ein Timeout mussten geändert werden TIMEOUTCHANNEL 5000 - Sein Code benötigt Servosignale die zeitlich gestaffelt sind. Nach anfänglichen Problemen schaute ich mit dem Oszi nach: Bei meiner Testkombination mit Sender Spektrum DX7EU mit Empfänger China-Klon eines AR6100E liegen die Servo-Signale tatsächlich hintereinander. Folgende zeitliche Abfolge der Signale: QR, AUX1, HR, SR, Mot, Gear, das entspricht NICHT der Reihenfolge der Pins am Empfänger!
- Bei meinem real eingesetzem Setup mit Sender Multiplex Cockpit SX M-Link mit Multiplex-Empfängern RX-5 light und RX-7-DR M-Link werden manche Servosignale gleichzeitig ausgegeben (hier unten durch das "=" gekennzeichnet) , diese können mit dem Jurs-Code daher NICHT gleichzeitig decodiert werden. Wenigstens ist die zeitliche Abfolge der Signale gleich der räumlichen Reihenfolge der Empfängerpins...
Folgende zeitliche Abfolge der Signale beim RX-5 light : QR-L = HR, SR=Mot, QR-R
Folgende zeitliche Abfolge der Signale beim RX-7-DR : QR-L = HR, SR=Mot, QR-R = SPOIL, AUX2
Bei meinem real eingesetzten Modell mit RX-7-DR mit 2 QR-Servos musste ich also QR-R auf AUX2 spiegeln, und letzteres auswerten, da das SPOIL-Signal bei mir zum Ein/Aussschalten der PID-Regelung genutzt wurde (was anderes ist ja nicht mehr frei) - Auch wenn die Signale softwaremäßig einfach nur durchgereicht werden (also ohne PID-Regler), so ergibt sich totzdem eine gewisse Unruhe bei den Servos. Ob dies aus einer ungenauen Decodierung der Servosignale. oder aus einem Jitter bei der Signalerzeugung durch verzögerte Interrupts herrührt, weiß ich noch nicht.
Hier wären Alternativen auszuprobieren, wie auf der Eingangsseite das von rudirabbit in#20 angesprochene digitalReadFast aus der digitalWriteFast lib (http://forum.arduino.cc/index.php/topic,46896.0.html) integriert in den nicht-interrupt getriebene Auslesen des Signals vom Jurs-Code.. Oder Ausgangsseitig eine abgespeckte Version des Programmes 20-Servo Controller aus http://www.lamja.com/blogfiles/UNO_20_Servos_Controller.ino einsetzen. Im Netz findet sich ja dazu auch noch ElectricRCAircraftGuy.com--RC, Arduino, Programming, & Electronics: Arduino micros() function with 0.5us precision - using my Timer2_Counter Library. - Wenn ich die derzeitige Konfiguration noch um eine Regelung um die Hochachse erweitert habe, werde ich als nächstes die Dekodierung des Summensignals meines Multiplex RX-7-DR angehen (siehe rudirabbit reply #4) . Das sollte Ungenauigkeiten der Signaldekodierung eliminieren, und vor allem den Kabelverhau drastisch reduzieren, da nur noch eine Leitung vom Empfänger kommt. Das ist gut für einen deutlich funktionssichereren elektrischen Aufbau.
- Wenn ich mal mehr Zeit habe, werde ich um Signalfilterung kümmern, u.a. auch um eine Gyrodrift wegzurechnen. (Kalman-Filter der Gyrosignale, kombiniert mit den Beschleunigungssensoren). Und vielleicht doch mal bei Flyduino etc. spicken.
Was hab ich noch gelernt:
Ein Testaufbau mit einem kleinen Pappmodell für die Hand mit dem Gyrosensor drauf und zwei QR-Servos drauf um das Verhalten im Keller anschauen zu können macht absolut Sinn, statt mit einem Originalmodell mit 1,40 m Spannweite) zu arbeiten. Der elektrische Aufbau für die ganze Signalverteilung innerhalb des Modells brauchte mehr Zeit als die Software zu schreiben, und die Sommerzeit ist nicht die liebste Bastelzeit...
Der Code ist noch zu sehr in täglicher Bearbeitung und unbereinigt, als das ich ihn hier posten wollte. Bei Bedarf PM. Der einzige (und für mich relevante) Vorteil ggü. den etablierten Projekten Flyduino, MultiWii etc. ist das er so einfach ist, daß sogar ich ihn verstehe ...
Weitere Fragen werden sicher kommen, aber dann unter einem treffenderen neuen Thread-Name.
Gruß,
Tütenflieger
Eine Legende für Nicht-Modellbauer: QR-L: Querruder links, SR: Seitenruder, etc, ![]()