Das GA250 Gyro Firmware Projekt

Ich habe eine eigene Firmware für den Assan GA250 Gyro entwickelt, und das Ergebnis beschreibe ich hier.

Features

  • Servos 1520us @ 55Hz, 250Hz, 333Hz und 760us @ 333Hz
  • Servo Endposition rechts und links und Mittenposition frei einstellbar
  • Debounce Parameter für perfekte Pirouettenstops im Headinghold Modus
  • viele weiter Einstellmöglichkeiten wie Drehmomentkompensation, fixed wing Modus, usw.
  • Parameter Einstellung über eine Windows-GUI und/oder in-field über eine Programmier-Box

It’s the best of the cheap!

Anleitungen

Nachbauer (soweit mir bekannt, Leute, meldet Euch :))
linuxholgi… der erste Mutige [rc-heli.de Thread]
chris3002… der zweite Mutige [rc-heli.de Thread](Bericht hier)
steidlmick… und schon der dritte Mutige [rc-heli.de Thread]
mestre @ rcgroups (mit Testbericht und Vergleich zum LH GY520)(und hier), Pitchfella @ rc-heli.de, BrucePage @ rcgroups, robbancs @ rcgroups, ablack @ rcgroups (Einsatz als Flächengyro!), JanRy @ rcgroups (mit toller Eigenbau-Programmierbox hier), closedsink @ rcgroups, ElectoPete @ rcgroups, Rotosaab @ rcgroups (mit Vergleich zum origanlen GA250 und LH GY520), richy18 @ rc-heli.de, davincoleman1 @ rcgroups, Higgy (Einsatz in einem FP-Heli mit Brushless Tail) siehe Kommentare oder @ rcgroups, sparkie79 @ rcgroups, MythosVR4 @ rcgroups, Tony (turismo05), Bernd (Einsatz in einem HBK2), Scarlet @ rcgroups, Tomve @ rcgroups.

Neueste Nachrichten
2. Dezember 2012: Firmware für die Turnigy DLux Box mit Board-002 und das Programm AvrBurnTool zum einfachen brennen und flashen der Firmwares wurden dem neuen Firmware Package v20121202 beigefügt.
25. November 2012: Als Programmierbox kann nun nicht nur die Robbe Box, sondern auch die Turnigy DLux Box und ein Arduino Uno + LCD Shield benutzt werden! Die entsprechenden Firmware Hex Files sind im neuen Firmware Package v20121125 enthalten.
14. August 2012: Mick hat die englisch-sprachigen Anleitungen Idiot’s Guide to Olliw’s GA250 Firmware von Holger und OlliW’s Alternative Firmware for the Assan GA250 Gyro, v0.16 auf Deutsch übersetzt und erweitert! Siehe unter Anleitungen und/oder Externe Beiträge. Tausend Dank nochmals an euch, Holger und Mick, für die viele Mühe!
26. Juni 2012: Endlich ist auch ein USB-TTL Adapter mit FT232RL Chip auch bei Hobbyking verfügbar! (FTDI Adapter USB Controller Produkt ID: 009000003). Damit wird das Projekt so billig wie nie zuvor, für ein vollständiges Set aus GA250 + USB-FTDI Adapter + USBasp ISP-AVR Programmer bezahlt man gerade mal $24.66 inkl. Versand! (und EUST oder Zoll zahlt man auch keine) 🙂
7. Juni 2012: Ich habe ein Anleitung zur Firmware geschrieben, in der auch ein bischen auf die Bedeutung der Parameter eingegangen sowie eine Einstellprozedur vorgeschlagen wird. Gibt’s unter der Rubrik Firmware.
13. März 2012: Ich habe ein kleines Tool, AvrBurnTool v0.01, geschrieben. Damit wird das Brennen des GA250 mit dem ISP AVR Programmer nun zum Kinderspiel.
8. März. 2012: Diskussionsthread: Gyro GA250 + alternative Firmware: The Best of the Cheap!?
7. März 2012: Neue Firmware v0.16 verfügbar. Mit Debounce-Parameter für perfekte Pirostops! Darauf bin ich jetzt ein bischen stolz. Ich habe einen Weg gefunden wie sich auch im Headinghold-Modus ziemlich perfekte und trotzdem crispe Pirostops erreichen lassen, und dies läßt sich über nur einen Parameter (getrennt für CCW und CW Piros falls nötig) einstellen. Das Tunen des Gyro bleibt damit einfach. Ich behaupte das jetzt einfach mal: Mit der neuen Firmware ist der GA250 mit Abstand der Beste der „billigen“ Gyros.
5. Feb. 2012: Neue Firmware v0.15 verfügbar.
10. Jan. 2012: Holger hat eine super Anleitung (auf Englisch) geschrieben. DANKE!
30. Dez. 2011: Neue Firmware v0.14 verfügbar.
28. Nov. 2011: Diskussionsthread: Alternative Firmware für den Assan GA250 Gyro (nicht mehr supported)
24. Nov. 2011: Für’s Flashen und der Programmierung über die Windows-GUI bin ich nun vom Gain-Anschluss auf den Servo-Anschluss gewechselt… ist einfach doch praktischer… aber dazu musste die Firmware für die Programmingbox ein bischen geändert werden => neue Firmware. Heute nachmittag konnte ich dann auch zwei Flüge filmen (bzw mein Sohn). Aber es war (sau)kalt und es hat nicht so geklappt wie ich mir das dachte… die Filme haben auch schlechte Qualität… aber seht selbst hier.
20. Nov. 2011: Nach vielen Testflügen war heute die Gelegenheit die aktuelle Firmware „ernsthaft“ zu testen. Eigentlich hatte ich das gar nicht vor, sondern bin, nach den X Testflügen auf der Strasse vorm Haus, heute mit dem Testheli einfach mal auf „mein“ Feld gegangen, allerdings in der Erwartung bald wieder zurück zu sein. Dementsprechend vorsichtig bin ich das angegangen, aber flugmäßig hat sich das so gut angefühlt, dass ich bei der Hälfte des ersten Lipos alle Zurückhaltung aufgegeben habe und einfach alles geflogen bin was mir möglich ist… und weil es so gut ging „musste“ ich alle Lipos durchfliegen. Ich muss echt gestehen, dass ich immer noch ein bischen baff bin wie gut der Gyro ging. Ärgerlich das ich keine Kamera dabei hatte (kommt hoffentlich nächste Woche). Jedenfalls, deswegen gibt es das erste Release der Firmware, siehe unten unter Firmware. 🙂 🙂 🙂


