Hallo zusammen, bin mal wieder nächtelang durch diverse Shops, Foren und Co gesurft, hab aber leider nicht gefunden was ich bräuchte... :-( Also es geht um folgendes: Ich bin zZ mit meinem Bruder und einem gutem Freund im Aufbau eines 9,50m Zeppelins bzw Blimp. Die einzelnen Kanäle sollen aber im Zepp direkt gemischt werden, weil es über die Fernsteuerung nur bedingt möglich ist... Im prinzip ein Mikrocontroller der 5 Kanäle (Gas, Höhenruder, Querruder, Seitenruder und Flugzustand) verarbeiten, und dann 6 Kanäle (Schwenkmotor Links + Rechts, Gas Links + Rechts und Rudder Links + Rechts) gemischt wieder ausgeben kann... Als Beispiel: Schalter Flugzustand is in "Schwebemodus" geschalten... Schwenkmotoren drehen sich senkrecht nach oben. Wenn man jetzt Querruder steuert sollen sich die 2 Schwenkantriebe gegeneinander verdrehen - Zeppelin dreht sich am fleck... bei Höhenruder bewegen sich beide Schwenkantriebe in die gleiche richtung um vorwärts und rückwärts zu fliegen... Ähnlich dann im Flugzustand "normal"... Motoren sind nach vorne gerichtet... dann müssen noch die "X-Förmigen" leitwerke mit beigemischt werden... Ich bzw Wir wären für jede Hilfe dankbar! Hoffe hier kann uns jemand helfen Lg
Es gibt einen Haufen Mikrocontroller-Quellcode zum Thema RC, PPM, Servo. Sowohl Lesen als auch Schreiben. Bestimmt auch schon Mixer.. Schon gesucht?
Hallo! Manoel Vogl schrieb: > Die einzelnen Kanäle > sollen aber im Zepp direkt gemischt werden, weil es über die > Fernsteuerung nur bedingt möglich ist... Mit unserer Fernsteuerung iVol 2G16 sind auch senderseitig solche Mischer überhaupt kein Problem. Das ganze lässt sich am PC mit einer grafischen Oberfläche zusammenkonfigurieren: http://www. baltic-seagull.de/ Mit freundlichen Grüßen Andreas Schweigstill
Manoel Vogl schrieb: > Ich bzw Wir wären für jede Hilfe dankbar! > Hoffe hier kann uns jemand helfen Wie lautet denn die Frage? Wenn du 5 Kanäle verarbeiten willst, dann musst du eben einen beliebigen Mikrocontroller verwenden, der 10 freie Portpins hat. Fünf nimmst du als Eingänge und liest alle Werte ein, dann werden sie miteinander verrechnet und an 5 weiteren Pins wieder ausgegeben. Mit zwei Kanälen habe ich das schon gemacht. Mit 20 Kanälen ist es genauso einfach.
Schonmal danke für die Antworten :-) Wir fliegen mit Spektrum Anlagen (DX8) evtl zukünftig auch mit einer DX10... Hab in meiner DX8 die Mischer schon geschrieben, funktioniert auch, aber der haken ist dass wir noch als Backup einen "autopiloten + lagestabilisierung" im Zepp haben werden der bei Empfangsverlust richtung Startpunkt zurückfliegt... Dieser kann aber leider nicht mischen, somit muss der Mischer nach dem Autopiloten kommen :-S Hab leider keine Programmierkentnisse ausser Logo und MPC :-( Falls es jemanden gibt der uns da unter die Arme greifen würde...? Ich denke man würde sich da schon irgendwie einigen können ;-)
Servo schrieb: > Wenn du 5 Kanäle verarbeiten willst, dann musst du eben einen beliebigen > Mikrocontroller verwenden, der 10 freie Portpins hat. Das ist etwas übertrieben. Du kannst genauso gut direkt das Summensignal der Fernsteuerung in einen Pin hineinfüttern, den µC die 5 Werte für die Pulsdauer bestimmen lassen und daraus Pulse für die 6 neuen Kanäle generieren - macht 7 Pins (4 weniger als Servo)
Aber nur wenn das Summensignal zur Verfügung steht. Deiner Aussage folgend reichen ja schon 2 Pins: nämlich das ursprüngliche Summensignal einlesen, mischen und wieder als Summensignal ausgeben. Macht also (5 Pins weniger als Fernsteuerer)
Also kein Summensignal... Wir fliegen mit einem AR9110 empfänger, der kann kein Summensignal ausgeben und der der Autopilot auch nicht :-S Lg
Wie groß wäre für mich schätzungsweise der Aufwand das ganze selber zu schreiben bzw wieviel Ahnung müsste ich mir für dieses Projekt aneignen? Hab hald bis jetzt noch keinen Peil :-S
Manoel Vogl schrieb: > Wie groß wäre für mich schätzungsweise der Aufwand das ganze selber zu > schreiben bzw wieviel Ahnung müsste ich mir für dieses Projekt aneignen? > Hab hald bis jetzt noch keinen Peil :-S Im Unterforum "Codesammlung" hat schon jemand einen Code zum Einlesen von 4 Kanälen gepostet. Der Code bietet zwar noch Optimierungspotential, aber für den Anfang sollte er gehen. Er ist auch problemlos erweiterbar. Die Ausgabe hat der liebe Mensch auch gleich realisiert. Die Verarbeitung dazwischen sollte auch lösbar sein.
Manoel Vogl schrieb: > Wie groß wäre für mich schätzungsweise der Aufwand das ganze selber zu > schreiben bzw wieviel Ahnung müsste ich mir für dieses Projekt aneignen? > Hab hald bis jetzt noch keinen Peil :-S Das kommt drauf an, wie gut Du "logisch denken" kannst. Nur mir erlernbarem Handwerk alleine ist es nicht getan, da gehört auch ein bissel Talent zu. Ich habe z.B. einige Bekannte und Freunde, die hochkarätige Elektroniker sind und so manches Ding wieder zum Laufen kriegen, bei dem ich aufgeben würde. Sie können aber einfach nicht programmieren, da fehlt das Talent. Ist wie Malen (mit Pinsel & Farbe, nicht mit Copy & Paste) oder Musizieren (mit Dur & Moll, nicht mit Play & Stop), das kann auch nicht jeder. Aber geh' erstmal systematisch an die Sache heran... Überprüfe erstmal, ob die vom Autopiloten generierten Servoimpulse exakt nacheinander kommen, so wie bei älteren RC-Anlagen (oder der Planet T5 / R6m von JP) aus dem Empfänger. Ist dies der Fall, so kannst Du Kanal 1, 3 und 5 mit Dioden zu einer Leitung zusammenfassen und die Kanäle 2, 4 und 6 zur zweiten Leitung. Beide Leitungen kommen an 2 Bits eines Ports mit PC-Interrupt (PinChange), wodurch bei jedem "Kanalwechsel" ein Interrupt ausgelöst wird, in dem man per Software ICP die Zeit des jeweiligen Impulses nehmen kann. Zeiten im unteren µs-Bereich sind ungültig, die Zeit länger als etwa 2,5 ms ist die Synchronpause. Somit kannst Du in einer State-Machine im PC-Interrupt alle Impulsbreiten einlesen und im RAM (Array) sammeln. Wird die Synchronpause erkannt, wird der Index des Arrayzugriffs (Kanalnummer) auf 0 gesetzt und ein Merker gesetzt, der der Mainloop sagt, dass ein neues Telegramm komplett empfangen wurde und das Mixen gestartet werden kann. Bisher verbrauchte Ressourcen: Mit 1 MHz durchlaufender Timer1 Pinchange-Interrupt mit 2 Pins 16-Bit-Subtraktion Test auf Plausiblität und Synchronpause (Index auf 0, Merker setzen) ein paar Bytes SRAM für das Array (2 Bytes pro Servoimpuls) Array-Zugriffe (scheibend) mit Index 2 I/O-Pins eines PCI-tauglichen I/O-Ports Läuft das, dann geht's weiter... Ein zweites Array für die auszugebenden Impulse anlegen, wieder 2 Bytes je Kanal. Im OC1A-Interrupt (oder OC1B) eine State-Machine programmieren, die reihum die Ausgabe-Impulsbreiten aus dem zweiten Array holt und als Intervall zum nächsten OCR1x-Interrupt-Termin setzt. Aus einem dritten Array, in das man beim Initialisieren die Bitmuster der Output-Kanäle abgelegt hat, das Bitmuster holen und an den Ausgangsport der Kanalimpulse legen. Zur Synchronisation empfielt sich noch ein Merker, über den die Mainloop mitteilt, dass die neuen Werte berechnet und upgedatet sind, also dass die Impulserzeugung beginnen darf, ohne dass ihr ein Wert unter dem Hintern geändert wurde. Dafür verbrauchte Ressourcen: Ein Compare-Interrupt (z.B. OC1A-Int.) des 16-Bit-Timers 16-Bit-Addition, Array-Zugriffe (lesend) mit Index und dessen Zählumfangsbegrenzung Port-Zugriff (scheibend) Die Mainloop wartet auf den Merker, der das neue Telegramm meldet. Ist er gesetzt, dann macht sie Folgendes: Merker löschen empfangene Impulsbreitenwerte aus Array in ein weiteres Array kopieren, um mit den Kopien arbeiten zu können (erspart atomare Zugriffe) Mixen der Signale, Schreiben der Ergebnisse in ein Hilfsarray Kopieren der Ergebnisse aus dem Hilfsarray in das Ausgabe-Array Setzen des Merkers, der die Impulsausgabe startet. Sleep im Mode Idle (bis zum nächsten Interrupt) wenn Merker nicht gesetzt, dann Sleep bis zum nächsten Int. Dafür verbrauchte Ressourcen: 2 weitere Hilfsarrays ein paar mathematische Operationen zum Mischen Array-Zugriffe (2 x Kopieren, Lesen der Eingangsimpulsdauern, Schreiben der Ausgangsimpulsdauern) Merker-Zugriffe Mit 8 MHz Controllertakt und Timer-Vorteiler 1 zu 8 (1 MHz Timertakt) solltest Du das mit 1 µs Auflösung relativ jitterarm realisieren können. Falls zum Mischen Subtraktionen reichen, genügt dazu ein Tiny2313. Werden Multiplikationen gebraucht, so empfiehlt sich der Einsatz eines Mega48, bei komplizierteren Mix-Berechnungen (mit viel Programmcode in einer Hochsprache) ein Mega88/168. Fazit: Es ist machbar, ob Du es umsetzen kannst und wie lange Du dazu brauchen wirst, kann ich leider nicht beurteilen. ...
WoW ;-) Danke für die ausführliche Beschreibung...! Logisch denken kann ich schon irgendwie, aber ob es dafür reicht weiß ich nicht... Hab öfters schon in diverse bücher und im Internet geschaut, bin aber noch nicht wirklich dahinter gestiegen... Im Prinzip von der denk bzw arbeitsweiße wie oben sehr schön beschrieben verstehe ichs schon ;-) Allgemein war unser erster Grundgedanke, jemanden zu suchen der und das progi, etc machen würde... Aber selbigen erst zu finden is nicht wirklich einfach :-( Jetzt muss ich ran bzw werd's versuchen ;-) Im Januar - Februar sollte es dennoch funktionsfähig fertig sein :-P
Hallo Manoel, den Aufwand solltest du nicht unterschätzen. Wenn ein "normales" Programm einen Fehler hat, stürzt der Rechner halt ab. Nicht weiter schlimm. Bei so einem Zeppelin dagegen, musst du das Programm von vorn herein zuverlässig und fehlerfrei anlegen. Dazu irgendeine Art von Simulation oder Test, bei dem ein Programmfehler keine größeren Schäden anrichtet. Wahrscheinlich wirst du im Februar erst die nötigen Erfahrungen gesammelt haben. Dein Programm wegwerfen und nochmal mit einem verlässlichem Konzept neu anfangen.
Hannes Lux schrieb: > Falls zum Mischen Subtraktionen reichen, genügt dazu ein Tiny2313. > Werden Multiplikationen gebraucht, so empfiehlt sich der Einsatz eines > Mega48, bei komplizierteren Mix-Berechnungen (mit viel Programmcode in > einer Hochsprache) ein Mega88/168. Oder man beherrscht PIC oder AVR Assembler, dann genügt ein kleiner µC und simple Routinen und das Problem ist gelöst. Die Antwort klingt ja wie eine Marsmission, aber nicht wie das einfache Einlesen von einigen Servopulsen, verrechnen und wieder ausgeben. Einen Interrupt braucht man z.B. garnicht, weil die Mainloop der Reihe nach alle Eingänge einliest und nach der Berechnung der Mischung alle gleichzeitig oder einen nach dem anderen wieder ausgibt. Man kann auch einen Lamborghini kaufen und ihn zum Einkaufen im Supermarkt hin und wieder zurückschieben. Dann werden halt einige seiner Ressourcen nicht benutzt -> Servos verarbeiten mit dem Mega168 per Hochsprache.
as sembler schrieb: > Die Antwort klingt ja wie eine Marsmission, aber nicht wie das einfache > Einlesen von einigen Servopulsen, verrechnen und wieder ausgeben. > Einen Interrupt braucht man z.B. garnicht, weil die Mainloop der Reihe > nach alle Eingänge einliest und nach der Berechnung der Mischung alle > gleichzeitig oder einen nach dem anderen wieder ausgibt. das zb ist keine gute Lösung, auch wenn ich dir im Prinzip beim Rest recht gebe. PS: 2 Signale A + B mit einem Parameter t (0 bis 1) zu mischen bedeutet Ergebnis = t*A + (1-t)*B t kann man in den Zahlenbereich 0 bis 255 skalieren, das ist kein Thema. Aber um 2 Multiplikationen kommt man nicht herum, zumal t (das Mischungsverhältnis) variabel einstellbar sein muss. Aber auch das ist doch kein Problem: überlässt man das Erzeugen der Servoimpulse einem Timer, dann macht der das mehr oder weniger eigenständig im Hintergrund. Und eine Updaterate von 50Hz kriegt man auch mit Softwaremultiplikationen leicht hin. Einzig zum bestimmen der Impulslängen an den Eingängen wären Pin Change Interrupts schön. Da wird es aufwändiger, wenn man die Flankendetektion selbst machen muss ohne den µC volle 100% auf diese Detektion anzusetzen.
Da gebe ich Karl Heinz vollkommen recht. Eine kleine Anmerkung. Die Ausgangsimpulse müssen immer gleich lang sein. Dürfen keinen Jitter haben. Sonst summen die Servos die ganze Zeit hin und her. Verbrauchen unnötig Strom. Nach 1/4 Stunde ist der Akku leer. Bekommt man am einfachsten mit einem Timer hin. Na gut, nicht ganz so einfach. Man muss den Timer in der Interruptroutine umprogrammieren. Ähnliches an den Eingängen. Liefert der Sender gleich lange Impulse, so sollen auch gleiche Werte gemessen werden. Bekommt man wohl am einfachsten mit einem Timer im Capture Modus hin. Und noch ein Punkt: Eingabe- und Ausgabe-Timer wirst du wahrscheinlich niemals umbauen. Aber kann sein, dass du nach den ersten Probeflügen die Signale anders mischen willst. Da ist es recht praktisch, wenn die zeitkritische Ein- Ausgabe von der Berechnung komplett getrennt ist. Grüße und viel Erfolg. Stellst du ein Foto in diesen Thread sobald der Zeppelin fliegt?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.