Forum: Mikrocontroller und Digitale Elektronik Fragen zu meinem Projekt: Verbesserung Regelalgorithmus eines Segway-Nachbaus


von Andreas W. (filter)


Angehängte Dateien:

Lesenswert?

Hallo!

Ganz kurz zu mir: Ich heiße Andreas, ich komme aus Wiesbaden und 
studiere Maschinenbau.

Seit einigen Wochen schreibe ich an einer Projektarbeit, im Rahmen derer 
ich den bestehenden Programmcode eines Segway-Nachbaus verbessern soll.

Chip ist ein Atmega32, programmiert wird mit BASCOM.

Momentan beschäftige ich mich mit dem Herzstück, dem Regelalgorithmus.

Im Originalcode übernimmt ein PI-Regler diese Aufgabe, ich würde nun 
gerne testen (erstmal virtuell), ob ein PID-Regler Vorteile haben 
könnte.

Das ist der originale PI-Regler im Code:
1
Sub Algo
2
                                 
3
    'calculate balance moment
4
    controller_input = Angle_rate + Tilt_angle
5
6
    'calculate drive_sum
7
    Controller_input_sum = Controller_input_sum + controller_input
8
9
    ' limitting
10
    If Controller_input_sum > 55000 Then
11
      Controller_input_sum = 55000
12
    End If
13
    If Controller_input_sum < -55000 Then
14
      Controller_input_sum = -55000
15
    End If
16
17
18
    'calculate drive speed'
19
    Buf = Controller_input_sum / 155
20
    Buf1 = Controller_input / 165
21
    Drivespeed = Buf + Buf1
22
23
    Return
24
25
End Sub


Und das ist meine Version des PID-Reglers:
1
Sub Algo
2
3
    'calculate controller_input for P-controller_part
4
    Controller_input = Tilt_angle + Angle_rate
5
6
    'calculate controller_input_sum for I-controller_part
7
    Controller_input_sum = Controller_input_sum + Controller_input
8
9
10
    'prevent overflow of I_controller_part
11
    If Controller_input_sum > 65000 Then                    '
12
      Controller_input_sum = 65000
13
    End If
14
    If Controller_input_sum < -65000 Then
15
      Controller_input_sum = -65000
16
    End If
17
18
19
    Buf3 = Controller_input * Kp_faktor
20
    Buf4 = Controller_input_sum * Ki_faktor
21
    Buf5 = Controller_input - Former_controller_input
22
    Buf5 = Buf5 * Kd_faktor
23
24
    Drivespeed = Buf3 + Buf4
25
    Drivespeed = Drivespeed + Buf5                          ' controller output
26
27
    Former_controller_input = Controller_input              'difference for D_controller_part
28
    Return
29
30
End Sub

Bascom kann nur eine Operation pro Zeile ausführen, daher der etwas 
umständliche Code.
Meine erste Frage: Passt das so?


Nun habe ich beide Regler in Simulink modelliert und beide als 
Screenshot angehangen. Es wäre toll, wenn ihr Euch die Modelle mal 
anschauen könnten und Euren Senf dazu geben könntet. ;) Es sind meine 
ersten zwei Modelle.

Ich würde nun gerne vergleichen, wie groß die Vorteile des PID-Reglers 
sind. Ich habe ein Delay-Glied in die Rückführung eingebaut und die 
Regler mit unterschiedlichen Anstiegsfunktionen gefüttert, allerdings 
dürften die Ergebnisse wohl sehr weit ab von der Realität liegen, 
alleine natürlich schon, weil ich nur die Regelung betrachte und den 
Rest ignoriere.

- Gibt es trotzdem eine Möglichkeit mit vertretbarem Aufwand auszusagen, 
in wie weit das D-Glied Vorteile bringt?
- Und was für eine Steptime sollte ich in Simulink einstellen? Der Chip 
läuft mit 16 Megahertz.
- Wie ist die gängige Praxis bzgl. des D-Glieds: Wird der alte Wert vom 
neuen Wert abgezogen oder umgekehrt?

Und die letzte Frage: Ist es richtig, dass ein falsch eingesteller 
Kd-Wert das System in krasse Schwingungen bringen kann? Eigentlich soll 
es ja einem vorhaltenden und damit dämpfenden Effekt haben.

Es wäre super, wenn ich da etwas Licht ins Dunkel bringen könntet.

Beste Grüße

Andreas

