Coral-D

Um den sNQ im Freien fliegen zu können, musste die initial verwendete Infrarot-Steuerung durch ein Funk basiertes System ersetzt werden, auf Grund der Antennenlänge vorzugsweise eines mit 2,4 GHz.

Versuche, den sNQ im Freien, und selbst in einer größeren Halle, per Infrarot zu steuern sind nicht zufrieden stellend ausgefallen, um es mal wohlwollend zu umschreiben. Es funktionierte zwar, aber die Reichweite war sehr eingeschränkt und man musste den Sender immer direkt auf den sNQ gerichtet halten, was den Spaß schon ziemlich eindämmte. In beiden Umgebungen fehlt das Auftreten von Reflexionen. Merke: IR -> Wohnzimmer!

Versuche mit “normalen” 2,4 GHz Empfängern sind kläglich an der geringen Tragfähigkeit des sNQ gescheitert, selbst so genannte Microempfänger sind auch ohne Gehäuse noch zu schwer für den Winzling.

Die Entscheidung für ein System von MicroInvent, deren Motto “Let´s things make smaller” konsequent in die Tat umgesetzt wird, fiel mir etwas schwer, da für den Transfer von geeigneter Hardware aus deren Shop zum geneigten Kunden (in diesem Fall ich), ein gehöriger Batzen Euros den Besitzer wechseln muss.

Da zum Zeitpunkt meiner Suche aber kein vergleichbares Angebot, Größe und Gewicht des Empfängers betreffend, zu finden war, habe ich mich näher mit dem Coral System von MicroInvent beschäftigt.

Die Größe ist fantastisch, einzelne Bauteile (ich habe eines davon zufällig gefunden, wirklich zu sehen war es nicht, zumindest nicht für mich ;-) haben die Größe 0201. Hier der Größenvergleich mit einer 1 Cent Münze.

Coral-D, MicroInvent - Nahaufnahme per Click
          Click auf das Bild für Großaufnahme
Coral-D, MicroInvent - Nahaufnahme per Click
          Click auf das Bild für Großaufnahme

Der Stecker hat 1 mm Pin-Abstand, die Platine ist 9 x 6 mm groß und der komplette Sender wiegt nach Angaben des Herstellers 0,3 Gramm.

Leider war recht schnell klar, dass es keinen Empfänger von MicroInvent gibt, der das von uns benötigte Summensignal aller Kanäle an einem Sammelausgang zur Verfügung stellt.

Deshalb habe ich den Betreiber der Webpräsenz, Ivan Motycka, angemailt und nachgefragt, ob die Möglichkeit besteht, einem der angebotenen Empfänger passender Größe das Summensignal beizubringen.

Die Antwort war enttäuschend und ermutigend zugleich. Mit dem aktuellen Design sei die Erzeugung von PPM-Signalen aus den diskret als Zahlenwert übertragenen Kanalinformationen ohne Jitter nicht möglich, aber im kommenden Design würde er das vorsehen...

Ein, zwei Mailwechsel mit Ivan später hatte Sven die Idee, die Kanalwerte des Senders direkt und ohne irgend eine Umwandlung an den sNQ durchzureichen, was Ivan als möglich erachtete. Eine Woche später hatte Ivan das in Abstimmung vorgeschlagene Protokoll implementiert und ich habe einen Prototypen samt zugehöriger Sender-Erweiterung bestellt. Der Sendeteil ist nötig, da das Coral-System leider nicht DMS2 kompatibel ist.


Ich hatte zwar von Ivan im Vorfeld die Spezifikation seines Protokolls erhalten und abgenickt, aber als ich dann vor dem Compiler saß und an die Implementierung der Einleseroutine ging, musste ich erst mal trocken schlucken.

CORAL_PPM_Data_out_l