Einführung

Der Assan GA250 bietet für $9.99 einen echten MEMS Gyro, und wie der Schaltplan zeigt ist er für eigene Projekte perfekt geeignet: (1) es wird ein ATmega8 verwendet, (2) die ISP-Pins sind leicht zugänglich, und (3) er ist hardware-mässig IMHO gut designt.

Mein erstes GA250-Projekt war/ist der GA250-Fp&Koax-Gyromischer, was insoweit relevant ist als ich im Zuge dessen bereits einige wichtige „Probleme“ gelöst habe, worauf ich hier zurück greifen werde. Das Gyro-Thema beschäftigt mich seit einiger Zeit, aber bei den Koax-Gyromischer Projekten war allerdings Know-How mäßig ein gewisses „Ende“ erreicht, und ein CP-Gyro war die logische nächste Herausforderung. Es reizte mich natürlich schon auch eine bessere Firmware für den GA250 zu erstellen, was ich denke auch gelungen ist, aber das dahinterstehende Know-How war meine Hauptmotivation.

Ich bin nicht der Erste und Einzige der auf diese glorreiche Idee gekommen ist eine neue Firmware zu entwickeln. Cruzado hat bereits ein solches Projekt am Laufen: http://freecode4ga250.blogspot.com. Ich denke mein Projekt ist aber deutlich „ausgereifter“.


Übersicht über das Projekt

Das ganze Projekt besteht, neben der Firmware, aus weiteren „Teilen“:

  • GA250 Gyro mit aufgespieltem Bootloader, um die Firmware zu flashen und updaten zu können
  • Programmierbox um die Parameter des Gyros „im Feld“ einzustellen
  • Programmieradapter um den Gyro mit einem PC zu verbinden
  • Windows-Program AvrConfig, um die Parameter per PC einzustellen

Der Programmieradapter wird zum Flashen einer neue Firmware und/oder zum Benutzen von AvrConfig benötigt. Zum Einstellen der Parameter des Gyros werden also zwei Möglichkeiten geboten, per PC mittels einer Windows-GUI und/oder mittels einer Programmierbox, bei der man unabhängig vom PC ist. Eine Einstellung der Parameter über den Sender ist, ausser die übliche Gain-Einstellgeschichte, bisher nicht vorgesehen.

GA250 Gyro Hardware
Alles zur Hardware des GA250 habe ich hier aufgeschrieben: MEMS Gyro GA250 Bilder und Schaltplan.

Bzw. fast Alles: Die Masse- und Versorgungsleitungen der Anschlüsse für Rudder, Gain, und das Heckservo sind nicht alle mit dem Gyro elektrisch verbunden! Der Gyro bekommt seine Versorgung NUR über den (roten) Gain Stecker! Die Masse/Versorgungsleitungen des Rudder- und Servo-Steckers sind zwar miteinander verbunden, aber NICHT mit denen des Gain-Steckers. Das schränkt die Möglichkeiten bzgl der Programmierung des GA250 (Flashen, Programmierbox, AvrConfig) ein. Ist eigentlich „saublöd“ gelöst.