: Verschoben durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andreas W. schrieb:
> Ist es richtig, dass ein falsch eingesteller
> Kd-Wert das System in krasse Schwingungen bringen kann? Eigentlich soll
> es ja einem vorhaltenden und damit dämpfenden Effekt haben.

Der D Anteil soll Sprungantworten beschleunigen und kann damit bei zu 
grossen Faktoren zur Aufschaukelei führen.
Grundlagen zum PID Regler auf Basis moderner MC werden in der 
Application Note AVR221 von Atmel recht gut erklärt in Wort und Bild:
http://www.atmel.com/images/atmel-2558-discrete-pid-controller-on-tinyavr-and-megaavr_applicationnote_avr221.pdf

Die zugehörige Software ist in C geschrieben:
http://www.atmel.com/images/AVR221.zip

von Sascha_ (Gast)


Lesenswert?

Andreas W. schrieb:

> Und die letzte Frage: Ist es richtig, dass ein falsch eingesteller
> Kd-Wert das System in krasse Schwingungen bringen kann? Eigentlich soll
> es ja einem vorhaltenden und damit dämpfenden Effekt haben.

Jede Verstärkung nimmt im Regelkreis Phasenreserve weg und bringt ihn 
daher einen Schritt näher ans Schwingen.

Du kannst auch nen P-Regler implementieren mit viel zu großem Kp, der 
schwingt dann auch.

von Sascha_ (Gast)


Lesenswert?

Einzige Ausnahme: Regelstrecke ohne Totzeit. Gibts aber in der Realität 
nicht.

von Andreas W. (filter)


Lesenswert?

Vielen Dank Euch Beiden für Eure Antworten!

Matthias S. schrieb:
> Der D Anteil soll Sprungantworten beschleunigen und kann damit bei zu
> grossen Faktoren zur Aufschaukelei führen.

Hallo Matthias,
aber wie wirkt denn der D-Anteil bei einer Sprungantwort? Dort sollte er 
doch keine Funktion haben, da die Veränderung der Regeldifferenz in 
infinitesimal kleiner Zeit geschieht.


Ich bin mir mittlerweile sicher, dass ich in Simulink nicht weiterkomme, 
da eine auch nur annähernd komplette Modellierung des Segways mit allem 
drum und dran viel zu aufwendig ist.
Ich speise morgen den PID-Code mal ein und versuche die Parameter mal 
nach Gefühl einzustellen.
Gibt es eine sinnvolle Strategie bzgl. Kp, Ki und Kd, wenn man aus einem 
ganz okay funktionierenden PI einen PID macht?

Beste Grüße

von pit (Gast)


Lesenswert?

Hast Du schon mal das System modelliert? Ich hatte das vor einigen 
Jahren an einem ähnlichen System gemacht. Interessant ist, dass das 
Körpergewicht direkt in die Reglerparameter mit ein geht. Eine deutliche 
Verbesserung bei wechselndem Fahrer hat mal also, wenn man einen 
adaptiven Regler macht, der mit einem Beobachter das Gewicht schätzt und 
die Reglerparameter nachregelt.

von pit (Gast)


Lesenswert?

Ach ... und normal regelt man ein inverses Pendel ja mit einem PD 
Regler. Und mit Regler in der Rückführung, falls sich der Sollwert 
ändert.

von Sascha_ (Gast)


Lesenswert?

Andreas W. schrieb:
> Vielen Dank Euch Beiden für Eure Antworten!
>
> Matthias S. schrieb:
>> Der D Anteil soll Sprungantworten beschleunigen und kann damit bei zu
>> grossen Faktoren zur Aufschaukelei führen.
>
> Hallo Matthias,
> aber wie wirkt denn der D-Anteil bei einer Sprungantwort?

Differenziert man einen Sprung, kommt die Dirac Funktion heraus.

von pit (Gast)


Lesenswert?

Deshalb kommt der D-Anteil auch oft in die Rückführung bzw. die 
Führungsgröße bekommt ein Filter.

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


Lesenswert?

Andreas W. schrieb:
> aber wie wirkt denn der D-Anteil bei einer Sprungantwort?

Lies dir die AVR221 ruhig mal durch. Da wird mit Grafiken die Funktion 
von P,I und D erklärt und auch erste Voreinstellungen. So ein Regler 
läuft dann recht vorhersehbar, wenn er in einem festen Intervall 
aufgerufen wird, ein Timer kann also eine gute Idee sein.

