Hey Leutz,
hätte da eine Frage:
Hat schon einmal jemand von euch einen PID-Regler programmiert und
könnte mir mit ein paar Tipps oder noch besser einem Quellcode
weiterhelfen.
Mit diesem Regler sollte z.B.: ein Motor mit PWM angesteuert werden.
Zur Zeit hätte ich mir einen 8515 vorgestellt(da PWM).
Thx,Mathais
Hallo
bin gerade dabei sowas fertig zu stellen. Programmierung in Assembler
für eine Mega8.
Als Ausgabe wird ein PWM Signal geliefert. Anzeige über LCD-Display 2*20
Zeichen. Eingang Soll-. und Istwert über ADC Kanal 0 und 1.
Die Werte für k,i,d werden entweder auch über Analogwerte eingestellt,
oder als Konstanten.
Eingabe wird mal mit einer PC-Tastatur erfolgen, ist aber noch nicht
eingebaut.
Wenn Interesse da ist, dann nimm ich es mal mit in die Arbeit und stelle
es hier rein.
mfg
Hubert Papst
Hallo Hubert,
mich würd dein Programm sehr interessieren, da ich schon seit einiger
Zeit mit nem PID in Assembler kämpfe. Entweder mache ich dabei einen
Denkfehler, oder es ist doch noch ein Programmierfehler drin ;)
Vieleicht kannst du mir das Prog auch mailen?
Gruß
-=jens=-
Hallo Hubert,
ich muss genau das selbe programmieren, weis aber noch nicht genau wie
ich anfangen muss.
Stellt es ein Problem dar, dein Programm für den 8515
umzuschreiben(außer dass ich zwei DAW´s benötige?).
Wäre schön, wenn du mir dein Programm einmal mailen könntest.
Danke im Voraus, Mathias Mair
Hallo Mathias,
bei der Entwicklung von digitalen Reglern kann ich vielleicht ein paar
Tips hinzusteuern.
Der differentielle Anteil des Reglers ist ein kritischer Faktor, da
hierdurch das Messrauschen und der Quantisierungsfehler bei A/D-Wandlung
verstärkt wird. Für die meisten Anwendungen (besonders wenn die
Parameter durch Probieren ermittelt werden) reicht ein einfacher
PI-Regler.
Ebenso ist es wichtig, die Mess/Ist-werte über einen Tiefpass zu Filtern
(hier reicht nicht der digitale Filter), da sonst unter Umständen der
Regler zum Schwingen angeregt wird.
Beim Regelcode ist es wichtig, den Integralteil zu begrenzen, da er
sonst bei langer Regelabweichung ins Nirvana läuft.
Eine sinnvolle Begrenzung wäre z.B. Die Abschaltung der Integration,
wenn die max. Stellgröße erreicht ist.
Ebenso ist die Abtastzeit eine wichtige Größe für den Regler.
Wenn man die Abtastzeit variiert, werden dadurch auch I & D-Anteil
beeinflusst.
Ich hoffe, es waren ein paar verwertbare Infos dabei
Gruß Oliver
Hi
Der Hinweis von Oliver mit dem Tiefpaß ist sehr wichtig,die
Grenzfrequenz sollte mindestens unterhalb der Abtastfrequenz liegen
besser 2 bis 5fach da sonst dein Regler im falschen Frequenzbereich auf
störungen reagiert und diese nicht ausregeln kann.
Wichtig ist eine feste Abtastzeit das heisst dein Regler muss in jedem
Fall innerhalb einer Abtastperiode am Ausgang den entsprechenden Wert
anlegen koennen dafür ist also Assembler ideal solltest du auf jeden
Fall einen 16 Bit wert ansetzen wenn du ansonsten mit 8bit rechnest und
natuerlich begrenzen.
Dein Motor hat eine gewisse Traegheit ich glaube nicht das es etwas
bringt eine Zeitperiode weit unter 100ms anzusetzen.
Die Einstellwerte k,i,d sind auf die Abtastzeit zu normieren,da im
Analogen ja auf eine Sekunde statt der Zeitperiode normiert ist.
Die Differentation erster Ordnung entspricht
(aktueller Wert - vorheriger Wert)/Zeitperiode
das Integral einer Summe der vorherigen Werte(das sollten schon einige
sein da der I anteil erst nach einer gewissen Zeit wirkt)
falls du mit einer gewissen abweichung leben kannst reicht auch
ein P Regler ueber den Verstärkungsfaktor kannst du die abweichung
verringern wenn er zu gross wird faengt das System an zu schwingen.mit
einem I Anteil koennte dann die restliche Abweichung behoben werden.
ich hoffe die ausführungen haben ein bisschen geholfen
CU Wolfram
Hallo
hier ist der Code für den PID-Regler. Eine kurze Beschreibung ist auch
dabei.
Bei Fragen (die werden sicher kommen) einfach mailen oder hier posten.
Bin gerade dabei, das Progamm so zu überarbeiten, das mittels einer
herkömmlichen PC-Tastatur die Reglereinstellungen vorgenommen werden
können. Als Anzeige dient eine 2*20 Zeichen LCD-Anzeige (jetzt auch
schon).
Bin für Anregungen dankbar. Steinigt mich nicht, es ist mein erstes
Programm für einen AVR.
mfg
Hubert
Frage: PDI-Regler ???
*********************
Wer könnte mir eine kurze, aussagefähige Erläuterung (jedoch kein
"Fachchinesisch") zu diesem Thema geben (Funktion, Einsatzmöglichkeit,
etc.)?
Auch entsprechende www-sites wären hilfreich.
Habe bei goggle nicht's gefunden
Vielen Dank im Voraus
Günter
Danke Hubert, habe deinen Code bekommen und bin gerade dabei den Code zu
verstehen.
Nun habe ich ein paar Fragen dazu:
1.) Hast du vielleicht Struktogramme oder eine ausführlichere
Beschreibung für dein Programm?
2.) Was machst du wenn Kommazahlen auftreten(wenn sie überhaupt
auftreten)?
Thx, Mathias
Hallo,
Struktogramme hab ich leider nicht.
Für eine genauere Beschreibung fehlt mir jetzt die Zeit. Wird vielleicht
mal nachgereicht.
Die Regelung funktiniert nur mit Integerzahlen. Sollte eigentlich für
die meisten Anwendungen reichen. Ich kann dir anbieten, hier deine
Fragen zu beantworten, wenn ich mal Zeit finde, werde ich das Programm
besser Dokumentiern.
mfg
Hubert
Hallo Gerhard,
Du hattest geschrieben das Du schonmal einen PDI Regler in Bascom
geschrieben hattest ...
kannst Du mir den Quellcode zukommen lassen ?
Gruß Tobias