PID-Regelung (für Drehzahl, Drehung etc.) richtig einstellen

nero76

Moderator
@Sven: Ja, genau - durch die drei Parameter wird die Regelung optimiert.

Das Prinzip der PID-Regelung findet ja an verschiedenen Stellen im Code statt (Verfolgen der Induktionsschleife, Anpassung der Messer-Motordrehzahl, Kompaßkurs einhalten etc.).

Da nicht jedem sofort ersichtlich ist, welche Funktion die Parameter P,I und D allgemein erfüllen, gibt es z.B. hier eine gute Einführung in das Thema PID-Regelung: http://tutorial.cytron.com.my/2012/06/22/pid-for-embedded-design/
Ganz kurz:

P: der P-Anteil gewichtet nur die momentane Differenz zwischen Soll- und Istwert. Ist P klein, ist die Regelung langsam und der Sollwert (hier rosa) wird nie ganz erreicht (Restfehler):

clip_image009_thumb.jpg


Ist P groß, ist die Regelung zwar schnell, aber schwingt:

clip_image013_thumb.jpg


Man stellt daher P gerade so ein, dass es nicht schwingt und benutzt zusätzlich I- und D -Anteile.

I: der I-Anteil gewichtet nur die aufsummierten Differenzen zwischen Soll- und Istwert und senkt so den Restfehler auf Null. Das Schwingen kann er nicht verhindern:

clip_image019_thumb1.jpg


D: der D-Anteil gewichtet nur die Änderung der Differenz zwischen Soll- und Istwert. Wenn sich die Differenz verringert (negative Änderung), sorgt dies für eine zusätzliche Dämpfung beim Erreichen des Istwertes:

clip_image023_thumb1.jpg


Alle drei Anteile (richtig eingestellt) sorgen für eine optimale Regelung (wenig Schwingen, kein Restfehler):

clip_image0291.jpg


Das finden der optimalen PID-Parameter braucht manchmal Erfahrung und/oder Geduld :)

Evtl. baue ich noch 3 Schieberegler (für die P,I,D-Anteile) in die pfodApp ein mit denen man verschiedene PID-Parameter für alle verwendeten Regler live ausprobieren kann...
 
@Sven: Ja, genau - durch die drei Parameter wird die Regelung optimiert.

Das Prinzip der PID-Regelung findet ja an verschiedenen Stellen im Code statt (Verfolgen der Induktionsschleife, Anpassung der Messer-Motordrehzahl, Kompaßkurs einhalten etc.).

Da nicht jedem sofort ersichtlich ist, welche Funktion die Parameter P,I und D allgemein erfüllen, gibt es z.B. hier eine gute Einführung in das Thema PID-Regelung: http://tutorial.cytron.com.my/2012/06/22/pid-for-embedded-design/
Ganz kurz:

P: der P-Anteil gewichtet nur die momentane Differenz zwischen Soll- und Istwert. Ist P klein, ist die Regelung langsam und der Sollwert (hier rosa) wird nie ganz erreicht (Restfehler):

clip_image009_thumb.jpg


Ist P groß, ist die Regelung zwar schnell, aber schwingt:

clip_image013_thumb.jpg


Man stellt daher P gerade so ein, dass es nicht schwingt und benutzt zusätzlich I- und D -Anteile.

I: der I-Anteil gewichtet nur die aufsummierten Differenzen zwischen Soll- und Istwert und senkt so den Restfehler auf Null. Das Schwingen kann er nicht verhindern:

clip_image019_thumb1.jpg


D: der D-Anteil gewichtet nur die Änderung der Differenz zwischen Soll- und Istwert. Wenn sich die Differenz verringert (negative Änderung), sorgt dies für eine zusätzliche Dämpfung beim Erreichen des Istwertes:

clip_image023_thumb1.jpg


Alle drei Anteile (richtig eingestellt) sorgen für eine optimale Regelung (wenig Schwingen, kein Restfehler):

clip_image0291.jpg


Das finden der optimalen PID-Parameter braucht manchmal Erfahrung und/oder Geduld :)

Evtl. baue ich noch 3 Schieberegler (für die P,I,D-Anteile) in die pfodApp ein mit denen man verschiedene PID-Parameter für alle verwendeten Regler live ausprobieren kann...
 
Hallo Ihr,
ich denke mal wenn ich in diesem Thema weiter schreibe ist es ok, ansonsten bitte verschieben B)

Die Drehzahlregelung des Mähwerks von Cutty treibt mich noch in den Wahnsinn. Ich versuche seit Wochen das alleine in den Griff zu bekommen, aber es wird immer schlimmer statt besser.

Alexander hat das zwar soweit schön erklärt und auch den Link beigefügt, aber ich bin glaube zu blöd :S

Also das Hauptproblem ist folgendes:
Wenn ich Cutty nach einer längeren Pause (zB. nach dem Laden)neu starte, ist die Drehzahlregelung eine Katastrophe.
1. Starten - hohe Drehzahl
2. Cutty fährt los, Drehzahl geht auf Sollwert zurück
soweit ok
3. sobald ein Wiederstand erkannt wird und die Drehzahl dadurch sinkt, tourt das Messer nicht mehr auf, im Gegenteil, es wird immer langsamer. Man kann schon fast die Umdrehungen zählen.
In diesem Zustand fährt Cutty nun seine Bahnen ohne einen einzigen Halm abzuschneiden. Gelegentlich tourt er zwar wieder auf, wird dann aber beim nächsten Grashalm wieder abgebremst.

