Forum: Mikrocontroller und Digitale Elektronik Reglerwerte auf Motoren, aber wie genau?


von Robert K. (qcopternoob)


Lesenswert?

Hallo mikrocontroller Anhänger:)

Ein Freund von mir und ich haben uns vorgenommen einen Quadrocopter 
„selbst“ zu bauen und zu programmieren. Die Teile haben wir uns besorgt 
(Motoren, ESC’s, Seonsoren und Rahmen) und auch alles zusammengebaut. 
Nun geht es darum die Werte der Sensoren geeignet zu verwenden und damit 
den Copter zumindest mal stabil in der Luft halten zu können. Die 
Theorie ist dabei nicht ganz so undurchsichtig und schwer begreiflich, 
aber die genaue Umsetzung dann doch eher :D. Als 6-DOF Sensor benutzen 
wir den MPU6050 über I2C. Zur Steuerung benutzen wir einen Arduino Uno. 
Die Motoren werden über ein PWM-Signal zwischen 1190 und 1700 
angesteuert, das macht 510 Schritte.
Unsere Fragen sind:

- Welchen Bereich der 510 Schritte kann der Regler überhaupt 
beeinflussen? Ein Beispiel was wir damit meinen: Wenn der Copter z.B. 
bei einem Wert von 1300 locker über dem Boden schwebt, was ist das 
maximale was der Regler auf die Motoren draufgeben bzw. abziehen kann je 
nachdem wie er ausgelenkt wird. Soll der Regler die Möglichkeit haben 
die Motoren auf bis zu 1700 hochdrehen lassen zu können bzw. die andere 
Seite bis auf 1190 herunter zu drosseln um eine Stabile Lage erreichen 
zu können, oder muss man dem Regler doch nur einen gewissen Bereich 
geben in dem er Regeln darf, z.B. +- 100.

- Wir haben einen PID-Regler eingebaut und wissen nicht welche Werte wir 
jeweils für Proportional, Integral und Differential-Anteil angeben 
sollen. So wie wir mitbekommen haben müssten wir mit dem P-Anteil 
anfangen und uns an eine gute Regelung vorantasten. Aber gibt es 
bestimmte Standardwerte an denen man nur noch ein Feintuning vornehmen 
müsste?

Unsere Bisherige Regelung war extrem träge und somit miserabel. Aber es 
nützte nichts an den Werten herumzuschrauben weil wir auch noch das 
Problem aus Frage eins haben und somit nicht wissen was davon genau das 
Problem ist. Am wichtigsten wäre die Frage eins beantwortet zu haben.

Es gibt natürlich auch viele Seiten die man sich ergooglen kann, diese 
Beschreiben aber nie unser Problem aus Frage eins. Oder haben wir da 
einen Denkfehler?

Es ist viel Text und ich hoffe, dass wir es verständlich machen konnten 
was die Probleme sind. Wäre super wenn jemand eine Antwort für uns 
hätte.

Grüüüüße

von troll (Gast)


Lesenswert?

probiert's doch einfach. dafuer den kopter an 4 schnueren aufhaengen.

von Robert K. (qcopternoob)


Lesenswert?

Das haben wir schon versucht, aber der Copter schwingt hin und her oder 
Schlägt aus. Dadurch, dass wir zwei Probleme haben wissen wir nicht so 
ganz welches davon zum unerwünschten Verhalten führt. Wir haben auch 
versucht den Regler einzustellen, was nicht funktioniert hat. Die Frage 
ist dann, liegt es am Regler oder an dem Wertebereich der Motoren den 
der Regler beeinflussen kann.
Wie gesagt, es sind zwei Probleme die wir hin und her schieben ohne zu 
wissen welches davon zum Fehlverhalten führt.

von San L. (zwillingsfreunde)


Lesenswert?

Guten Morgen

Zwei Freunde von mir bauen derzeit auch einen Kopter und veröffentlichen 
das Projekt hier auf Mikrocontroller.net
Beitrag "[Projektvorstellung] - Selbstgebauter Oktokopter (Open Source)"

