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.
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
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.
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.
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