Quadrocopter, Mechatroniklabor-Projektarbeit

V 30.12.10

Einführung

Im fünften Semester unseres Studiums „Mechatronik Trinational“ konnten wir im Mechatroniklabor der Fachhochschule Muttenz kleine Projektarbeiten durchführen. Der Zeitrahmen, um ein anständiges Projekt zu realisieren, wurde aber leider sehr eng berechnet. Es standen uns nur vier Tage à acht Lektionen zur Verfügung. Weitere Arbeiten am Projekt musste man, sofern man selbst ehrgeizig ist und die Zeit aufbringen konnte, in der Freizeit verrichten.

Die von der FH vorgeschlagenen Projekte setzten sich alle mit Hardwarekomponenten im Zusammenspiel mit Softwaredesign auseinander. Darunter befanden sich Projekte mit Fishertechnik, wie z. B. Plotter oder manövrierfähige Roboterarme, sowie auch rasenmähermässige Fahrzeuge mit leistungsstarken FPGA-Modulen von National Instruments. Bei all diesen Projekten war bereits Vorarbeit geleistet worden, da sie wie z. B. die Fishertechnik-Projekte jährlich wieder verwendet werden. Wir, Michael Stebler und ich, wagten uns an etwas Neues, was noch an keine Hardware oder Software gebunden war; das Quadrocopter-Projekt.

Auf dieser Seite soll das Projekt in groben Zügen erklärt werden. Die ausführliche Dokumentation, wie wir sie der  Fachhochschule aushändigten, können Sie als PDF herunterladen (64 MB).

Konstruktion

Unser Quadrocopter besteht grundsätzlich aus zwei Trägern, welche ein Kreuz bilden und mittels Steckverbindung verbunden sind. Durch die einfachen rechteckigen Formen wurde versucht, den Bearbeitungsaufwand möglichst gering zu halten. Um auch die Materialbeschaffungskosten klein zu halten, wurden diese Träger aus Styrodur gefertigt.

Die beschriebene Steckverbindung wurde letztendlich geklebt und mit Sperrholz und schrauben zusätzlich verstärkt. Auch die Motorenhalterung aus Kunststoff wurde in das Styrodur hineingeklebt und zusätzlich je mit einer Schraube gesichert.

Elektronische Hardware

At90usb1287

Als Herzstück unseres Projekts dient das AT90USB-Key-Entwicklungsboard, welches sich durch seine geringe Masse auszeichnet und daher sehr geeignet ist. Der darauf verbaute Controller AT90USB1287 ist ein leistungsstarker 8-bit-Mikrocontroller des Chipherstellers ATMEL. Seine Eckdaten, welche für unser Projekt von Bedeutung waren, sind folgende:

· 8MHz Taktrate

· 4x unabhängige 8-bit-, resp. 16-bit-Timer/Counter

· 8x externe Interrupteingänge

· 10x 8-16-bit PWM-Ausgänge

· USB-Bootloader für direktes flashen via USB-Schnittstelle

· USART/UART-Schnittstelle für eventuelle Gyro-Sensoranbindung

Die Leistung dieses Chips ist klar ausreichend für unser Quadrocopter-Projekt, die Kunst liegt in der Programmierung, auf welche in einem späteren Abschnitt noch eingegangen wird.

       Abgriff des PPM-Signals (rot)                   Das PPM-Signal oben und der dritte PWM-Ausgangskanal unten        Empfänger mit PPM-Ausgang (hier blau)

Motoren, Treiber und Akku

Für den Antrieb des Quadrocopters standen uns vier bürstenlose Motoren (Brushless-Motor) mit entsprechenden Drehzahlstellern zur Verfügung. Diese werden mit dem im Modellbau üblichen PWM-Signal angesteuert. Die Drehzahlsteller, welche auch die 5V-Steuerspannung für Controller und Peripherie aufbereiten, werden direkt durch einen dreizelligen LiPo-Akku (11.1V, 4.9Ah) bestromt.

                 Brushless-Motor                                               Lithium-Polymer--Akkupack 11.1V, 4900mAh                                         3-Phasen-Drehzahlsteller

RGB-Beleuchtung und Spannungsüberwachung

Da bei vielen meiner Projekte auch das Design eine Rolle spielt, wollte ich unser doch eher klobiges Konstrukt mit RGB-LED-Stripes aufwerten. Diese sollten aber auch noch einen funktionalen Nutzen haben: Die Orientierung des nahezu symmetrischen Flugobjektes wurde durch Rundum-Kennzeichnung des vorderen Armes und Beleuchtung der seitlichen Arme an ihren Extremitäten durch die dreifarbigen LED-Streiffen vereinfacht.

Die Farbe der Beleuchtung gibt ausserdem den Betriebszustand des Flugobjektes an. Je nach Knüppelstellung der Fernbedienung werden die drei Farben unterschiedlich gedimmt. Zwischendurch blinkt die Beleuchtung grün, orange oder rot, um dem Piloten den Akkustand mitzuteilen. Die Akkuspannung wird mit vorgeschaltetem Spannungsteiler (mit Z-Diode) an einem Analog/Digital-Converter-Eingang des Mikrocontrollers gemessen.

Sender und Empfänger für Fernsteuerung