Jede Millisekunde kommt ein neues Kanal-Datenpaket aus dem Empfänger, alle 12 µs muss ein Bit decodiert werden, das Ganze 10 ms lang, dann ca. 10 ms Pause. Gefühlsmäßig befindet sich die CPU des sNQ dann, getriggert durch den Clock-Impuls, 10 ms lang fast ausschließlich in der Interruptroutine und versucht Hi oder Lo des Datensignals abzutasten. Von dem Overhead durch Taskwechsel durch die Interruptbehandlung ganz zu schweigen. Es stand zu befürchten, dass die Regelung des sNQ dadurch viel zu sehr behindert und der sNQ unsteuerbar wird.

Einzig denkbarer Ausweg schien mir die Verwendung eines der im Atmel zur Verfügung stehenden Hardware-Interfaces. Mit deren Unterstützung kann der Code zur Steuerung des Copters abgearbeitet werden, während sich parallel die Hardware um das Einlesen der Daten kümmert. Zur Auswahl stehen hierzu das SPI-Interface oder die Serielle Schnittstelle.

Da das Protokoll im Coral-D so implementiert war, dass der Coral den Takt liefert, bot sich die Verwendung des SPI-Slave Modus an. Leider liegt aber der PWM-Ausgang für den rechten, vorderen Motor auf dem selben Pin, der die Eingangsdaten des SPI-Slave einliest. Nimmt man noch die Tatsache dazu, dass die ebenfalls vom Atmel gebotene Software-PPM-Erzeugung aus Performancegründen nicht verwendet werden kann, fällt diese Möglichkeit also flach.

Als SPI-Master konnte der Atmel ebenfalls nicht betrieben werden, da die Hardware-Implementierung des Protokolls vorsieht und verlangt, dass der Slave den Takt vom Master geliefert bekommt und erst mit der Datenlieferung beginnt, wenn der Master den Clock startet. Der läuft aber, vom Slave getrieben, permanent durch, also auch hier Fehlanzeige.

Die serielle Schnittstelle des Atmel ist beim sNQ noch nicht belegt, hätte also verwendet werden können, läge nicht der Ruhepegel der Datenleitung des Coral-D auf Low. So können wir keine gültigen Start- und Stopbits für die Seriell-Hardware erzeugen und laufen auch hier ins Leere.
Vom Einbau eines Inverters, um wenigstens den Ruhepegel passend für den USART hinzubekommen, wollte ich absehen, solange nicht geklärt ist, ob das Timing des Coral-D vom USART akzeptiert wird. Status: Offen.

Aufgeben kam natürlich nicht in Frage, also habe ich entgegen besseren Wissens die Interruptroutine für das Clock-Signal implementiert. Hat nicht funktioniert, mein Gefühl hat mich also nicht getäuscht.

Die letzte Möglichkeit, die mir in den Sinn kam, war, vom ersten Clock-Impuls getriggert in die Interruptroutine abzutauchen und dort dann frei laufend die ankommenden Bits zu decodieren. Das entwickelte sich per Try-and -Error ein bisschen zäh, führte aber letztlich zum Erfolg. Schlußendlich schaffte ich es, mit Waitµs()-Aufrufen den Coral und den Atmel aufeinander einzuschwören, die Daten standen am Ende der IRQ-Routine in einer Variablen zur weiteren Verarbeitung zur Verfügung. Und der Code der sNQ-Steuerung wurde nur alle 1 ms für ca. 200 µs ausgebremst, was offensichtlich ausreichende Performance für die Regelung übrig ließ.


Als Versuchsträger musste natürlich der sNQ herhalten. Der Plan sah vor, den Coral horizontal über der Platine des sNQ zu platzieren und ich gedachte, den Sockel des Coral mit den Anschlussdrähten der Versorgungsspannung zu befestigen.

sNQ mit Coral-D Sockel