ga250 cable connections olliw

Assan hat das vermutlich in Anlehnung zum Spartan Quark so gemacht, was dort im Übrigen zu den gleichen „blöden“ Einschränkungen führt: Um den Spartan Quark über den Computer zu programmieren muss man sich einen „Simplex Data Adapter“ und einen „Flash-Link“ anschaffen… nicht gerade die billigste Lösung, und auch nicht die Einfachste, und IMHO auch nicht die Komfortabelste….

Bootloader
Als Bootloader kommt wieder Hagen’s AVRootloader zum Einsatz, alle Info’s dazu gibt’s hier und hier. Ich finde den einfach super, und für unseren Zweck hat er den Vorteil dass er klein ist, schnell startet (300 ms, und keine >4 s wei bei so manch anderem Bootloader…), und einen Zugriff auf das EEPROM ermöglicht.

Der Bootloader kann sinnvollerweise entweder über den Gain-Stecker (bzw. Pin PD1 oder PD0) oder den Servo-Stecker (Pin PB2) angesprochen werden. Das Letztere ist IMHO vom Handling her praktischer (man muss nicht immer den Gainstecker aus dem Empfänger wursteln), aber man hat dann ein „Stromversorgung-Problem“ (der Gyro kann ja nur über den Gain-Anschluss versorgt werden). Trotzdem, ich habe mich für den Servo-Stecker (= Stecker zum Servo) als Programmierport entschieden. Man muss also die Masse/Vcc-Leitungen des Gain- und Rudder-Steckers verbinden, z.B. durch Einstecken in den Empfänger.

Brennen des Bootloaders und Setzen der Fuses
Um den GA250 für das Projekt einsetzbar zu machen muss nur der Bootloader gebrannt werden. D.h., GA250 aufschrauben, ISP-Pads mit einem ISP-AVR-Programmierer verbinden (löten), Fuses richtig setzen und Bootloader in den Mikrokontroller brennen, GA250 wieder zuschrauben, fertig. Hört sich vielleicht wild an, ist aber wenn man ein bisserl löten kann wirklich leicht zu bewerkstelligen. Was genau zu tun ist, ist in den Anleitungen von Holger und Mick genauestens beschrieben. Als ISP-AVR-Programmierer kommt jeder beliebige ISP-AVR Programmer in Frage. Wer noch keinen hat, USBasp ist sehr zu empfehlen. Es gibt ihn in Asien für <$3 (ebay), und auch bei Hobbyking für $4.95 exkl. Versand (USBasp AVR Programming Device).

Die Fuses sind wie folgt zu setzen:
– low fuse: 0xBF (ChkOpt = 1, SUT1:0 = 11, CKSEL3:0 = 1111, BODEN = 0, BODLEVEL = 1)
– high fuse: 0xDC (BOOTSZ1:0 = 10, BOOTRST = 0)

Bootloader:
– die .hex Files mit dem Bootloadercode sind unter Firmware zu finden

Um den Vorgang möglichst einfach zu gestalten, habe ich das Windows PC Program AvrBurnTool.exe geschrieben. Dieses kleine Tool ist ein einfach zu bedienendes und auf den Zweck massgeschneidertes Frontend für avrdude (ein sehr gutes aber nicht gerade benutzerfreundliches Program zum Brennen von AVRs). Man braucht nur den angegebenen 6 Schritten zu folgen. Ein Kinderspiel.

Bild der AvrBurnTool GUI (Version 0.03) zum Brennen der Fuses und des Bootloaders:
ga250 cpgyro avrburntool olliw

Programmieradapter
Der Programmieradapter kann verschieden realisiert werden. Bei der von mir empfohlenen Variante besteht er aus einem USB-TTL-Adapter und einem Schalter-Kabel-Stecker-Gewirr, dass man sich schnell selber zusammenlötet. Der USB-TTL-Adapter MUSS dabei den FTDI Chip FT232RL verwenden. Solche Adapter gibt es günstig „überall“. Wer keinen ISP-AVR-Programmer hat oder anschaffen will, der könnte die USB-TTL-Adapter von Sparkfun (DEV-09873, DEV-09716, DEV-10008) in Betracht ziehen; diese können mit der entsprechenden Software auch als AVR-Programmer benuzt werden. Ansonsten sollte jeder USB-TTL Adapter mit FT232RL geeignet sein, wie z.B. die JY-MCU Arduino USB-Adapter, welche es aus Asien für <$10 gibt. Die günstigste und "beste" Lösung ist vermutlich der FTDI Adapter USB Controller von Hobbyking; Kosten: $4.75 (exkl. Versand).

