Forum: Mikrocontroller und Digitale Elektronik Digitaler PDI Regler


von Marco (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

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

von aSma>> (Gast)


Lesenswert?

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.

von Marco (Gast)


Lesenswert?

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

von Der Andere (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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

von Stm M. (stmfresser)


Lesenswert?

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