Nimm sonst einmal Kontakt mit ihnen auf. Auch wenn der Tread dort ein 
bisschen inaktiv aussieht, war gerade noch am Sonntag mit ihnen 
unterwegs. Deren Kopter ist gerade bei den ersten Flugversuchen, in der 
Luft liegt er schonmal ziemlich Stabil. Wie sie es umgesetzt haben weiss 
ich nicht, da müsstest du direkt bei ihnen fragen.

Ich schreib ihm nachher mal ne SMS, vielleicht schaut er ja hier mal 
kurz vorbei.

Gruss

von RP6conrad (Gast)


Lesenswert?

Ich gehe davon aus das die ESC standard mit eine servosignal angesteurt 
werden. Soll ein puls sein von 1 bis 2ms, wiederholerate ca 20 ms. Das 
soll dan ihre PWM Wert 1190 bis 1700 entsprechen. Diese Werte scheinen 
mir nicht plausibel : min PWM und max PWM soll eine Verhaltnis haben von 
1/2. So einen ESC hat meistens auch die moglichkeit um die min/max Werte 
von servosignal zu speichern, da bei jeden Sender / Empfanger eine 
schone Regelstrecke eingestellt werden kan. Beim einschalten muss dan 
eine bestimmte Zeit die min und max PWM Werte angesteurt werden. Diesen 
einschaltsequenz mussen sie auch einhalten. Wen das alles passt, soll 
die PWM Wert eine Schub von 0 bis 100 % ergeben.

von wendelsberg (Gast)


Lesenswert?

Leszek K. schrieb:
> Es ist viel Text und ich hoffe, dass wir es verständlich machen konnten
> was die Probleme sind.

Nein, nicht wirklich.
Aber das passt zu Erfahrungen, die folgendes besagen: Wenn jemand 
gezwungen und in der Lage ist, das Problem verstaendlich zu formulieren, 
dann findet er oft auch selbst die Loesung.

wendelsberg

von Okto P. (oktopiilot)


Lesenswert?

San Lue schrieb:
> Ich schreib ihm nachher mal ne SMS, vielleicht schaut er ja hier mal
> kurz vorbei.

Erhalten. Bin da :)

Guten Morgen

Vorrab: Viel Erfolg bei eurem Vorhaben. Ist ein wirklich cooles Projekt 
und macht riesen Spass sowas zu entwickeln.

Leszek K. schrieb:
> Soll der Regler die Möglichkeit haben
> die Motoren auf bis zu 1700 hochdrehen lassen zu können bzw. die andere
> Seite bis auf 1190 herunter zu drosseln um eine Stabile Lage erreichen
> zu können, oder muss man dem Regler doch nur einen gewissen Bereich
> geben in dem er Regeln darf, z.B. +- 100.

Ich weiss nicht was für BL-Regler ihr derzeit verwendet. Unsere werden 
per I2C angesteuert und haben eine Auflösung von 8 Bit (255 Stufen). Bei 
der ersten Stufe dreht sich der Motor rund 2-3 mal pro Sekunde. Will man 
den Kopter nicht gerade im freien Fall auf die Erde zurasen lassen, sind 
solche Werte natürlich unbrauchbar. Die mindestdrehzahl wäre also so zu 
wählen, dass der Kopter zwar sinkt aber immernoch Stabil in der Luft 
bleibt, bzw. nicht zu sehr beschleunigt.

Auch die maximale Drehzahl kann ruhig eingeschränkt werden. Wenn ihr das 
Gewicht eures Kopters kennt, rechnet da mal rund 25-30 % dazu. Also, 
wenn er 1kg wiegt, rechnet ihr mal mit rund 1,3kg Schubkraft die ihr 
benötigt, um sicher fliegen zu können. Nun ist es abhängig von euren 
Motoren. Ich weiss nicht, wieviel Schub die haben, der Schub sollte 
allerdings wie bereits erwähnt etwas eingeschränkt werden, so dass sie 
bei voller Leistung rund 130 % des eigengewichtes tragen. Theoretisch 
kann man hier auch voll aufdrehen, bringt aber nichts wenn der Kopter 
danach einfach in die Höhe rast. Der Stromverbrauch wird bei 
Maximalschub auch nicht gerade kleiner. ;)