ga250 programming adapter

Achtung: Es gibt GA250 mit 3.0 V und 3.3 V interner Spannungsversorgung (die Neueren scheinen 3.0V zu haben), die Schaltung wie oben angegeben funktioniert für die 3.0 V Variante nicht unter allen Umständen zuverlässig. Bei mir funktioniert es sehr gut wenn man zum 100 Ohm Widerstand eine Diode (1N4148) parallel schaltet (Anode am TxO Ausgang).

Wer eine „echte“ serielle RS232 Schnittstelle oder einen USB-RS232 Adapter (also einen Adapter der RS232-konforme Signale ausgibt) hat, der kann die Originalschaltung für einen DIY-Adapter wie von Hagen vorgeschlagen benutzen:

Geeignete Shottky-Dioden wären z.B. BAT85, SB120 (oder Andere). Der Widerstand ist im Prinzip kritisch, aber muss nicht exakt 2.7k sein. Diese Schaltung funktioniert oft aber nicht immer (evtl. mit den Dioden und Widerständen „rumspielen“!). Der GA250 mit 3.0 V interner Spannung scheint etwas anspruchsvoller zu sein als die 3.3 V Variante (bei mir hat die 3.3 V Variante mit SB120 und 2.2k perfekt funktioniert, aber nicht die 3.0 V Variante). Bei Steidlmick funktioniert BAS85 (=BAT85) und 2.7k auf vielen Rechnern, mehr dazu ab hier

Bemerkung: Bei Verbindungsproblemen kann es sich lohnen verschiedene Baudraten auszuprobieren, z.B. alles zwischen 19200, 38400, 57600, und 115200 bps.

Flashen der Firmware
Die Firmware wird in den mit dem Bootloader „ausgerüsteten“ GA250 Gyro geflasht, indem man den Gyro über den Programmier-Port (bei mir der Servo-Stecker) mit dem Programmieradapter und diesen wiederrum mit einen Windows PC verbindet. Der eigentliche Flashvorgang wird dann mit Haagen’s Programm AVRootloader.exe durchgeführt.

Das .hex File mit der aktuellen Firmware ist unter Firmware zu finden.

Programmierbox
Die Programmierbox kann verschieden realisiert werden. Ich benutze sehr gerne die Robbe Programmier Box, weil es eine sehr einfach zu realisierende und schöne kleine coole komfortable Lösung ist. Eine gute, weil billiger aber genauso einfach zu realisieren, Alternative ist die Turnigy DLux Programming Box, oder noch billiger und etwas schicker und handlicher is die Turnigy AquaStar Programming Box. Aber auch ein Arduino Uno mit LCD-Shield oder DIY-Boxen kommen in Frage.

Für den Umbau der Robbe Box, der Turnigy AquaStar oder DLux Box muss ganz ähnlich wie beim GA250 auch nur der passende Bootloader gebrannt und die Fuses entsprechend gesetzt werden. Also, aufschrauben, ISP-Pins anlöten… usw … fertig. Alles zur Hardware der Robbe und den zwei Turnigy Boxen habe ich hier aufgeschrieben: Robbe Programmer V2 No.8642: Bilder und Schaltplan, Turnigy DLux Box: Bilder und Schaltplan, Turnigy DLux Box: Bilder und Schaltplan. Zum Brennen der Fuses und des Bootloaders mit dem ISP AVR Programmer kann wieder AvrBurnTool benutzt werden. Und auch die Firmware für die Programmierbox wird auf ganz ähnlichem Wege wie beim Ga250 geflasht.

Fuses für die Robbe Box (Atmega88 und Atmega88PA):
– low fuse: 0xCF (CKDIV8= 1, SUT1:0= 00, CKSEL3:0= 1111)
– high fuse: 0xDD (BODLEVEL2:0= 101)
– ext fuse: 0x04 (BOOTSZ1:0= 10, BOOTRST= 0, Bootloader @ PD1/TXD)

Fuses für die Turnigy AquaStar Box oder Turnigy DLux (Board-002) Box:
– low fuse: 0xAE, high fuse: 0xCC

Fuses für die Turnigy DLux (Board-000) Box:
– low fuse: 0x84 (SUT1:0= 00, CKSEL3:0= 0100, BODEN=0, BODLEVEL=1)
– high fuse: 0xDC (BOOTSZ1:0= 10, BOOTRST= 0, Bootloader @ PD0/RXD)

Bootloader und Firmware für die Robbe Box, Turnigy AquaStar Box, Turnigy DLux Box, oder Arduin Uno + LCD Shield Box:
– die nötigen .hex Files sind unter Firmware zu finden

