Hallo, im Rahmen meiner Seminarfacharbeit habe ich mich mit dem Bau und der Programmierung eines Quadrocopters beschäftigt. Als Steuereinheit dient dazu ein Raspberry Pi Model B, Rev. 2, welcher mit dem Internet verbunden ist und dadurch über SSH gesteuert werden kann. Daran angeschlossen sind ein Beschleunigungssensor und ein Ultraschallsensor - funktioniert beides. Ansonsten werden über die GPIO-Pins mittels eines PWM-Signals 4 Regler angesteuert (robbe ROXXY BL-Control 710) an denen jeweils ein Brushless-Motor hängt (robbe ROXXY BL-Motor 2827 - 34). Regler und Motoren hängen an einem 3 Zellen LiPo-Akku mit 7,4V. Das PWM-Signal muss eine Intervalllänge von 15-25ms haben, der Schaltzustand HIGH sollte dabei in Abhängigkeit von der Drehstärke der Motoren zwischen 1,1 und 2,1ms liegen. Also 1,1ms sind niedrigste Drehung und 2,1ms volle Power ;) Ansonsten haben die Regler noch einen Anlaufschutz, darf also nicht mit 2,1ms anfangen, sondern muss mit 1,0ms beginnen und dann stufenweise hoch. So weit so gut. Ich habe ein kleines Python-Skript geschrieben, welches von 1,0ms bis 2,1ms in 0,1ms-Schritten hochzählt und dann immer 2 sek. lang das entsprechende Signal sendet. Habe dann alles angeschlossen und verkabelt und dann mal ausprobiert. Anfangs immer nur einen Motor direkt am Raspberry Pi - hat alles geklappt. Dann alle 4 festgemacht und verkabelt und auch angeschlossen. Anfangs ging auch das einwandfrei, aber sehr selten kam es dazu, dass einer (nicht immer der selbe, sondern jeder einmal) der Motoren/Regler (lässt sich nicht sagen, wo der Fehler ist) nicht mit angegangen, oder erst 2 sek. später mit angegangen ist. War erstmal glücklich, weil das alles funktioniert hat und dachte diese kleinen Aussetzer passieren mal und wenn ich das nochmal ganz in Ruhe ordentlich verkabel geht das schon. Leider wurde es mit jedem Ausprobieren schlimmer und das alle 4 gleichzeitig liefen wurde zur Seltenheit. Dann sind halt irgendwann zwei komplett ausgefallen. Dabei ist wichtig, dass die Regler regelmäßig beepen, wenn sie mit Strom versorgt sind und noch 2 mal kurz beepen, wenn sie das Signal bekommen zu starten. Beides funktioniert auch noch richtig, aber die Motoren drehen sich halt nach dem Startsignal halt nicht mehr. Bin sehr verwundert darüber und weiß jetzt erstmal nicht weiter. Hoffe jemand hat eine Idee, wo der Fehler liegen könnte. Schonmal danke für eure Aufmerksamkeit und Zeit :) Liebe Grüße, János
Janos Zachow schrieb: > Dabei ist wichtig, dass die Regler regelmäßig beepen, wenn sie mit Strom > versorgt sind und noch 2 mal kurz beepen, wenn sie das Signal bekommen > zu starten. Beides funktioniert auch noch richtig, aber die Motoren > drehen sich halt nach dem Startsignal halt nicht mehr. > > Bin sehr verwundert darüber und weiß jetzt erstmal nicht weiter. Oszi dran und das Signal an die Regler betrachten. fonsana
1. Linux ist per se nicht echtzeitfähig. Solltest dich also dringlich nach einem Echtzeitkernel bzw. einem Patch dafür umsehen. 2. Deine Verdrahtung so wie die Umhausung des RPi wird nicht EMV gerecht sein. EMV ist natürlich bei den Strömen in in die BL-Motoren rein- und rausgehen ein massives Problem. Zeig doch mal ein Bild von deinem Aufbau 3. Dein Skript ist nix - das müsstest du eben mal herzeigen, dann könnten sich da ein paar Linuxexperten dazu äußern.
Janos Zachow schrieb: > Regler und Motoren hängen an einem 3 Zellen LiPo-Akku mit 7,4V. Bei einem gewöhnlichen 3 Zellen Lipo-Akku (ich gehe mal von der Reihenschaltung aus) sollte die Spannung aber deutlich höher liegen? Die Roxxy 710 BL-Control haben, wenn ich mich recht erinnere) zum einen eine Abschaltung bei zu geringer Akku Spannung (sollte überprüft werden) und besitzen ja auch einen Spannungsregler für ihre Elektronik der bei 7,4 Volt bzw. drunter eventl. nicht mehr sauber 5 Volt zur Versorgung der Elektronik regelt.
>Bei einem gewöhnlichen 3 Zellen Lipo-Akku (ich gehe mal von der >Reihenschaltung aus) sollte die Spannung aber deutlich höher liegen? Allerdings! Normal wären so 11-12V. Ab 9V tun die Regler normalerweise nix mehr und der Motor steht.Vlt. ein Hinweis. Grüsse
Gebhard Raich schrieb: > Allerdings! Normal wären so 11-12V. Ab 9V tun die Regler normalerweise > nix mehr und der Motor steht.Vlt. ein Hinweis. Würde auch folgendes erklären: Janos Zachow schrieb: > Leider wurde es mit jedem Ausprobieren schlimmer und das alle 4 > gleichzeitig liefen wurde zur Seltenheit. Dann sind halt irgendwann zwei > komplett ausgefallen.
Lade die Akkus mal wieder auf! Akkus geben nicht grenzenlos Saft her!
Danke für die schnellen Antworten. Die Zellen von dem LiPo-Akku waren leider ein Tippfehler von mir. Sind 2 Zellen, also 7,4V Akku neu aufgeladen hab ich schon, bringt keine Veränderung. Ein Oszi hab ich schon an das RPi geschlossen, bevor ich das überhaupt an die Regler und Motoren geschlossen habe, sah alles einwandfrei aus. Das Skript:
1 | import RPIO as rpi # Modul zur Ansteuerung der GPIO-Pins |
2 | import time |
3 | rpi.setmode(rpi.BOARD) |
4 | rpi.setup(15,rpi.OUT) # Pin 15 als Output |
5 | |
6 | for i in range(10,21): |
7 | for x in range(100): # ca. 2 sek. |
8 | rpi.output(15,1) # Pin 15 auf HIGH setzen |
9 | time.sleep(i/10000) # 1,0-2,0 ms warten |
10 | rpi.output(15,0) # Pin 15 auf LOW setzen |
11 | time.sleep(18) # 18 ms warten |
Gibt mittlerweile auch noch eine direkte PWM-Funktion, das sähe dann so aus:
1 | from RPIO import PWM |
2 | import time |
3 | |
4 | rpi.setmode(rpi.BOARD) |
5 | rpi.setup(15,rpi.OUT) # Pin 15 als Output |
6 | |
7 | servo = PWM.Servo() |
8 | |
9 | for i in range(1000,2100,100): |
10 | servo.set_servo(15, i) # PWM an Pin 15, Interval 20ms, i als HIGH-Dauer |
11 | time.sleep(2) |
12 | |
13 | servo.stop_servo(15) |
Das letzte konnte ich allerdings nicht mehr ausprobieren, als alles noch ging, kann daher nicht mit Sicherheit sagen ob das so funktioniert. Allerdings kommt bei beiden Skripten das Start-Beepen. EMV könnte tatsächlich das Problem sein, nur weiß ich nicht, was ich dagegen machen kann.? Echtzeitfähigkeit ist vermutlich nicht die Ursache, da ich einen der Motoren auch schon an eine Heli-Steuerung von mir angeschlossen habe, bei dem es genauso ist, dass es anfangs ging und jetzt nicht mehr (nur Start-Beepen).
Manche Regler initialisieren erst, wenn der Gasknüppel einen niedrigen PPM-Wert 900µs erhält. 2 Zell Lipo ist für einen Quadrocopter vielleicht zu wenig. Meistens werden 3 Zell Lipos verwendet. Darauf sind möglicherweise die Regler auch programmiert. Die Spannungsabschaltung macht bei einem Quadrocopter eh kein Sinn, denn der fällt im Gegensatz zu einem Flugzeug einfach runter. Ein weiterer Punkt könnte die PWM-update Frequenz sein. 400 Hz verarbeitet nicht jeder Regler. Meistens werden die Regler deswegen geflasht. Firmware simonk oder olliw. google hilft.
Wer stellt denn bitte solche Themen? Hat Dein Betreuer einen klaren Plan, ob das Unterfangen überhaupt realisitisch umsetzbar ist? Das sieht mir nach einem Projekt aus, welches nur auf dem Paper einfach aussieht.
Also laut Datenblatt sollte der Regler mit 2 Zellen klar kommen: http://www.produktinfo.conrad.com/datenblaetter/200000-224999/206292-an-01-ml-ROXXY_BLUSHLESS_CONTROL_720_de_en_fr.pdf Ich habe auch schon mal den Hersteller wegen der Frequenzen angefragt, aber die haben gesagt, dass die 1,0 ms schon die richtige Startfrequenz sind. den letzten Punkt von 'min' versteh ich mangels Fachwissen leider nicht. Kann mir jemand erklären was damit gemeint ist? Themenwahl war freiwillig, es musste nur etwas mit Informatik zu tun haben. Das Thema sah aber auch von Anfang an nicht einfach aus, was es ja gerade interessant macht. Man kann vielleicht dazu sagen, dass ich auf einem Spezialgymnasium für Mathe, Nawi und Informatik bin ;)
Hallo! Also 2s Zellen gehen definitiv denn bei mir fliegen 2 Quadrokopter damit rum. Aber Achtung es fließen teilweise schon bedeutende Ströme. Außerdem werden für die Regelung zwingend Gyros gebraucht. Viel Erfolg
Janos Zachow schrieb: > den letzten Punkt von 'min' versteh ich mangels Fachwissen leider nicht. > Kann mir jemand erklären was damit gemeint ist? 'min' meint damit wie oft Deine PWM-Impulse pro sekunde wiederholt werden. Du hast ja aber in Deinem Eröffnungspost geschrieben, daß Du alle 15-25ms einen neuen PWM-Impuls sendest. Du liegst damit also bei den klassischen 50Hz PWM-Update-Frequenz. In modernen Systemen, welche eine schnellere Reaktion erfordern hat man diese Wiederholrate auf bis zu 400Hz angehoben. 'min' hat also Deinen Post nicht aufmerksam gelesen. Recht hat er allerdings damit, daß nicht alle Regler damit klarkommen. Die hohe Wiederholfrequenz von 400Hz erreicht man dadurch, daß die Pause zwischen den Impulsen stark verkürzt wird. Deine, im Eröffnungspost, angegebene Intervall-länge würde in dem Fall also nur noch 2,5ms betragen. Deine 50Hz Pwm-Rate ist für einen stabilen Quadrokopter bestimmt etwas langsam. Ohne Gyroskope wird Dein Projekt nicht gelingen! Da muss ich 'Ich' Recht geben.
Janos Zachow schrieb: > Ich habe auch schon mal den Hersteller wegen der Frequenzen angefragt, > aber die haben gesagt, dass die 1,0 ms schon die richtige Startfrequenz > sind. > > den letzten Punkt von 'min' versteh ich mangels Fachwissen leider nicht. > Kann mir jemand erklären was damit gemeint ist? Du verwechselst hier vermutlich ein paar Dinge wie Frequenz und Tastverhältnis bzw. Impulslänge. Es gibt bei Mikrocontroller.net mehrere Artikel zum Thema PWM und Servo die du vielleicht zum Einstieg lesen solltest. Die Regler können neue Sollvorgaben nicht beliebig schnell realisieren. Die suche nach SimonK in Bezug zu 400Hz sollte bei Google viele Informationen liefern. Wie viel mAh hat dein Akku? Wenn die Motoren anlaufen, bricht die Akkuspannung stark ein? Geht überhaupt noch ein Motor oder streiken mittlerweile alle dauerhaft? Hast du die Möglichkeit das PWM-Signal des RPi mit einem Oszi zu betrachten? Werden die Regler sehr warm? Hat das RPi eine gemeinsame Masse mit den BL-Control?
okay danke naja ich habe ja einen 3-Achsen Beschleunigungssensor, mit dem die Neigung und alles weitere nötige kontrolliert wird, um den Quadrocopter aufrecht zu halten. Der Akku hat 5400mAh, Regler werden beim Betrieb nicht warm. Im Anhang ist ein Bild vom Aufbau (Leider ist die Beschriftung von RPi zu Regler falsch, also rot und schwarz sind halt vertauscht) Nachher werde ich die Spannung vom Akku beim Betrieb überprüfen und auch mal ein Oszi an das PWM-Signal schließen. Bilder stell ich dann hier rein. Ich glaube im Moment geht noch einer, aber heute Nachmittag überprüf ich noch mal alle.
In deinem Bild hast du die 5V Leitung der BL-Control mit 5V des RPi verbunden. Das erscheint mir doch etwas merkwürdig, denn die BL-Control hat einen eigenen Spannungsregler für seine Elektronik, der aus den 7,4V des Akkus versorgt wird und ca. 1A liefert. Diese 5V Spannung steht über BEC für andere Geräte zur Verfügung. Die Frage wäre also, ob dein RPi eine eigene Spannungsversorgung hat, oder ob du es über die BEC der Regler versorgst oder sogar beides gleichzeitig machst?
Janos Zachow schrieb: > Ein Oszi hab ich schon an das RPi geschlossen, bevor ich das überhaupt > an die Regler und Motoren geschlossen habe, sah alles einwandfrei aus. Dann tu das jetzt noch einmal. fonsana
Also hier ist schonmal das Bild vom Oszi.
Dein Signal ist falschrum für Modellabauregler. Also Invertieren.
Janos Zachow schrieb: > naja ich habe ja einen 3-Achsen Beschleunigungssensor, mit dem die > Neigung und alles weitere nötige kontrolliert wird, um den Quadrocopter > aufrecht zu halten. ...das geht bestimmt in die Hos...äh Wiese. Wie willst Du erkennen, ob der Quadcopter sich um die eigene Achse dreht? ...x und y bleiben gleich und z auch...? (Ich gehe mal von einer Anbringung direkt im Drehpunkt aus) Du wirst in jedem Fall noch 3 Gyroskope brauchen. Diese kannst Du mit dem Beschleunigungssensor fusionieren und evtl einem Bodensensor (Maussensor mit Optik). ...schau Dir mal das "Heli-Command" an... sowas in der Art. (Ansonsten eine fertige Inertialplattformen) Mirko
Ja also das Bild ist einfach nur gedreht, hab ich nicht mitbekommen beim hochladen. Wenn er sich um die eigene Achse dreht, dann wirkt in x und y-Achse eine Beschleunigung, bei der während der gesamten Drehung (vorrausgesetzt eine gleichmäßig beschleunigte Rotation liegt vor) x²+y² immer konstant ist. Dadurch lässt sich ein Drehen um die eigene Achse von anderen Bewegungen unterscheiden. Das prüft das Programm und steuert dann gegen.
Noch ein Hinweis. Die Sprache die du verwendest sieht mir stark nach Python o.ä. aus, was bedeuteten würde, dass die Umschaltdauer von high auf low relativ hoch ist. Zudem musst du wissen, dass der PI sporadisch IRQs ausführt, was dein Skript ab und zu kurzzeitig unterbricht und somit zu ungewünschten Ergebnissen führt. Ich empfehle dir deine Programme in C zu schreiben, dann könntest du sogar mit 10MHz (selbst gemessen und bestätigt) einen beliebigen GPIO umschalten. Mit Python bist du bei nur etwa 50kHz und die Signale sehen wirklich nicht schön aus, hier ein Video dazu: http://www.youtube.com/watch?v=8mLMGlzdxrE Natürlich sollten 50kHz für die Steuerung reichen, aber Python ist glaube ich trotzdem zu langsam wenn noch Zwischenrechnungen ausgeführt werden. Desweiteren hättest du nur 50/4 kHz übrig, da du alle 4 ESCs ansprechen musst. Dann darfst du zusätzlich nur 1-2ms senden (Pulsdauer PWM), und das möglichst genau -> sagen wir du willst eine Toleranz von 5% um die Motoren relativ genau steuern zu können: (Pulsdauer min bis max) 1ms bis 2ms +- 1ms/20 für 50µs Genauigkeit brauchst du 20kHz -> Python: 50kHz/4 = 12,5 kHz 5% Genauigkeit = 20 kHz Das ist jetzt sehr hart gerechnet, aber du hast ja wie gesagt noch IRQs und Zwischenrechnungen deshalb denke ich, dass dein Fehler in Python zu finden sein könnte. Ich hoffe diese Gedanken helfen ein wenig. Gruß
Ich schrieb: > Hallo! Also 2s Zellen gehen definitiv denn bei mir fliegen 2 > Quadrokopter damit rum. Aber Achtung es fließen teilweise schon > bedeutende Ströme. Außerdem werden für die Regelung zwingend Gyros > gebraucht. Viel Erfolg Mag sein, aber da wissen die Regler, dass es nur 2S sind. Wenn du einen entladenen 3S anschließt und der ungefähr unter 10V fällt, machen die üblichen ESCs, die auf LiPo eingestellt sind, dicht. Die lassen es einfach nicht zu, dass du deinen Akku tiefentlädst. Man kann die Funktion natürlich abschalten, aber dann macht man den Akku kaputt.
Schreibt mir mal bitte wenn es zu einem Ergebnis gekommen ist und das Teil Fliegt (über das Internet)... E-MAIL: philippgmelin@yahoo.de
philipp280 schrieb: > Schreibt mir mal bitte wenn es zu einem Ergebnis gekommen ist und das > Teil Fliegt (über das Internet)... Gefühlsmässig hätte ich gesagt: den hat er längst eingestampft. Wer sowas zum fliegen bringen will, soll das doch bitte erst mal mit einer Fernsteuerung machen und die dann auch drinn lassen!. Wie willst du denn den Q-Kopter sonst aus einer brenzligen Situation rausholen, wenn die Programmierung nicht stimmt? Die Leute sehen (leider) immer nur die tollen Videos auf Youtube, sehen im Geiste ihren Kopter schon ganz alleine von Mitteldeutschland aus zum Nordpol und wieder zurück fliegen und vergessen dabei komplett, dass vor dem Wollen das Können kommt und auch kommen muss.
:
Bearbeitet durch User
Ich arbeite auch gerade an einem ähnlichen Projekt. Bei mir kommt der Dji Flame Wheel F450 zum Einsatz und hatte das gleiche Problem. Mit deinem Script warst du erst mal nicht komplett falsch, jedoch solltest du nicht das RPIO Modul nutzen sondern lieber auf das RPi.GPIO umsteigen und dann die Pins als PWM Output festlegen. Hoffe das hilft und lass dich nicht von den anderen runter machen ich finde das auch interessant daran zu basteln, denn ein fertiges Konzept kaufen kann ja jeder.
hallo zusammen, ich möchte gerne ein quadracopter mit einem Raspberry pi steuern!!! auf dem Pi habe ich ein modul "RFM12B" verbunden!!!! könnt ihr mir helfen beim Schreiben des Programm? ich meine mit dem code ! ich möchte gerne die bewegungen programmieren (nach links, nach rechts, vorwärts, rückwärts) bitte um hilfe
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.