Liste der Anhänge anzeigen (Anzahl: 1)
PI(D) - Regler
Hallo.
Vorerst: ich habe mir sowohl den RN-Wissensartikel als auch den Wikipedia Artikel zu diesem Thema mehrfach durchgelesen.
Ich habe einen Roboter mir Ketten (siehe Bilder in Signatur) wo ein Mega2560 drauf sitzt. Jedes zweite Glied der Gleiskette ist weiß eingefärbt und sind daher die "Encoder Scheiben".
Ich habe einige Versuche durchgeführt wo ich die Peaks pro Sekunde in Abhängigkeit zum PWM-Wert erhalten habe.
Jetzt möchte ich gerne einen PI-Regler in meine Software implementieren jedoch habe ich einige Probleme.
Rein intuitiv bevor ich überhaupt wusste, dass es solche Regler gibt habe ich ein P-Regler erstellt. Die Gesammelten Encoder-Werte von einer Sekunde werden mit einer Konstante multipliziert. Danach wird der Fehler mit Soll- und Ist-wert berechnet und das Ergebnis zum PWM-Wert hinzuaddiert (oder subtrahiert)
Jedoch funktioniert das bei mir nicht, der Roboter macht was er will.
Deswegen bin ich dann auf diesen Artikel gestoßen.
Meine Frage ist was diese ganzen Konstanten sind. Also wenn ich den PI-Regler mal hernehme habe ich:
esum = esum + e
y = Kp * e + Ki * Ta * esum
e ist der Fehler, also Soll-Ist
Kp: ist mein Konstanter Faktor um zwischen den Peaks/s zum PWM-Wert umzurechnen
Ki: keine Ahnung
Ta: meine Abtastzeit aber was ist das genau bei mir? Ein Messvorgang? Sprich 1 Sekunde?
esum: Die Summe aller Fehler und das ist etwas was ich logisch nicht verstehe. Esum wird mit der Zeit ja immer größer und größer bis es irgendwann mal unendlich erreicht. Vorausgesetzt der Fehler ist immer positiv.
Es stellt sich auch die Frage wie ich meine Werte erhalte.
Falls wer meine Ergebnise von den versuchen braucht
Die letzte Tabelle enthält die Notwendigen Informationen. Die erste Zeile ist der PWM Wert.
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab jetzt Ta auf 0.25 gesetzt, also 4 Messungen Pro Sekunde.
Ich hab mal kurz aufgezeichnet was da rauskommt. Es hat sich grundsätzlich nichts geändert
Liste der Anhänge anzeigen (Anzahl: 2)
Okay...
Folgendes:
Ich habe jetzt verschiedene Sachen ausprobiert und bin zum Schluss gekommen, dass Kp 15 viel zu hoch ist. Wenn ich Ki auf null stelle und Kp auf 0.5 habe ich weder ein Reglereffekt noch eine Schwingung. Bei 0.8 gehts wieder los.
Klar das mit dem Begrenzen ist kein Problem.
Ich habe eine fahrt aufgezeichnet, nicht am Boden sondern beide Ketten sind nicht belastet. Nach einer Zeit habe ich dann dei Rechte Kette mit der Hand blockiert.
Kurz zur Erklärung:
R: ist sind die Inkremente pro 250ms Rechts
R: ist sind die Inkremente pro 250ms Links
Speedr ist der PI-Regler plus dem Soll-Wert, also die geregelte PWM geschwindigekit
l_soll ist der linke soll-wert, der sollte fix 200PWM sein
r_soll ist der rechte soll-wert, der sollte fix 200PWM sein
l_ist ist der gemessene linke Inkrementalwert umgerechnet in den PWM wert
r_ist ist der gemessene rechte Inkrementalwert umgerechnet in den PWM wert
PIDR und PIDL ist der erechneter PI-Wert, PID weil es mich nciht an diese schreckliche Zahl erinnert :-D
Die Werte mit Links sind nur zum vergleich da, sie wurden nicht beeinflusst.
Ich möchte noch ncihts zu den Werten sagen zuerst den Experten anhören.
Eine Frage ist nich aufgetaucht.
Wann übergebe ich den Wert des PID-Reglers?
Es sieht ungefähr bei mir gerade so aus:
Do
KL = 200 + PID
KR = 200 + PID
Drive(KL,KR)
Loop
Dann im interrupt alle 250ms:
PIDL = PI-Regler
PIDR = PI-Regler
passt das so?