Beim GA250 kommen als Anschlussport für die Programmierbox im Prinzip alle drei Stecker-Anschlüsse in Frage. Der Rudder- und Gain-Stecker stecken allerdings im Empfänger, und sind in meinen Augen daher weniger leicht zugänglich. Deswegen habe ich den Servo-Stecker gewählt. Also, Servo abstecken, Programmierbox anstecken, Batterie an, und schon kann man den GA250 einstellen.

Bilder verschiedener Programmierboxen (Robbe, Turnigy DLux, Arduino Uno + LCD Shield, meine DIY Box):
progbox olliw progbox turnigy dlux box 000 olliw progbox arduino uno lcd shield olliw diy progbox olliw

Konfigurieren des GA250 Gyros vom PC aus
Das Windows-PC Program AvrConfig.exe erlaubt es die Parameter des Gyros mittels einer GUI einzustellen. Dies ist praktisch da man so alle Parameter schön im Überblick hat, und man Konfiguartionen auch als Dateien zum Wiederverwenden abspeichern kann, aber man braucht halt einen PC in Reichweite…

Das Prinzip ist ähnlich zum Flashen der Firmware: Gyro über den Bootloader-Port (bei mir der Servo-Stecker) mittels Programmieradapter an den PC anschliessen, und AvrConfig ausführen.

Bild der GUI (Version 0.18) für die GA250 Firmware Version v0.16:
ga250 cpgyro avrconfig olliw


Testumgebung

Telemetrie Gyrotester
Ich wollte nicht nur „wild“ rumprobieren und rumprogrammieren, sondern wollte das möglichst auch verstehen was ich so treibe. Der entscheidende Teil des Gyros, indem auch das ganze Know-How steckt, ist der PID Regler, bzw. eine verallgemeinerte Variante davon, und Aufgabe ist es die richtige Controller-Struktur zu finden und die beste Anpassung. Also mussten Meßdaten her, und so habe ich mir kurzerhand einen Telemetrie-Gyrotester gebaut. Das war einfach weil ich hierbei Code und Zeugl von meiner 450er-Telemetrie benutzen konnte. Als Messaufnehmer fungiert einfach ein weiterer GA250, an dem ich ein RFM02 Funkmodul angeschlossen habe. Als Empfänger dient mein Telemetrie-Empfänger, der passend umprogrammiert wurde. Damit kann ich während des Flugs die Gyro-, Rudder-, und Servo-Signale messen, welche alle 20 ms zusammen mit einem Zeitstempel mit 1 ms Auflösung an den Telemetrie-Empfänger gesendet und von dort an den PC weitergegeben werden. Zuerst hatte ich mit 100 ms gearbeitet, aber das reicht nicht aus. 20 ms gehen ganz gut, obwohl Schneller schon noch besser wäre, aber da müsste man sich deutlich Mühe geben um die Daten so schnell über den Äther zu schaufeln.

ga250 gyrotester transmitter olliwga250 gyrotester reciever olliw

Mein Test-Heli
Damit hat man eigentlich alles Nötige zusammen, was natürlich noch fehlt ist eine Heli. Jetzt wollte ich aber nicht meinen schönen geliebten TRex Sport dazu auseinanderreißen, der soll immer flughfähig bereit stehen… daher habe ich meinen eingemotteten CopterX wieder ausgemottet. Tatsächlich hat der Heli mit einem CopterX nicht mehr viel gemein, es ist ein Mischmasch aus CopterX V2, HK 450 Pro, und Align Teilen.

Vielleicht relevant: Regler Robbe Roxxy 950-6 mit Governor an, Motor Hobbymate HB2835 3800 kV, Ritzel 13er. Die Drehzahl ist ca. 2900-3000 U/min für idle down und ca. 3200-3300 U/min für idle up, aber so genau kann man das in den Tests nicht sagen, da sich die Lipospannung ändert und ich die Drehzahl nicht mit aufzeichen kann.

ga250 cpgyro testheli olliwga250 cpgyro testheli with progbox olliw


Grundsätzliche Überlegungen

Ich habe mit der Gyrotester-Telemetrie recht umfangreiche Testflüge gemacht. Die Ergebnisse sowie meine grundsätzlichen Überlegungen zum Gyro als Regler habe ich hier

Der Heli-Gyro als Regler: Theorie und Experiment (noch nicht vollständig)

vorgestellt, sowie in einem Thread bei RCGgroups, The Heli Gyro as a Controller: Theory and Experiment.


Basics zur Firmware

Ich habe mich bei meinem Design der Firmware sehr bemüht, das Maximale aus der Hardware herauszuholen. Dazu sollte man sich aber zunächst klar werden was das meint.

