Forum: Mikrocontroller und Digitale Elektronik Quadrocopter mit Raspberry Pi - Regler und/oder Motoren funktionieren nicht


von Janos Zachow (Gast)


Lesenswert?

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

von fonsana (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Quad-Flieger (Gast)


Lesenswert?

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.

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

>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

von moep (Gast)


Lesenswert?

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.

von Hmm (Gast)


Lesenswert?

Lade die Akkus mal wieder auf! Akkus geben nicht grenzenlos Saft her!

von Janos Zachow (Gast)


Lesenswert?

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

von min (Gast)


Lesenswert?

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.

von Tim  . (cpldcpu)


Lesenswert?

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.

von Janos Zachow (Gast)


Lesenswert?

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 ;)

von Ich (Gast)


Lesenswert?

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

von Jürgen H. (Gast)


Lesenswert?

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.

von Quad-Flieger (Gast)


Lesenswert?

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?

von Janos Zachow (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Quad-Flieger (Gast)


Lesenswert?

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?

von fonsana (Gast)


Lesenswert?

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

von Janos Zachow (Gast)


Angehängte Dateien:

Lesenswert?

Also hier ist schonmal das Bild vom Oszi.

von Igorrrr mehr Saft (Gast)


Lesenswert?

Dein Signal ist falschrum für Modellabauregler. Also Invertieren.

von MirkoB (Gast)


Lesenswert?

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

von Janos Zachow (Gast)


Lesenswert?

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.

von komaegg (Gast)


Lesenswert?

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ß

von Andreas K. (hammerhead)


Lesenswert?

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.

von philipp280 (Gast)


Lesenswert?

Schreibt mir mal bitte wenn es zu einem Ergebnis gekommen ist und das 
Teil Fliegt (über das Internet)... E-MAIL: philippgmelin@yahoo.de

von Karl H. (kbuchegg)


Lesenswert?

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
von Veroy (Gast)


Lesenswert?

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.

von collins tsafak (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.