Um hardwaretechnisch eine möglichst einfache Signaleingabe realisieren zu können, griffen wir auf ein älteres, analoges 8-Kanal-FM-Fernsteuersystem zurück, (mc-14, c19, Graupner) welches zur Übertragung der Knüppelstellungen am Sendepult die „Puls-Position-Modulation“ (PPM) verwendet. Dieses PPM-Signal suchten wir schließlich auch auf der Platine des Empfängers, um es von dort an einen Interrupteingang unseres Mikrocontrollers zu leiten.

                                 AT90USB-Key-Entwicklungsboard                                    AT90USB1287-Pinout                              Verdrahtetes Entwicklunsboard

Software

PPM-Signalinterpretierung

Als Zeitbasis der Signalverarbeitung dient der Timer/Counter0 des Controllers, welcher auf eine Taktfrequenz von 125 kHz und einen Zählerbereich von 256 Schritten konfiguriert ist.

Das bereits unter „Hardware“ beschriebene PPM-Signal des Empfängers wird an einem externen Interrupteingang „INT0“ des Mikrocontrollers angeschlossen. Bei jedem Flankenanstieg des PPM-Signals wird so die Interruptroutine „EXT_INT0“ ausgelöst.

Bei jedem Interrupt des PPM-Sinals wird der aktuelle Zählerstand des Zählers „TCNT0“ in eine Arrayvariable „kanal[x]“ gespeichert und der Timer wird zurückgesetzt. Anschliessend wird der Kanalpointer „CHin“, eine Variable welche den aktuellen Kanal und gleichzeitig den Speicherplatz des Zählerstandes im Array bestimmt, um eins erhöht.

Während der Synchronisationsphase des Signals, welche ca. 6-14 ms dauert, überläuft der Zählerwert mehrmals. Dabei wird ein „Timer/Counter 0 Overflow Interrupt“ ausgelöst: „TIM0_OVF“. Bei dieser Interruptroutine wird der Kanalpointer wieder auf null zurückgesetzt.

Beschreibung: C:\Users\Christian Vögtli\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Word\PPM_Int0_OVF_illustriert.jpg

Funktionszuweisung

Im Programmabschnitt der Funktionszuweisung werden, sofern das empfangene Signal OK ist, die Sendekanalstellungen den vier Flugfunktionen (pitch, gier, nick, roll) mit einem bestimmten Offset zugewiesen. Offset-Variabeln, welche sich per Tastendruck automatisch einstellen lassen, dienen dazu, die Mittelstellungen der Sendekanäle mit denen des Programmes abzugleichen. Diese Werte werden im EEPROM des Controllers gespeichert und sind somit auch nach Neuprogrammierung und Reset immer noch präsent.

Mixer

Der Mixer ist im eigentlichen Sinne eine mathematische Berechnung der vier Stellgrössen aus den einzelnen Funktionen. Wie unten im Mix-Diagramm ersichtlich ist, hängt jede Ausgangsgrösse von mindestens drei Funktionsgrössen ab. Wie sich die einzelnen Grössen zusammensetzen, wird durch die Drehrichtung sowie durch die Position des anzusteuernden Motors bezüglich des Quadrocopter-Schwerpunkts bestimmt.

Signalausgabe

Die Aufbereitung des Signals für die vier Motorensteller wurde mittels eines weiteren Timers bewerkstelligt, welcher unabhängig vom restlichen Ablauf seine Routinen aufruft. (8-Bit, 125kHz)

Die Signale werden immer bei Überlauf resp. bei Aufruf des Overflow-Interrupts kommutiert. Zur Ausgabe eines Signals wird an einem Ausgang das entsprechende Bit eingeschaltet und der Zählerwert (TCNT2) wird auf 255, abzüglich Signalwert, geladen. Sobald der Zähler das nächste Mal überläuft, was zeitlich vom vorgeladenen Zählerwert abhängig ist, wird das zuvor aktivierte Bit wieder ausgeschaltet und der nächste Kanal bearbeitet. Dabei sind theoretische Pulslängen von ~0< bis 2.05 ms möglich.

Beschreibung: C:\Users\Christian Vögtli\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Word\ServoOverflow_illustriert.jpg

Eine zweite Methode mit der Zählerfunktion „Compare-match“ ist in der ausführlichen Dokumentation zu finden.

Zusammenfassung

Unser Quadrocopter war zum Schluss des Projekts flugtauglich, doch waren wir wohl nicht die geborenen Piloten. Ich brachte es mit etwas Helikoptererfahrung (Carboon FP) gerade mal zu kurzen Schwebeflügen. Der Quardocopter hat zwar mehrere, jedoch kleinere und leichtere Propeller als ein Helikopter, was nicht viel zur Stabilität beiträgt (geringerer Kreiseleffekt). Um damit fliegen zu können, muss man Störungen sehr schnell bemerken und auskorrigieren können, was auch einem sehr geübten Piloten noch Mühe bereiten würde.

Professionelle Quadrocopter sind deshalb mit einem Gyrosensor ausgerüstet, um ihre Lage automatisch auszuregeln. Uns hätte auch ein solcher Sensor zur Verfügung gestanden, jedoch war es in dieser kurzen Zeit nicht möglich, diesen noch zu implementieren. Zudem hätte dieser per UART-Schnittstelle mit 115200 Baudrate schon alleine durch die Kommunikation einiges vom Controller abverlangt.

So liegt es nun am nächsten Team, welches an unserem Quadrocopter weiter basteln wird, einen Gyrosensor zu verbauen und das Fliegen durch automatische Lageregelung zum Kinderspiel zu machen.

Ganze Arbeit ansehen...