Was der GA250 kann, und was er nicht kann
Der GA250 wird in seiner Leistungsfähigkeit nie an die (meisten) teuren Gyros (und FBL-Systeme) herankommen, einfach wegen der verwendeten Hardware. Leider konnte ich keine guten Bilder vom Inneren teurer Gyros/FBL-Systeme im Netz finden, aber die die ich gefunden haben deuten an, dass z.B. nicht die ITG320?/IS?-Gyrofamilie verwendet wird, sondern die teureren Analog Devices Gyros (man sieht of BGA Gehäuse). Schaut man sich auf deren Webseite um, dann kommen da für einen Heli gar nicht so Viele von in Frage, aber eines scheint sichtbar zu sein, die Bandbreite dieser Gyros ist über 1 kHz, während die des im GA250 verwendeten ISZ650 Sensors mit 140 Hz angegeben ist. (EDIT: Ich bin mir nicht sicher ob das Analog-Devices-Bandbreiten-Argument zutrifft, Ich habe im Netz nun auch eine Aussage gefunden dass im GY410 ein anderer Sensor mit erheblich weniger Bandbreite benutzt wird). Zudem wird typischerweise auch ein „besserer“ Mikrokontroller verwendet, der z.B. 12 bit Auflösung des ADC bietet. Es gibt also doch einen Grund warum die teureren Gyros teurer sind. Aber nun zu der guten Nachricht, für die wirklichen Ultra-Hardcore-Heliflieger könnte es zutreffen, dass der GA250 z.B. nicht ausreichend schnell ist, aber soweit ich das sehe ist er für alle Anderen bei Weitem ausreichend! Jedenfalls, diese Zahl, eine Bandbreite von 140 Hz, entsprechend einer Zeitkonstante von 1.1 ms, merken wir uns.

Ich habe mich wie gesagt bemüht das Maximale aus dem GA250 herauszuholen, das betrifft vier Punkte:

ADC Wandler
Ich lasse den ADC Wandler im free running mode mit maximaler Samplingrate laufen, und schicke alle ADC-Werte durch einen Tiefpass-Filter. Die Überlegung ist zum Einen dem Aliasing-Problem möglichst gut zu begegnen. Jeder kennt diesen Effekt, und seine Bedeutung, er wird aber komischerweise anscheinend wenig ernst genommen. Die Samplingzeit ist 104 us, d.h., die Samplingfrequenz beträgt 9.6 kHz. Der anschliessende Tiefpass „mittelt“ über 16 Werte, so dass sich eine Zeitkonstante von 1.66 ms entsprechend einer Bandbreite von 96 Hz ergibt. Das ist nun etwas kleiner als die 140 Hz vom Gyrosensor, da verschenke ich im Moment also ein bischen. Für die ersten Versuche denke ich macht das nichts aus, und es wäre ja auch schnell gemacht nur über 8 Werte zu „mitteln“ (0.83 ms, 190 Hz). Das werde ich bei Gelegenheit noch genau testen ob das einen Unterschied macht. Der Sinn der Mittelung ist es natürlich ein möglichst rauschfreies Signal zu bekommen. Der Filter hilft aber auch beim Antialiasing. Und zuletzt kann er auch als Decimation begriffen werden, so dass sich die Auflöung des ADC-Wandlers auf effektiv 11.5 Bit verbessert. Bei der Implementierung muss man, da der ADC-Interupthandler alle 104 us oder alle 832 Taktzyklen aufgerufen wird und der Filter im Interrupt laufen muss, gut darauf achten effektiv zu programmieren um den Interrupthandler kurz zu halten. Bei mir sind’s zur Zeit maximal 5 us.

Regler Zeitschritte
Ganz ähnlich wie bei der ADC Abtastung kommt es auch beim Regler auf die „Abtastrate“ an. Die Regel ist einfach, so schnell wie möglich, was in der Praxis etwa 20 mal schneller als die Responsezeit des zu regelnden Systems bedeutet. Für einen 450er Heli sind das größenordnungsmäßig so 100 ms, d.h., der Regler sollte mit Zeitschritten von wenigen ms arbeiten. Bei einem reinen P-Regler wäre es ausreichend den Regler mit der Frequenz des Servosignals laufen zu lassen, also z.B. mit 3 ms bei einem 333 Hz Servo, aber wir wollen uns ja nicht auf einen P-Regler einschränken. Bei mir läuft die Regelung im 1 ms Takt. Vielleicht gingen noch 0.5 ms, werde ich bei Gelegenheit mal testen, aber das wird dann schon ganz schön knapp und mehr ist nicht drinnen, d.h., die 1 ms sind IMHO schon ganz gut.