Dieses "Spiel" macht er immer zwischen 45-60 Min nach Mähanfang, dann regelt er die Drehzahl fast normal bis zum Mähende wenn der Akku lehr ist, wobei er gelegentlich wieder in diese "Schleichdrehzahl" fällt.

Die angezeigten Drehzahlen in der PfoodApp scheinen sicher auch nicht zu stimmen. Zumindest in dem niedertourigen Bereich. Da zeigt mir die App noch über 2000 an, was nicht sein kann, da man die einzelnen Umdrehungen fast hören kann und auch sieht.
Es scheint mir fast so, als würde nicht genügend Kraft am Mähmotor anliegen, so dass er es nicht schafft das Messer wieder auf Touren zu bekommen.

Das komische ist ja, dass es am Anfang funktioniert hat, jetzt jedoch immer schlimmer wird.

Kann der Hallsensor defekt sein, so dass er erst ab einer gewissen Temperatur funktioniert? Denn wenn der Mähmotor warm ist, scheint es besser zu funktionieren.

Auch wenn sich das Mähwerk mal freischneiden muss (im hohen Gras blockiert) und danach mit voller Drehzahl läuft, funktioniert die Regelung dann meist besser.

Ohne Messermodulation zieht er gnadenlos durch, auch bei hohem Gras.

Ich hoffe, dass ich es nicht zu blöd beschrieben habe, aber weis nicht wie ich es hier alles "rüberbringen" soll. Mir fehlen einfach die Ansätze zum Suchen.
Das spielen mit den PID-Werten hat es jedenfalls nur noch verschlimmert :unsure:

Gruß Stefan
 
Hallo,

also es lag scheinbar doch wieder einmal an mir :unsure:

Hatte doch an dem Mähmotor, direkt hinter die Kohlen (Motoranschluss), eine Diode eingelötet. Wollte somit Störungen wegen des IMU-Moduls verringern. Hatte jedoch die Diode, welche ich bereits bei der Modulationsschaltung eingelötet hatte, auch noch drin. Somit waren zwei Dioden am Motoranschluss parallel geschaltet. Habe die an den Kohlen gelassen und die zweite rausgeschmissen.
Gleichzeitig noch mal den original Ardu-Cod, natürlich mit meinen Änderungen; wieder eingespielt. Jetzt läuft er bereits seit 3 Stunden ohne dass er in der Drehzahl so spinnt und abwürgt.

Denke mal, dass es hauptsächlich die zweite Diode war, die das Dilemma ausgelöst hat. Wenn nicht, weis ich nicht woran es gelegen hat.

Gruß Stefan
 
autega schrieb:
Hallo Stefan,
schön wenn sich alles klärt. :)

Gruß
Sven

Danke für die ermunternden Worte, leider scheint es doch nicht ganz so einfach zu sein :huh:

Prinzipiell funktioniert die Regelung besser, wie mit der zweiten Diode. Es gibt jedoch ein "aber".

Die Problematik besteht immer noch am Anfang des Mähvorganges.
Laut App dreht das Messer mit ca. 2700 Umdrehungen, obwohl 3400 eingestellt sind. Wenn in dieser Zeit das Mähen ein wenig schwieriger wird, kommt das Messer erst nach längerer Fahrt wieder ein wenig in Schwung, aber nie auf meine Solldrehzahl von 3400.
Nach ca. 15-20 min pegelt sich die Solldrehzahl langsam ein und er regelt bis zum Mähende die Drehzahl relativ gut.

Diese "Startschwierigkeiten" kann ich jedoch verkürzen, in dem ich anfangs für ca. 1-2 Min die Modulation raus nehme (per App) und dann wieder einschalte. Die Regelung pendelt sich dann relativ zügig ein.

Überhaupt ist es so, dass je länger der Mähvorgang dauert, des do genauer wird die Regelung.

Kann das nicht doch irgend ein Temperaturphänomen sein?
Könnte da ein Bauteil spinnen, nur welches?

LG
Stefan
 
Zuletzt bearbeitet von einem Moderator:
Hallo Stefan,

ich stecke noch so tief in der Materie aber wenn du der Software sagst er soll sich mit 3400 /min drehen und macht es nicht, müsste es eine anderes Problem sein.

Wie hast du denn :
int motorMowSpeedMax = 128; // motor mower max PWM
int motorMowCurrentMax = 558; // motor mower max current (mA)

einmgestellt ?

Könnte eventuell daran liegen das deswegen deine Drehzahl begrenzt wird ?

Gruss Stefan
 
StefanM schrieb:
Hallo Stefan,

ich stecke noch so tief in der Materie aber wenn du der Software sagst er soll sich mit 3400 /min drehen und macht es nicht, müsste es eine anderes Problem sein.

