Ich sag ja berechnet ist es mit 250ms. Alle 250ms wird der Interrupt von meinem Timer aufgerufen, und dort wird dann der Regler berechnet.
Ich nehme an, dass man Ta in Sekunden angibt, stimmt das?
hmmm.
hast du nur die variable Ta umgestellt, oder auch die Hardware?
will sagen: wie oft wird die regler-geschichte denn tatsächlich aufgerufen?
Ta ist ja nur die (angenommene oder berechnete) Zeit seit dem letzten aufruf.
Solange sich der tatsächliche Aufruf nicht ändert bringt das schrauben an Ta nicht so wirklich viel - darum würde ich es auch berechnen / messen und nicht einfach festlegen.
Ich sag ja berechnet ist es mit 250ms. Alle 250ms wird der Interrupt von meinem Timer aufgerufen, und dort wird dann der Regler berechnet.
Ich nehme an, dass man Ta in Sekunden angibt, stimmt das?
Achja und was ich auch noch nicht ganz verstehe beim P-Glied:
Da habe ich ja diesen Faktor Kp.
Nehmen wir mal folgendes an:
Kp = 15
Soll-wert = 200
Ist-Wert = 190
-> Fehler = 10
p = Kp * e
p = 15*10
p = 150
Motor = soll + p
Motor = 200 + 150
Motor = 350
Was aber nicht möglich ist. Was macht mir dieses Kp - glied? Wieso rechne ich nicht einfach den Fehler hinzu?
Ta in sekunden, ja.
du erstellst hier einen geschlossenen regelkreis. die neigen dazu eine stellgröße auszuspucken, die das system evtl. nicht behandeln kann. also musst du eben dafür sorgen, dass er bei maximaler stellgröße abriegelt - solltest du schon schaffen
die rechnung mitist ja nicht vollständig: da fehlt noch der i-anteilMotor = soll + p
Außerdem kann man das ja miteinfachstens abfangen. entsprechendes wirst du übrigens auch für motor-min brauchen - obwohl, dann bleibt er stehn oder dreht zurück oder so...Code:if motor > motor-max then motor = motormax;
ach so. vergessen.
das P-Glied ist der "beschleuniger" in deinem Regelkreis. ohne oder mit nur kleinem P-Anteil ist der Regler einfach nur langsam.Was macht mir dieses Kp - glied? Wieso rechne ich nicht einfach den Fehler hinzu?
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?
na, klingt doch gut.
Wenn die (über)schwingung bei Kp=0.8 anfängt hast du doch den wert, mit dem du anhand der regeln von chien hrones und reswick bzw. den andern beiden deinen regler berechnen kannst![]()
Ich glaube das ihre Problem eigentlich anfangt beim messen !! Die Verteilung von Weisse Glieder zu Schwarze ist ca 1/4. Du hast ein interrupt bei jeden Wechsel. Das bedeutet das bei gans stabiles fahren die pulsen absolut keine feste Periode haben. Bei jeden Weisse glied haben sie eine Periode von 1, bie das naechste Schwarze gliedern eher 4 !! Da kan keinen Regler sie helfen, ihre Messung selbst gibt da Riesenschwankungen an von die Ketten geschwindigkeit, obwohl das nicht so is.
Forschlag : du messt nur noch die positive Flanke, und nicht das Anzahl Flanke/Zeit aber die Zeit zwischen zwei positive Flanken. Leiter bekommst du dan einen neueProblem bie gans langsam fahren : Ihre Regelkreis erwartet eine neue Messwerte, aber die gibts nicht wegen noch keine neue positive Flanke passiert.
Nur wen die Messung stimmt, kansst du ihre Regler parameter optimieren.
Die Bilder in meinem Avatar sind nciht aktuelle.
Jedes 2-te Kettenglied ist nun weiß, so habe ich ein verhältnis von 1:1 also die Hälfte weiß die hälfte schwarz, ganz genau.
Du hast oben gesagt, dass Kd die Geschwindigkeit ändert. Aber ein Kd von unter 1 also z.b. 0.8 entspricht ja eienr Division also wird es quasi verlangsamt, oder?
Hallo!
Ich stimme RP6conrad zu und glaube auch, daß es ein Meßproblem ist. Auch wenn jetzt jedes 2. Kettenglied weiß ist - vielleicht erzeugt die Messung zuviele Flanken? Kannst Du prüfen, ob bei einem vollständigen Umlauf der Kette auch die richtige Anzahl Impulse gezält werden?
Wenn nämlich "Geister-Impulse" auftauchen (also mehrere Flankenwechsel wo nur einer auftreten sollte) dann kann ich mir gut vorstellen, daß der Regler versucht zu bremsen und die Kette stehen bleibt oder gar rückwärts läuft.
Ich muß zugeben, daß ich jetzt nicht wirklich weiß wovon ich rede - aber ich glaube, der Reglerwert sollte nur im festen Zeitintervall aufaddiert werden. Laut dem Code wird bei Dir ja ständig die Antriebsgeschwindigkeit geändert (?). Kann noch mal jemand mit Ahnung diesen wichtigen Teil verifizieren?
MfG
Martin
Lesezeichen