Gain Signal Verarbeitung
Das Einlesen des Ruddersignals stellt keine große Herausforderung dar, da hierfür der ICP-Kanal genommen wird, und sich so „automatisch“ korrekte Messungen für die Rudderimpulslänge ergeben. Das ist aber beim Gain-Signal nicht so. Das wird über den INT0-Interrupt eingelesen, und die Zeitmessung hat daher einen Jitter. Ich habe mir nun viel Mühe gemacht diesen Jitter zu minimieren und möglichst auszublenden. Die Überlegung ist wieder einfach, der Gain-Wert wird im PID Regler verwendet, und wenn der Gainwert wackelt dann wackelt auch das Regler-Signal, und der ganze Aufwand möglichst gute Gyro- und Rudderwerte zu bekommen wäre zunichte gemacht, denn das wirkt sich genauso aus wie Noise. Für den Jitter sind die andere Interrupts verantwortlich, wobei hier allen voran der ADC Interrupt zu nennen ist, der ja wirklich oft aufgerufen wird. Wenn man da nicht aufpasst, bekommt man leicht einen Jitter von 10-20 us (ich habe 15 us gemessen). Durch „Aufpassen“ konnte ich den Jitter auf wenige us bekommen. Zusätzlich habe ich noch eine etwas kompliziertere Filter-artige Weiterverarbeitung des Gain-Werts eingebaut (average + threshhold). Vereinfacht gesagt werden nun nur beabsichtigte Änderungen im Gain-Wert die größer als +-2% sind durchgelassen. Damit ist das Gain-Signal immer perfekt stabil und bringt kein eigenes Rauschen ein. Das bedeutet aber auch, dass man den Gain-Wert nicht in kleinen Schritten ändern sollte. Ist aber kein Problem, einfach kurz den Gain-Switch am Sender einmal hin-und-her geflipt und schon passt’s.

Sicherheit
Viel Mühe ging auch in Sicherheit, der Heli soll ja nicht wegen dem Gyro abstürzen. Bei einem Heli-Gyro kann man da nicht viel machen, ausser dafür zu sorgen dass ein Failsafe erkannt wird und das Servo auf Mitte gestellt wird. Aber das ist auch schon etwas. Während ich glaube die obigen beiden Punkte schon ganz gut gelöst zu haben, kann man in Punkto Sicherheit immer noch Verbesserungen finden, diesbezgl. will ich also nicht behaupten bereits das Maximum realisiert zu haben. Was ich z.B. noch machen will ist den Watchdog mitzubenutzen. Dann können auch kurze Spannungseinbrüche verkraftet werden. Kommt aber erst noch.


Aktuelle Firm- und Software

2. Dezember 2012, v20121202
Firmware für GA250 Version v0.16:

  • Ga250_Cp_Gyro_Firmware_v016.hex oder mit Bootloader integriert:
    Ga250_Cp_Gyro_Firmware_v016_wbootloader_blackservoplug.hex

Bootloader für GA250:

  • BL_4GA250CpGyro_BlackServoPlug.hex oder BL_4GA250CpGyro_RedGainPlug.hex

Windows GUI AvrConfig Version v0.18:

  • AvrConfig.exe, AvrConfig.ini, AvrConfig.tls, GA250-Cp-Gyro-v016.dev

Firmware für Programmierboxen Version v0.14c:

  • ProgBox_v014c_RobbeBox_m88pa.hex oder ProgBox_v014c_RobbeBox_m88pa_wbootloader.hex
  • ProgBox_v014c_RobbeBox_m88.hex
  • ProgBox_v014c_TurnigyDLuxBox_b000_m8_8mhz.hex oder
    ProgBox_v014c_TurnigyDLuxBox_b000_m8_8mhz_wbootloader.hex
  • ProgBox_v014c_TurnigyDLuxBox_b002_m8_16mhz.hex oder
    ProgBox_v014c_TurnigyDLuxBox_b002_m8_16mhz_wbootloader.hex
  • ProgBox_v014c_ArduinoShield_m328p16mhz.hex

Bootloader für Programmierboxen:

  • BL_4RobbeBox_m88PA.hex
  • BL_4RobbeBox_m88.hex
  • BL_4TurnigyDLuxBox_b001_m8_8mhz.hex
  • BL_4TurnigyDLuxBox_b002_m8_16mhz.hex

Weitere Zusatzprogramme:

  • Windows Program AvrBurnTool Version v0.03: AvrBurnTool_v003.exe, AvrBurnTool.ini, AvrBurnTool4v003.dev
  • Windows Program AVRootloader (by Hagen): AVRootloader.exe, AVRootloader.ini, AVRootloader.dev
  • avrdude.exe, avrdude.conf, FT_PROG.exe, FTD2XX_NET.dll

Alles zusammen als zip File: GA250 gyro firmware & software package v20121202 [.zip]