von aSma>> (Gast)


Lesenswert?

Andreas W. schrieb:
> aber wie wirkt denn der D-Anteil bei einer Sprungantwort? Dort sollte er
> doch keine Funktion haben, da die Veränderung der Regeldifferenz in
> infinitesimal kleiner Zeit geschieht.

Guck mal ins Tabellenbuch rein, dann siehst du, dass ein D-Anteil ohne 
ein Verzögerungsglied schwingt!

> Ich speise morgen den PID-Code mal ein und versuche die Parameter mal
> nach Gefühl einzustellen.

Das ist wie die berühmte Nadel im Heuhaufen. Schneller kommst du ans 
Ziel, wenn du den Segway abbrennst.

> Gibt es eine sinnvolle Strategie bzgl. Kp, Ki und Kd, wenn man aus einem
> ganz okay funktionierenden PI einen PID macht?

Ich kann es mir ehrlicher Weise nicht vorstellen, dass es vorher ein PI 
Regler war.

Richtig wäre es einen PD-T1 Regler zu nehmen oder eine Zustandsregelung 
mit Beobachter (Luenberger Beobachter).

Rumprobieren ist der falsche Weg. Eine konkrete Streckenidentifikation 
muss erstellt werden, und den Regler auf die gewünschte 
Winkelgeschwindigkeit und Dämpfung auslegen.

mfg

von S. R. (svenska)


Lesenswert?

Andreas W. schrieb:
> Gibt es eine sinnvolle Strategie bzgl. Kp, Ki und Kd, wenn man aus einem
> ganz okay funktionierenden PI einen PID macht?

Die optimale Strategie in dem Fall ist, Kd auf Null zu setzen.

von Andreas W. (filter)


Lesenswert?

Danke für die Antworten!

@pit: Wie kann ich mir denn einen Regler in der Rückführung vorstellen? 
Hast Du da zufällig ein Beispiel?
Und was meinst Du mit D-Anteil in die Rückführung? Der D-Anteil wird 
doch gemeinsam mit P- und I-Anteil sowieso rückgeführt.

@Matthias: Ich denke auch, dass ich einen Timer implentieren werde.

@aSma
aSma>> schrieb:
> Andreas W. schrieb:
>> Ich speise morgen den PID-Code mal ein und versuche die Parameter mal
>> nach Gefühl einzustellen.
>
> Das ist wie die berühmte Nadel im Heuhaufen. Schneller kommst du ans
> Ziel, wenn du den Segway abbrennst.

Ist es das auch, wenn P- und I-Parameter bekannt sind?

aSma>> schrieb:
> Ich kann es mir ehrlicher Weise nicht vorstellen, dass es vorher ein PI
> Regler war.

Ich habe den Code ja oben eingefügt - ist das ein PI-Regler, oder nicht?


S. R. schrieb:
> Andreas W. schrieb:
>> Gibt es eine sinnvolle Strategie bzgl. Kp, Ki und Kd, wenn man aus einem
>> ganz okay funktionierenden PI einen PID macht?
>
> Die optimale Strategie in dem Fall ist, Kd auf Null zu setzen.

Wieso ist dem so?

Viele Grüße

Andreas

von Sascha_ (Gast)


Lesenswert?

Deine Fragen deuten darauf hin, dass dir jegliche Regelungstechnik 
Grundlagen fehlen.

von Andreas W. (filter)


Lesenswert?

Sascha_ schrieb:
> Deine Fragen deuten darauf hin, dass dir jegliche Regelungstechnik
> Grundlagen fehlen.

Bravo für diese Erkenntnis - diese versuche ich mir ja momentan, auch 
mit Hilfe dieses Threads, anzueignen.
Regelungstechnik schreibe ich dieses Semester, und das hat gerade erst 
begonnen.

von aSma>> (Gast)


Lesenswert?

Andreas W. schrieb:
> Ich habe den Code ja oben eingefügt - ist das ein PI-Regler, oder nicht?

Das Problem ist, und das ist wohl der Grund warum du einen PID Regler 
aufsuchst, dass der PI-Regler die vorgegebene Regelgüte nicht einhält. 
Der Regler ist einfach zu langsam?! Was willst du da verbessern?

Instabile Stecken lassen sich nur schwer mit einen I-Anteil im Regler 
regeln oder der I-Anteil muss verschwindend gering sein.

Bilde die offene Strecke und dann die geschlossene...

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.