Wie hast du denn :
int motorMowSpeedMax = 128; // motor mower max PWM
int motorMowCurrentMax = 558; // motor mower max current (mA)

einmgestellt ?

Könnte eventuell daran liegen das deswegen deine Drehzahl begrenzt wird ?

Gruss Stefan

Hallo Stefan,
bin jetzt erst zum nachsehen gekommen.

meine Werte:
int motorMowSpeedMax = 255
int motorMowCurrentMax = 100

Die habe ich so schon von Anfang an und es hat soweit ja auch immer funktioniert.

Den motorMowCurrentMax hatte ich sonst immer auf 120, nur das funktioniert jetzt überhaupt nicht mehr. Er ist dann nur noch am würgen und es kommt kaum eine Abschaltung.

Das Problem ist ja nicht, dass er die Drehzahl nicht erreicht und regelt, sondern das er dies nicht von Anfang an macht.
Je länger er läuft, desto genauer wird die Regelung und das erreichen der Solldrehzahl.

Gruß
Stefan
 
Zuletzt bearbeitet von einem Moderator:
Ich schon wieder

Habe jetzt mal folgenden Versuch gemacht:
-Mähmotor abgeklemmt und an Netzteil angeschlossen
-Konsole gestartet und Spannung am Netzteil langsam hochgenommen langsam bis Konsole etwa 3400 angezeigt hat

Die Umdrehungen sind jedoch nicht konstant, sondern schwanken (alles natürlich ohne Last).
Unbenannt2.png


Ist das normal bzw. zu vernachlässigen?

Laut dem Labornetzteil liegen 22,9V an und 1,61A. das ganze sehr konstant und nicht schwankend.

Somit sollte es ja am Hallsensor schon mal nicht liegen, oder sind die Schwankungen nicht normal?

sruß
Stefan

Edit:
Habe gerade festgestellt, dass in der App der Current-Wert zwischen 5.84 und 7.21 schwankt, obwohl Cutty gar nix macht. Steht also nur so auf dem Tisch und ist angeschaltet. Ist das auch normal?
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/949/Unbenannt2.png/
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

jetzt wo meine Pfod-Verbindung wieder geht nochmal kurz zu dem MowCurrent-Wert der ja bei mir trotz Stillstand zwischen 5.84 und 7.21 schwankt (laut Pfod).

Habe eben mal das Multimeter an die Motorleitung geklemmt, das zeigt 0 mA. Klar, Motor wird ja nicht angesteuert.

Warum zeigt dann die App diese Werte? Rührt evtl. daher mein Drehzahlproblem, das da was falsch ausgewertet wird?

LG
Stefan
 
Wollte mich nochmal kurz in Erinnerung bringen, da das obige Problem noch nicht behoben ist.

Habe bisher die Schwankungen des MowCurrent-Wertes noch nicht weg bekommen.

Also noch mal die Frage an euch:
Ist das normal, dass dieser Wert schwankt bzw. überhaupt was anzeigt, wenn der Mähmotor gar nicht läuft?

Danke!

LG
Stefan
 
Hallo Stefan,


Zeigt er die Schwankenden Werte nur bei der pfodapp oder auch im Terminal ?

Schwankende Werte könnten daher kommen das der Pin nicht angeschlossen ist. Einfach mal durchmessen und auch mal messen, was der Stromsensor für Werte rausgibt.

Wenn ein Pin, frei ist und dann ausgelesen wird, können die Merkwürdigsten Effekte auftreten.

Wenn die Anschlüsse OK sind kann dann noch ein pulldown Wiederstand helfen.

Gruss Stefan
 
StefanM schrieb:
Hallo Stefan,


Zeigt er die Schwankenden Werte nur bei der pfodapp oder auch im Terminal ?

Schwankende Werte könnten daher kommen das der Pin nicht angeschlossen ist. Einfach mal durchmessen und auch mal messen, was der Stromsensor für Werte rausgibt.

Wenn ein Pin, frei ist und dann ausgelesen wird, können die Merkwürdigsten Effekte auftreten.

Wenn die Anschlüsse OK sind kann dann noch ein pulldown Wiederstand helfen.

Gruss Stefan

Hallo Stefan,

mit Terminal meinst du sicher den SerialMonitor der Arduinosoftware. Dort ist mir nix aufgefallen. Das einzige was nicht stimmt ist der Akkuwert. Zeigt mir 26.3 an obwohl ich am Akku selber 28,6 messe.

Wo sehe ich denn den aktuellen Stromwert? Wird da nicht nur die Drehzahl und der Zähler beim Überschreiten ausgegeben? :unsure:

Der Stromsensor vom Mähmotor gibt an dem Out-Pin 2,51 bzw. 2,52 V aus. Schwankt gelegentlich, aber nicht identisch mit den Werten der PfodAp. Gemessen hab ich von GND zu dem OUT-Pin.

Wie meinst du das mit den freien Pins?

Gruß
Stefan
 
Zuletzt bearbeitet von einem Moderator:
Guten morgen,

ja ich meine die Serielle Konsole.

Wenn du dort "v" eingibst werden die Sensor Werte Angezeigt und die nicht die Counter.

Gruss Stefan
 
Oben