Terms of usage: The softwares/firmwares are NOT FREE. You may use it gratis and freely for private purposes only. You may not distribute it publicly or include it in distributions; use links to this page. Furthermore, it is strictly forbidden to use the work in full or in parts in any manner that is intended for or directed toward commercial advantage or private monetary compensation, except you have a written agreement by the author.

„Features“ in v20121202:
– Unterstützung der Turnigy DLux Box mit Board-002
– Windowsprogram AvrBurnTool nun beigefügt

„Features“ in v20121125:
– Unterstützung der Turnigy DLux Box und des Arduino Uno + LCD Shields als Programmierboxen

„Features“ in v0.16:
– das wichtigste neue Feature: Die Parameter DebounceCCW/CW. Damit lassen sich perfekte Pirostops im Headinghold-Modus erreichen. Die „alten“ De-/Acceleration Parameter sind noch vorhanden, aber sollten nicht mehr benutzt bzw. benötigt werden.
– die Windows GUI wurde überarbeitet, und bietet die mittlerweile doch vielen Parameter, von denen die Meisten nie gebraucht werden, übersichtlicher in Tabs an.
– Gain Input Function bietet nun zusätzlich die Option „pitch“. In dieser Einstellung wird das Signal am Gaineingang als Pitch/Throttle interpretiert, und kann mit den Parametern Pitch Mix und Pitch Zero dem Servosignal zugemischt werden. Dies erlaubt eine Drehmomentkompensation (DMA), wie sie bei CP wie auch FP Helis nützlich ist (Feature in der Praxis noch nicht getestet).
– Die Reglerstruktur kann geändert werden, so dass das Verhalten dem von kommerziellen Gyros entspricht („classic“ und „fixed wing“) und z.B. für fixed wings besser geeignet ist (Feature in der Praxis noch nicht getestet).

„Features“ in v0.15:
– der Parameter I Dead Band wurde geändert, als Resultat funktioniert das Heading Hold nun noch BESSER! I Dead Band sollte immer =1 bleiben können.
– es wurde der neue Parameter Gain Input Function eingeführt, mit dem eingestellt werden kann was mit dem Signal am Gain-Anschluss anzustellen ist. Die Einstellung Gyro Mode = by gain entfällt, dies entspricht nun Gain Input Function = set gain & mode.
– es gibt eine Diagnose-Möglichkeit, um einige wichtige interne Settings im GA250 auszulesen
– die Firmwarestruktur wurde intern etwas vereinfacht und auf zukünftige Möglichkeiten vorbereitet

„Features“ in v0.14:
– Bug in Gyro Orientation beseitigt (Danke an Holger!)
– erweiterte und verbesserte Rudder Mitten und Rudder Deadband Behandlung
– die Wirkung von Gain wurde verdoppelt, die Wirkung von PID I halbiert.
– mit 10 Sekunden Rudder ganz links kommt man nun jederzeit in den Programmiermodus, das vereinfacht/beschleunigt die Parameter Einstellerei erheblich

Firmware Repository:
Firmware v0.16 als zip File: olliw-ga250-cp-gyro-v016-v014b-v018-2012-03-07.zip
Firmware v0.15 als zip File: olliw-ga250-cp-gyro-v015-v014b-v017-2012-02-05.zip
Firmware v0.14 als zip File: olliw-ga250-cp-gyro-v014-v014b-v015-2011-12-30.zip


„Leistungsschau“

Das mit dem Filmen hat nicht ganz so geklappt wie ich mir das dachte, es war kalt, der Heli hatte sich irgendwie besonders „kraftlos“ angefühlt, die Pirouetten am Angang habe ich nicht gescheit hinbekommen, der Speicher in der Kamera war plötzlich voll… etc pp… aber ich möchte Euch das Ergebnis nicht vorenthalten… mit der Bitte die schlechte Qualität zu verzeihen.

Bei den Pirouetten am Anfang habe ich zwischen Heading-hold und Rate-Mode hin-und-her gewechselt… wer sieht wann welcher Mode benutzt wurde? (man kann es sehen, aber dieses „Suchspiel“ soll demonstrieren dass der implementierte Regler im HH-Mode ganz gut funktioniert)


Externe Beiträge

Holger’s Anleitung Idiot’s Guide to Olliw’s GA250 Firmware [.pdf]
TAUSEND Dank Holger!

Deutsche Übersetzungen von Mick Steidl, mit Ergänzungen
OlliW’s Firmware-Projekt für den Assan GA250 Gyro: Eine Bauanleitung für Anfänger [.pdf]
OlliWs alternative Firmware für den Assan GA250 Gyro, v0.16 [.pdf]
TAUSEND Dank Mick!


82 Kommentare

Schreibe einen Kommentar zu Marco Camargos Antworten abbrechen