Blos den Kopf nicht hängen lassen und ein bisschen ausprobieren. Anders 
haben wir es auch nicht auf die Reihe gekriegt.

von Robert K. (qcopternoob)


Lesenswert?

Danke schon mal für die Antworten :)

Wir verwenden als ESC's die HK-TR_P30A und dazu die HK-NTM2830S-800 
Motoren von Hobbyking. Aha, Luftschrauben 1045 und einen 3S-LiPo. Welche 
Auflösung die haben, ist uns aber nicht bekannt!? Durch ausprobieren 
kamen wir auf den vorher erwähnten Bereich von 1190 bis 1700. Das 
Verfahren ist eine PPM und die Werte sind in µs. Wie viel Schub die 
Motoren erzeugen müssen wir noch mal nachmessen.

Mal angenommen der Regler liefert ein Signal im Wertebereich zwischen -1 
und 1 als Stellgröße. Die Motoren werden wie folgt angesteuert 
(Arduino):
1
servoVL.write(thrust+regler);
2
servoHL.write(thrust+regler);
3
servoVR.write(thrust-regler);
4
servoHR.write(thrust-regler);

Thrust soll die Stellung des Steuerknüppels sein (in unserem Fall der 
Analogstick eines PS2-Controllers). Wenn jetzt der Motor einen 
sinnvollen Wertebereich von beispielsweise 1300 und 1600 (µs PPM) hat, 
wird der Regler mit seinen Werten zwischen -1 und 1 nicht viel 
ausrichten können. Die Frage ist, wie stark lasse ich ihn durch einen 
Faktor da mitmischen??? soll ich ihm ermöglichen den gesamten Bereich 
zwischen 1300 und 1600 voll zum regeln ausnutzen lassen zu können oder 
nur einen geringeren?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Leszek K. schrieb:
> soll ich ihm ermöglichen den gesamten Bereich
> zwischen 1300 und 1600 voll zum regeln ausnutzen lassen zu können oder
> nur einen geringeren?

Wenn du den PID Regler einschränkst und nicht den vollen Wertebereich 
erlaubst, kann es passieren, das er an den Enden 'klebt' und 
unverhältnismässig lange braucht, um in den Regelbereich zurückzukommen. 
Am besten beschränkst du also nicht. Dein Problem scheint im Moment die 
Normierung (bzw. Skalierung) zu sein, so das alles in den Wertebereichen 
zusammenpasst und gute Auflösung hat. Am besten also alles auf 8 oder 16 
bit skalieren.
Dein Ziel könnte es also erstmal sein, die drei Achsen vom 
Beschleunigungsmesser zu erfassen, zu skalieren und nacheinander die 
drei Achsen auszuregeln (Schritt für Schritt). Roll und Pitch sind die 
wichtigsten beiden. Die Motore sollen also dafür sorgen, das Roll und 
Pitch Beschleunigung null sind und das Dings still in der Luft steht, 
von der absoluten Höhe mal abgesehen. Als 'Störgrösse' kommt dann später 
der Joystick.

Binde den Kopter zum Testen doch oben und unten an Strippen fest, dann 
saust er nicht so wild rum.

Leszek K. schrieb:
> Aber gibt es
> bestimmte Standardwerte an denen man nur noch ein Feintuning vornehmen
> müsste

Leider nicht wirklich. Das ist so abhängig von vielen Faktoren, das 
Versuch und Irrtum vermutlich am besten funktionieren. Wenn ihr z.B. den 
kleinen PID Regler aus AVR221 nehmt, kann man hier die P,I und D 
Faktoren herausführen (Konsole z.B.) und die im Betrieb anpassen, das 
funktioniert bei meinen PMSM Experimenten immer recht gut. Übrigens ist 
das AVR221 PDF eine recht gute Einführung in PID und hat nette Grafik 
zum Erklären drin.

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.