Guten Morgen liebe Hobbybastler und Fachleute, beschäftige mich derzeit mit einem Digitalen PID Regler und habe dazu mal eine Frage in der praktischen Umsetzung. Praktisches Projekt - Quadrocopter - Flight Controller: Der Quadrocopter ist an einer Vorrichtung befestigt, in der er sich nur um eine Achse drehen kann. Jetzt will ich, das er sich ausbalanciert und sich waagerecht hält. Mein Sollwert ist Null-Grad, die Rückführung ist die aktuelle Lage in Grad, welcher dann mit der Führungsgröße verglichen wird. Je nachdem wie ich die Lage ist, muss jetzt ein Motor schneller drehen und/oder der andere langsamer. Die ansteuerung der Motoren erfolgt über ein PWM-Signal, (Pulsweite: 700µss(Drehzahl null) - 1900µs(Drehzahl max., bei einer Periodendauer von 2ms). Nun endlich zu meiner Frage. Wie komme ich jetzt von meiner Regelgröße x zu einem Wert in µs für die zwei PWM Signale, welche dann meine Motoren langsamer bzw schneller laufen lassen?
@ Marco (Gast) >Wie komme ich jetzt von meiner Regelgröße x Vorsicht! Erstmal sollte man sich um eine klare Sprache bemühen. https://de.wikipedia.org/wiki/Regelkreis Du meinst wahrscheinlich die Stellgröße u(t). Die geht im Normalfall direkt an deine Servo-Funktion, weche dann die PWM einstellt. In einigen Fällen schaltet man noch einen Faktor dazwischen, wenn es die Randbedingungen nötig machen. Beispiel. Dein Regelkreis arbeitet mit vorzeichenbehafteten Festkommazahlen mit 16 Bit. Deine Stellgröße liegt damit im Bereich +/-32767. Deine Funktion zur Servoansteuerung hat nur 10 Bit Wertebereich. Also muss man zwischen u(t) und deiner Servorfunktion nochmal /32 rechnen, sinnvollerweise als 5 mal rechtsschieben. Die Regelgröße ist in deinem Beispiel der Winkel deines Quadrocopters, der wird geregelt.
Marco schrieb: > Nun endlich zu meiner Frage. > Wie komme ich jetzt von meiner Regelgröße x zu einem Wert in µs für die > zwei PWM Signale, welche dann meine Motoren langsamer bzw schneller > laufen lassen? Indem du eine Steckenidentifikation machst. Hierbei müsste es sich um eine instabile Stecke handeln. Danach ermittelst du anhand einer Simulation deine Regelparameter.
Falk B. schrieb: > Die Regelgröße ist in deinem Beispiel der Winkel deines Quadrocopters, > der wird geregelt. Genau das habe ich doch geschrieben. Jetzt frage ich mich nur, wie die weiter verarbeitet wird für mein PWM Signal
Marco schrieb: > Genau das habe ich doch geschrieben. Jetzt frage ich mich nur, wie die > weiter verarbeitet wird für mein PWM Signal Nennt sich mischen. Da keiner weiss wie welche Motoren von deinem Kopter angesteuert werden müssen damit er sich in deine gewünschte Richtung bewegt musst du das selbst herausfinden.
@ Marco (Gast) >> Die Regelgröße ist in deinem Beispiel der Winkel deines Quadrocopters, >> der wird geregelt. >Genau das habe ich doch geschrieben. Jetzt frage ich mich nur, wie die >weiter verarbeitet wird für mein PWM Signal ???? Dein Winkel kommt von einem Sensor, der hat einen Wertebereich. z.B. 12 Bit 0-4095. Ein Ansatz ist es, alle Eingangsgrößen erstmal zu normieren, damit man intern nicht immer wieder umrechnen muss. Man könnte also in deinem Regler alles intern mit 16 oder 32 Bit Zahlen verarbeiten. Sagen wir 16 Bit. Also muss man den Sensorwert mit 8 multiplizieren, damit erhält man ein Maximum von 32760, das passt gerade noch in vorzeichenbehaftete 16 Bit. Dein PID Regler arbeitet auch komplett mit 16 Bit Zahlen. Die Stellgröße U(t) auch. Die muss dann von einem Stück Software an dein PWM-Signal angepaßt werden (Denormierung). Auf den Bereich 0-32767 wird dann der entsprechende Stellwert für 700-1900us abgebildet, das ist eine einfache, lineare Funktion mit Offset. Wenn dein PWM-Generator z.B. mit 1 MHz getaktet ist, muss man die Stellwerte 700-1900 erzeugen. y = m * x + n y : PWM-Wert (denormiert) x : Stellgröße des PID-Reglers (normiert) 2 Wertepaare X1 = 0, Y1 = 700 X2=32767, Y2 = 1900 m = dY / dX = (1900-700)/(32767-0) = 0,0366 n = Y1 - m * X1 = 700 - 0,0366*0 = 700 -> y = 0,0366 * x + 700 Diese Multiplikation macht man natürlich nicht als echte Fließkommamultiplikation sondern clever per Festkommaarithmetik. Denn 0,0366 * 2^16 / 2^16 ~ 2399 / 2^16 Also eine 32 Bit Multiplikation mit 2399 und dann um 16 Bit nach rechts schieben.
mach erstmal die Herleitung des mathematischen Modells von dem Copter. Dann die Identifikation, Massen & Trägheitsmomente. Ohne Modellkenntnisse ist eine Regelung kaum möglich
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.