Das hat sich später als zu instabil erwiesen. Zuerst wurde aber erkennbar, dass der Yaw-Gyro im MPU6050 von dem direkt darüber platzierten Coral-Empfänger gestört wird, was sich durch sehr starkes Zappeln der Anzeige in der TriGUI äußerte. In Folge wurde der Sockel für den Coral-D noch einmal umplatziert, bzw. senkrecht befestigt, so dass der Abstand zwischen Coral und MPU vergrößert ist. Diese Maßnahme war erfolgreich, die Störungen hielten sich jetzt in einem akzeptablen Bereich.

sNQ mit Coral-D Sockel, senkrechte Montage

Im gleichen Zug habe ich dem Sockel eine Stütze auf der anderen Seite spendiert, ein liebevoll aus Balsa geschnitztes Unikat :-)

Man erkennt in der Aufnahme undeutlich, dass der Clock-Ausgang des Coral nicht mehr auf Pin 3 gelegt ist, sondern jetzt auf Pin 5 liegt, und dass das Signal jetzt an den linken Pin des rechten Steckers geführt wird, der auch dem Anschluss des IR-Empfängers dient. Im oberen Bild wurde der Clock-Ausgang des Coral noch auf den SCK-Anschluss des Atmel geführt.


Zeitsprung rückwärts...

Der aufmerksame Beobachter wird früher oder später erkennen, dass im zweiten Bild die beiden silbernen Anschlussdrähte für Plus und Minus gegenüber dem oberen Bild vertauscht sind. Nun, hier hatte beim Anlöten der Fehlerteufel zugeschlagen und ich habe zuerst Plus und Minus vertauscht. Peinlich und prekär... :-(

Bemerkt habe ich meinen Fehler in dem Moment, als ich den Akku an den sNQ angeschlossen habe, denn der sNQ hat sofort Rauchzeichen gegeben und mich mit einem freundlichen “Zisch” auf meinen Fehler aufmerksam gemacht. Das war der Moment, in dem ich den 0201-Widerstand zwischen den Anschlusspins 2 und 3 des Coral entdeckt habe, der hat sich nämlich in Rauch aufgelöst, bzw, einen schwarzen Rest Undefinierbares zurück gelassen.

Glück im Unglück: Die Schottky-Diode im Ausgang des StepUp-Wandlers auf dem Grundboard des sNQ hat sich ebenfalls verabschiedet, und zwar offenbar so rechtzeitig, dass größerer Schaden am Coral vermieden wurde.

Ich habe Ivan mein Missgeschickt gebeichtet und er hat ungefragt und kostenlos sofort zwei weitere Coral-D mit unterschiedlichem Stecker-Pinout auf den Weg geschickt, damit ich weiter arbeiten konnte.
Über Vergleichsmessungen mit dem neuen Coral habe ich dann heraus gefunden, dass der erste ebenfalls noch in Schuss ist. Nach dieser Verifikation habe ich die beiden überzähligen Corals wieder an Ivan zurück geschickt und musste nur eine sehr übersichtliche Summe für “handling and repair“ zahlen.

Vielen Dank an dieser Stelle an Ivan für die freundliche, zuvorkommende und unkomplizierte Unterstützung!


Betriebsbereit stellt sich der sNQ jetzt so dar:

sNQ mit Coral-D Empfänger

Mit diesem Setup wurden die Videos im Freien gedreht die hier zu sehen sind.

Sollte der Coral-D in einer weiteren Version des sNQ Verwendung finden, wird der Stecker natürlich auf dem Grundboard einen passenden Platz finden müssen.


Da der Coral vergleichsweise teuer daher kommt und keinerlei Kompatibilität mit marktgängigen Sendern vorweisen kann, bin ich für nachfolgende Entwicklungen auf Empfänger von Deltang umgestiegen.

 

 

Über eine Suchmaschine hier gelandet? Dann bitte mit Click Navigations Schaltflächen anzeigen

[Home] [Modelle] [Eisenbahn TT] [Was ist neu ?] [Elektronik] [Kontakt] [Links] [Tipps+Tricks]