Archiv verlassen und diese Seite im Standarddesign anzeigen : Single PID Regler in Bascom
Hallo,
in der neuen Bascom Version 1.11.7.7 ist bei den Samples eine
Datei dabei die singlePiD.bas heißt. Habe das schon mal auf MCselec gesehen, müsste eine Rutine für einen PID Regler sein.
Meine Frage hat da jemand schon mal was mit gemacht??
würde mich doch sehr Interessieren, habe mich zwar damit schon etwas beschäftigt (PID-Regler) , aber so ganz ohne Hilfe werde ich es wohl nicht schaffen.
ist das eine Funktion in Bascom die ich aufrufen kann, oder ist das nur eine Beispielsdatei?.
Danke!!
Gruss Frank
schmic20
05.02.2005, 16:11
Hallo Frank,
das ist eine Beispieldatei. Ich habe mal den Code überflogen. Das Progrämmchenist sehr interessant. Sollte sich eigentlich ganz einfach in eigene Projekte integrieren lassen.
Zu beachten ist allerdings:
Damit die Berechungen des PID-Algorhytmus exakt ausfallen, muss die Rechenroutine (Regulator:) in exakten Zeitabständen aufgerufen werden. In dem Beispiel wird das durch eine Verzögerung mit 50ms erreicht.
Wenn in einem eigenen Programm dann noch mehr Programmteile ausgeführt werden, dürfte das zu ungenau werden. Es ist dann besser die Rechenroutine über einen Timer-Interrupt aufzurufen und somit gleiche Zeitabstände zu erreichen.
Eine andere Sache sind die Parameter P, I und D, die hier im Programm fest vorgegeben sind. Jede Regelstrecke (also das zu regelnde Objekt) ist anders und erfordert hier eigene Einstellungen. Dazu gibt es 2 Verfahren diese zu ermitteln, die zwar einfach sind, aber diesen Rahmen hier sprengen würden.
Viele Grüße
Michael
Hallo Michael,
ja, ist bestimmt nicht eifach so ein PID-Regler, da ich aber ein Projekt
im Kopf habe, muss ich mich etwas damit beschäftigen.
Aber Danke schon mal für die Info, werde mal versuchen die Beispielsdatei
in ein lauffähiges Programm zu schreiben. Mal sehen wie`s klappt
werde dann mal berichten.
Gruss Frank
Hallo Michael
Dazu gibt es 2 Verfahren diese zu ermitteln, die zwar einfach sind, aber diesen Rahmen hier sprengen würden.
Kannst Du darüber ein bisschen mehr erzählen ?
Ich schlage mich auch gerade mit diesem Thema herrum.
Eigentlich geht es um eine Servoregelung.
(Encoder, Regelung, PWM, H-Brücke, Motor..)
Der Regelkreis läuft soweit.
Jetzt liegt es nur mehr an einer guten Regelung ;-)
Leider kann ich kein Englisch und tu mich da ein bisschen schwer.
(ausserdem eher noch AVR neuling ;-) )
Bei dem A109 Beispiel ist mir nicht ganz klar, wo ich da meine Parameter einfügen soll.
(CV ist wohl der Ausgang..)
Hätte da :
Schritt_Position (Schritte die gefahren werden sollen)
Encoder_Position (derzeitige Position vom Encoder)
PWM (PWM Ausgang = +-128)
Für die PID Werte, möchte ich jeweils ein Poti machen das per ADC eingelesen wird.
L.G. Roberto
farmerjo
08.08.2005, 17:40
Der Algorhytmus ist nicht schlecht, aber auch nicht gut. Soweit ich das bis jetzt verstanden habe wird da immer nur der Wert des vorherigen Durchlaufes betrachtet, je mehr Durchläufe betrachtet werden destso besser ist meistens das Ergebniss.
http://www.meilhaus.de/regeltechnik/regelt4.html schau da mal da steht ne Menge über Regeltechnik und vorallem auch digitaler Regeltechnik drin.
Die 50ms sind auch eher was für langsamere Prozesse, vorallem macht da der Prozessor ziemlich lange nichts. Durch die inkrementale Abtastung wenn man das so sagen kann holst du dir ein PT-Glied mit in den Regelkreis, dass aber da ja die Zeit bekannt ist ausgeglichen werden kann, aber war ja auch oben schon mal angesprochen. Aber die Siet ist nicht schlecht steht für den Anfang reichlich was drin.
Gruß Johann!
Hallo Johann
Danke für den Link.
Werde ich mal durchlesen...
Habe den Beipielcode inzwischen zum laufen bekommen.
(Aufruf mit Timer)
Aber irgendwie regelt der nicht sonderlich gut.
Schwingt eigentlich immer.. (mehr oder weniger)
Wogegen wenn ich schreibe:
Abweichung = Soll - Ist
Pwm = Abweichung / 10
Pwm = Pwm + 128
If Pwm < 2 Then Pwm = 2 'untere PWM Grenze
If Pwm > 253 Then Pwm = 253 'obere PWM Grenze
Compare1a = Pwm
Da steht der Motor fest auf seiner Position :-)
Ausser wenn ich ihn sehr auslenke, schingt er sich auf und lenkt sich nicht mehr ein..
(aber ist ja auch keine besondere Regelung ;-)
Aber ich werde mir mal den Link durchlesen :-)
l.G. Roberto
farmerjo
09.08.2005, 08:07
Na das ist doch ein P-Regler wenn ich mich nicht vertue. Proportional zur Regelabweichung wird das Stellgleid angesteuert.
Jetzt kommt es drauf an wie deine Strecke aussieht. Da du einen Motor hast ist da auf jedenfall schon mal ein Verzögerungsglied drin, wegen der Beschleunigungs und Verzögerungszeit. Aber les dir das mal ducrh dann erkennst du das vielleicht selber.
Gruß Johann!
Hallo
Habs durchgelesen, aber stehe schon noch ein bischen im Wald
(mit Formeln habe ich s ja nicht so...)
Habe aber jetzt eine andere Seite gefunden:
http://www.mikrocontroller.net/forum/read-1-6490.html
Da gibt es auch ein einfaches Basic Listing für eine PID regelung :-)
Mit dem funktioniert jetzt die PID Regelung :-) :-)
bei mir funktionierts auch! Wunderbar, hab ich schon länger nach gesucht, jetzt muss ich sagen, PID ist voll easy ;)
Klaus_0168
15.08.2005, 07:20
Hi all,
ich versteh nicht so ganz, warum ale so scharf auf den PID - Regler sind. Über 90% aller Regelkreise sind mit PI - Reglern ausgestattet. Der D - Anteil wird nur dann gebraucht, wenn lawinenartige Effekte kontrolliert werden müssen.
zum Gastbeitrag am 8.8. : dies ist ein reiner P - Regler.
Auf meiner HP ( www.klaus-sucker.de - Abteilung Regler) habe ich das Thema auch mal aufgegriffen. Ich habe dabei versucht, die Herkunft der einzelnen Formelkomponenten zu erklären. Es fehlt zwar noch etwas Feintuning (einige Formeln müssen noch grafisch aufgearbeitet werden), es ist jedoch alles so ziemlich komplett.
Grüße Klaus
Hallo Klaus
ich versteh nicht so ganz, warum ale so scharf auf den PID
Wer ist alle ? :-)
Der D - Anteil wird nur dann gebraucht, wenn lawinenartige Effekte kontrolliert werden müssen.
Z.B. bei einem Servosystem ?? (Encoder,Motor,Regelung)
Auf meiner HP ( www.klaus-sucker.de - Abteilung Regler) habe ich das Thema auch mal aufgegriffen.
Nette Seite.
Aber es ging auch ein bisschen, wie man das dann in Code umsetzt.
(Für mich der nicht so viel mit Formeln kann..)
l.G. Roberto
Rage_Empire
15.08.2005, 11:03
Der D - Anteil wird nur dann gebraucht, wenn lawinenartige Effekte kontrolliert werden müssen.
was ist damit gemeint?
Klaus_0168
15.08.2005, 15:03
Hi all,
@Roberto :
OK, die Bezeichnung "alle" war zu allgemein gefasst. Die meisten Beiträge zum Thema Regler beziehen sich immer wieder auf den PID-Regler. Der meist benutzte Reglertyp ist immer noch der PI-Regler. Ein PID-Regler ohne D-Anteil ist ein PI-Regler.
Die Motoransteuerung eines Servos ist meiner Meinung nach eine I-Strecke (integrierend). Wenn der Motor anläuft wird die gewünschte Stellung mit einer, mehr oder weniger, konstanten Geschwindigkeit angefahren. In diesem Fall würde fast schon ein 3-Punkt-Regler ausreichen (Ansteuerung -> rechts - stop - links). Ein PI-Regler ist meiner Meinung nach nur dann sinnvoll, wenn die Geschwindigkeit bzw. die Leistung des Servomotors variabel sein soll.
Ein Encoder ist eine Messeinrichtung (-> Istwert). Das ist mur ein kleiner Teil des Regelkreises und hat mit dem Regeln an sich nicht viel zu tun.
zum Thema Lawineneffekt : Einige Strecken haben die Eigenschaft, das sich nach dem Ändern der Stellgröße der Istwert nur stark verzögert ändert und dann heftig. Ich arbeite in einem Chemieunternehmen. Bei exothermen (wärmeerzeugenden) Reaktionen kommt es vor, das die Reaktion mit ansteigender Temperatur heftiger wird. Da während der Reaktion Wärme erzeugt wird, ist die Reaktionswärme ein weiterer Faktor die Reaktion noch weiter zu beschleunigen. Diese selbstverstärkende Wirkung gibt es z.B auch bei Tunneldioden oder Kernreaktionen (A-Bombe) in erheblich stärkerem Ausmaß. In unseren Roboterprojekten dürften solche Reaktionen so gut wie nie vorkommen.
Anmerkung : Unsere Chemieanlagen sind sicher. Es werden mehrere Stufen von Sicherungen verwendet um reaktionsstarke Prozesse zu kontrollieren !!! Der letzte schwere Unfall war 1974.
Diese sich selbst verstärkende Wirkung bezeichne ich als Lawineneffekt. Ich bin mir jetzt nicht sicher, ob es eine offizielle Bezeichnung ist
Auf meiner HP habe ich die mathematische Beschreibung der Regler (Formeln) gewählt, weil ich gerade mal mit 6 Programmiersprachen einiger Maßen umgehen kann. Die Formeln sind allgemein gültig und können in jede beliebige Sprache verwendet werden. Auch diejenigen die ich nicht kann und von denen gibt es genügend. Bei Gelegenheit werde ich mal Quellcode in den mir bekannten Sprachen schreiben. Wenn der Begleittext zu der Reglerberechnung nicht ausreicht, bin ich daran interessiert, woran Du gescheitert bist. Dann kann ich daran noch etwas feilen. Schliesslich will ich die Reglerabteilung mal als PDF-Version in den Artikelbereich stellen.
Bevor ich jetzt die Megbyte-Grenze sprenge höre ich erst mal auf.
Ich hoffe, das ich wenigstens etwas geholfen habe.
Grüße Klaus
Rage_Empire
15.08.2005, 15:08
Kann so ein sog. Lawineneffekt nicht auch in/bei Schwingkreisen vorkommen? (bei der hohen Güten von luftspulen bei erwärmung als Beispiel?)
Klaus_0168
15.08.2005, 15:13
Hi Rage_Empire,
die Antwort lautet JA. Dies ist in der Resonanzfrequenz der Fall.
Klaus
Rage_Empire
15.08.2005, 15:16
Also, wenn ich mit schwingkeisen zu tun habe, ist ein PID besser geeignet als ein PI-Regler. Oder habe ich das jetzt falsch verstanden?
Klaus_0168
15.08.2005, 15:53
Die Zeitverzögerung vom Ansteuern bis zur Reaktion des Schwinkreises ist sehr klein. Das kann Dich retten und den Schwingkreis mit einem PI - Regler regelbar machen.
Wenn der PI - Regler jedoch versagt, kannst Du nur noch einen PID - Regler einsetzen. Die Zeitverzögerung vom Ansteuern bis zur Reaktion ist auch noch ein wichtiges Kriterium.
Sorry, aber bei all den Berechnungsmöglichkeiten ist die Regelungstechnik in der Praxis ein "schwammiges" Thema.
Grüße Klaus
PS.: Dies war mein 275tes Posting. Ich geh jetzt Offlline - sehe heute abend bei weiteren Fragen nochmal rein.
Rage_Empire
15.08.2005, 17:28
Soweit habe ich das jetzt verstanden. Ein schwammiges Thema, das glaube ich....ist viel erfahrung notwendig um voll durchzusteigen denke ich.
Mich intressiert nur noch eins:
Wie merke ich, daß ein PI-Regle nicht ausreicht und ich auf ein PID-Regler zurückgreifen muß? Unruhige Regelung, Regelschwingungen, oder wie ziegt sich der Effekt dann (im groben)?
PS: Will ein SNT per PWM mit einem AVR regeln. Das Typsche SNT halt, mit Halbbrücke und einer Frequenz von ca. 30-40kHz.
Klaus_0168
16.08.2005, 08:02
Unruhige Regelung, Regelschwingungen, ...
Bingo, der Kandidat hat 100 Punkte.
Für die einzelnen Streckentypen haben wir Standartwerte, mit denen wir anfangen und dann mit der Optimierung beginen. Leider habe ich keine Standartwerte für Schwingkreise. Rein aus dem Bauch heraus würde ich mit einem KP von 0.5 bis 1.0 und einer Nachstellzeit im Bereich von 50 bis 100ms anfangen.
Allgemein sollte der Regler ein klein wenig langsamer sein als die Strecke, damit der Regler auf das Streckenverhalten reagieren kann. Hiermit habe ich 3 1/2 Jahre Lehre in einen Satz zusammengefasst - ist also mit Vorsicht zu geniessen.
Für Chemieanlagen sind solche Einsstellwerte nicht brauchbar, weil die Strecke gar nicht so schnell reagieren kann, für Schwingkreise sollte es jedoch ausreichen.
Grüße Klaus
Rage_Empire
16.08.2005, 16:38
Ok, danke. Versuche es mal somit. wird wohl etwas gefummel mit sich bringen, aber ich schau, daß ich vorerst alles flexibel halte bis es läuft. [-o< Werde die PWM mit meinem hier schon vorgestellten Source erzeugen(https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=8848&start=22), damit die Frequnez sichergestellt ist (was ja beim SNT so sein sollte).
Rage_Empire
20.08.2005, 00:42
Falls es jemand etwas bringt, hab ne top Doku für alle gängigen Regler (P, PI, PID, PD.....) gefunden. Ist meines erachtes die beste, die ich je frei im Netz gesehen habe:
http://www.fh-merseburg.de/~schoeppe/data2/automation/FAS525_Regelungstechnik_d.pdf
Sind etliche Beispliele der Verhalten erwähnt, wie z.B. Heizungsregelung.
@Hallo
Habe jetzt mal eine eigene Regelstrategie probiert:
'Eigener Regelungsversuch
'Soll_1 wird in Abhängigkeit von der Abweichung verschoben.
'und dient als neuer Sollwert wür die PWM Steuerung
Abweichung = Soll - Ist
Soll_1 = Abweichung * Faktor1
Soll_1 = Soll_1 / 1000
Pwm = Soll_1
Pwm = Pwm + 128
If Pwm < 2 Then Pwm = 2 'untere PWM Grenze
If Pwm > 253 Then Pwm = 253 'obere PWM Grenze
Compare1a = Pwm 'PWM Ausgabe
Faktor1 ist der AD Eingang wo ein Poti drann hängt (zum Einstellen)
Der Gedanke war eigentlich der, dass der Regler nicht über den 0 Wert (Soll_wert) rausschwingen soll, um zurück zu regeln.
Er soll schon vorher zurückreglen bevor er den Sollwert erreicht.
Ich verschiebe hier, bei einem Berechnungsdurchgang, den Soll-Wert (Soll_1) zum Ist-wert hin, damit er nicht über den Soll-Wert schwingt.
Regelt zwar noch nicht so hart, aber funktioniert soweit ganz gut.
Was haltet ihr von dem Regler ?
Wo könnte man diesen Regler den eigentlich einordnen ?
P,D I, oder P-Regler mit Zusatz ?
farmerjo
26.08.2005, 10:20
Das ist ein P-Regler. Proportional von der Abweichung wird der Ausgang geändert. Das Problem dabei du wirst immer einer bleibende Sollwertabweichung behalten. Bring doch mal noch den vorherigen Stellwert mit in die Gleichung, dann hast du so was wie ein I-Anteil der mit der Zeit immer Größer wird.
Gruß Johann!
Klaus_0168
26.08.2005, 11:10
Hi Roberto,
Ich stimme farmerjo zu, daß es sich bei Deiner Version um einen reinen P-Regler handelt. Der Wert Soll_1 wird in der MSR - Technik Yp genannt und ist der P-Anteil der Stellgröße.
Der Codeteil
Soll_1 = Abweichung * Faktor1
Soll_1 = Soll_1 / 1000
ist die Berechnung des P - Anteils.
Mit
Soll_2a = Abweichung * Faktor2
Soll_2a = Soll_2a / 1000
Soll_2 = Soll_2 + Soll_2a
kannst Du einen I-Anteil bewirken. (Soll_2a ist ein Schmiermerker; Faktor2 ist der Verstärkungsfaktor für den I-Anteil; Soll_2 ist der I-Anteil der Stellgröße). Der Wert von Soll_2 muss allerdings begrenzt werden, da er sonst bis an die Wertegrenzen des Variablentyps weglaufen kann und dann einen Überlauf verursacht.
P-Anteil und I-Anteil kann dann mit
Soll_3 = Soll_1 + Soll_2
Soll_3 = Soll_3 / 2
zusammengefügt werden.
Grüße Klaus
farmerjo
26.08.2005, 13:00
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Dim Y As Single
Dim Y1 As Single
Dim Yaus As Integer
Dim Xj0 As Single
Dim Xj1 As Single
Dim Xj2 As Single
Dim M0 As Single
Dim M1 As Single
Dim M2 As Single
Dim Ist As Integer
Dim Soll As Integer
Dim A As Single
Dim B As Integer
Const Q0 = 13.01
Const Q1 = -25.5
Const Q2 = 12.5
Config Portb = Output
Config Timer1 = Timer , Prescale = 8
Enable Interrupts
On Timer1 Zeit
Config Adc = Single , Prescaler = Auto , Reference = Off
Config Pinc.0 = Input 'Istwert
Config Pinc.1 = Input 'Sollwert
Portc.0 = 1
Portc.0 = 1
Start Adc
Xj0 = 0
Xj1 = 0
Xj2 = 0
Y = 0
Timer1 = 55536
Enable Timer1
For B = 0 To 100 Step 1
Ist = 0
Soll = 0
Waitms 10
Next
Do
Ist = 0
Soll = 1
Loop
Zeit:
Timer1 = 55536
Xj0 = Soll - Ist
M0 = Q0 * Xj0
M1 = Q1 * Xj1
M2 = Q2 * Xj2
Y = Y1 + M0
Y = Y + M1
Y = Y + M2
Xj2 = Xj1
Xj1 = Xj0
Print Y
Y1 = Y
Y = 0
Return
Hier mal meine Version eines PID Regler mit einem Verschiebealgorhytmus. Problem ist das es nach Regeltätigkeit zu einer bleibenden Abweichung kommt. Muss durch den Schritt Y = Y1 + M0 kommen da es immer der letzte Stellwert ist der die Abweichung ist.
Für die Einstellung mit kp und so bitte folgende Formle benutzen:
[/img]
Die Grunde liegende Formel ist so abgeleitet:
farmerjo
26.08.2005, 13:02
Ach ja der Timer1 löst alle 10ms einen Interrupt aus der den Stellwert berechnet. Diese Verzugszeit ist in der Formel berücksichtigt.
Aber irgendwoo ist da noch ein Bug drin weiß halt noch nicht genau wo.
An Portb ist ein 8bit DA Wandler (R/2R) angeschlossen. In dem Code erfolgt noch keine Ansteuerung, der Sollwert wird über RS232 ausgegeben.
Der Ist und sollwert sollen über ADC 1 und 2 eingelsen werden. In dem Beispiel werden aber die Wert in den Schleifen zugewiesen. Es wir eine Sprungantwort simuliert.
Gruß Johann!
Klaus_0168
27.08.2005, 22:03
Hi farmerjo,
ehrlich gesagt habe ich den Verschiebealgorithmus nicht so ganz verstanden, aber
wenn Du im Programm die Regelabweichung berechnest, diese Abweichung nur mit Faktoren belegst (auch wenn Du es drei mal machst) kann die Addition der drei Ergebnisse nur P-Verhalten sein.
Abgesehen davon muss der Prg.Teil
Xj2 = Xj1
Xj1 = Xj0
vor der Zeile
Xj0 = Soll - Ist
eingefügt werden. In Deiner Version werden die Werte von Xj1 und Xj2 den falschen Zyklen zugeteilt.
Grüße Klaus
farmerjo
27.08.2005, 23:10
Nun ja die Formel ist ja aus der Allgemeine Gleichung eines PID-Reglers abgeleitet. In Form des Verschiebealgorhytmuses hat sie den Vorteil, dass nur 3 Multiplikationen vorkommen und das bischen addieren und subtrahieren. Das tut dem Microprozessor nicht sonderlich weh.
Kannst dir ja spasseshalber die Formel mal in Excel nachbauen und eine Sprungantwort erstellen.
Mit dem Umkopieren der Variablen muss ich mir morgen mal anschauen kann da jetzt keinen Fehler erkennen. Die Müssen ja erst nach der ganzen Rechnerei umkopiert werden. Allein das ich die letzen drei Regelabweichungen in die Formel einbeziehe und unterschiedlich gewicht hab ich schon ein D-Anteil drin. Aber schau dir mal die Sprungantwort an. Die ist aus Excel, aber der MP spuckt genau so eine auch über RS232 aus.
Gruß Johann!
Hallo farmerjo,
dein Code scheint soweit in Ordnung zu sein, ich kann jetzt nicht erkennen wo eine Regelabweichung sein soll. Ist die Schleife überhaupt schon geschlossen?
Gruss Waste
farmerjo
28.08.2005, 11:40
Nein bei einer Sprungantwort die zur Zeit da simuliert wird darf die Regelstrecke nicht geschlossen sein. Die Regelabweichung wird an der stelle xj0=Soll - Ist berechnet. Es ist ja auch angedacht, dass Soll und Ist aus dem ADC von Kanal 0 und 1 abgeleitet werden, deshalb auch die Initialisierung des AD-Wandlers. Ist halt noch nicht fertig der Code.
Gruß Johann!
Da kann es ja auch noch keine Regelabweichung geben, bzw. es ist normal wenn noch nichts ausgeregelt wird. Erst wenn die Regelschleife geschlossen ist, kann man eine Regelabweichung bestimmen. Oder was meinst du sonst mit Regelabweichung? Dass die Sprungantwort bei deinem PID-Regler so aussieht ist normal.
Gruss Waste
farmerjo
28.08.2005, 14:02
Ja aber ich hab mal mit 3 Schleifen simuliert das Regelabweichung 1sec lang 0 dann 3sekunden lang 1 und dann wieder null, dabei hätte dann ja der Stellwert 0, dann Sprungantwort und dann wieder null sein sollen, war aber nach der Sprungantwort auf dem Wert hängen geblieben der zuletzt ausgegeben worden war.
Gruß Johann!
Ich kann mir das jetzt nicht so richtig vorstellen, gibt es dazu ein Diagramm? Vielleicht wird es damit verständlicher.
Gruss Waste
farmerjo
28.08.2005, 16:07
Hier mal der Graph wo nach einiger Zeit die Regelabweichung e wieder null wird, sprich die Situation wo der Stellwert des Reglers die Regelabweichung ausgesteuert hat. Das einzigste was passiert, ist dass der Stellwert Konstant bleibt (wie bei einem reinen P-regler) obwohl keine Regelabweichung vorhanden ist.
Gruß Johann!
Ah, jetzt verstehe ich was du meinst. Das ist normal, das ist der I-Anteil (Integrator) des PID-Reglers. Das muss so sein, sonst könnte man mit geschlossener Regelschleife nie auf eine Regelabweichung = 0 regeln. Bei geschlossener Regelschleife verhält sich der Ausgang des PID-Reglers anders, das ist zu beachten.
Das was du hier betrachtest, ist in der Praxis z.B. die Ansteuerung eines Motors oder einer Heizung und die ist im Normalfall nie 0, sondern hat immer einen bestimmten Wert. Bei Störungen von aussen soll sich dieser Wert auch bleibend ändern solange die Störung anliegt. Ich hoffe, es wird so einigermassen verständlich.
Übrigens kannst du in Excel auch eine geschlossene Regelschleife simulieren und dann mit den Parametern spielen, da wird dann einiges verständlicher.
Probier es mal aus.
Gruss Waste
farmerjo
28.08.2005, 21:14
Ich hab nur irgendwie das Gefühl das Excel ziemlich wenig dafür geeignet ist. Ich hab mein Praxissemester bei Claas gemacht die hatten da in der Elektronikabbteilung Mathlab und haben da solche sachen gemacht. Nur hab ich leider keine Ahnung wie das Programm funktioniert.
Ich dachte schon es sei ein Fehler des Algorhytmuses das da immer eine abweichung übrigbleibt. Aber so ganz verstehen tu ich das nicht, das System ist doch da wo es sein soll die Regeldifferenz ist 0, ein Stellwert bedeutet doch dann, dass es zu einer Abweichung kommt. Oder ist es vielleicht sinnvoll da um den Nullpunkt den I-Anteil ganz rauszunehmen, indem man ein Expertensystem einbaut und das sagt dann so was wie
if abs(Regelabweichung) < 3(oder so) then I-Anteil = 0 ?? So was in der Art?
Ich fin den Algorhytmus aber echt nicht schlecht weil er mit einem Timer nachgemessen in Bascom nur je nach Zustand (ob Regelabweichung gleich null oder nicht) zwischen 100 und 240 Takte verbrät und das ist ja mal echt nicht schlecht!!!
Aber danke schon mal für die Hilfe!!!
Gruß Johann!
Um die Wirkungsweise von digitalen Reglern zu verstehen ist Excel gar nicht so schlecht, weil die gleichen Schritte wie bei einem uC sichtbar nachvollzogen werden. Da du ja schon einen PID-Regler in Excel ausgeführt hast, kannst du einfach einige Versuche mit den Parametern durchführen um den Regler besser zu verstehen. Dein PID-Regler macht nämlich genau das was die Theorie sagt. Versuch mal die Parameter so einzustellen, dass z.B. nur ein P-Anteil oder nur ein I-Anteil vorhanden ist. Dann versteht man die einzelnen Parameter besser. Der PID-Regler ist dann die Summe aus allen Anteilen. Bei reinem I-Anteil wird der Ausgang um so höher sein, wenn am Eingang der Sprung länger ansteht, also in deinem Fall länger eine 1 ist. Probier es mal aus, vielleicht wird es dadurch verständlicher.
Was du hier betrachtest ist nur der Reglerteil, das ist noch nicht die komplette Regelschleife. Für eine komplette Regelschleife kommt noch die Regelstrecke und die Rückkopplung dazu. Erst da wird die Regelabweichung bei vorhandenem I-Anteil ausgeregelt. Zum besseren Verständnis habe ich hier ein übliches Blockschaltbild einer Regelschleife.
https://www.roboternetz.de/phpBB2/files/loop_870.gif
Deine Berechnung in Excel berücksichtigt nur den Sollwertvergleich und den Regler, also die Strecke von X nach Y. Der Rest der Strecke, wie Motor, Integrator und Sensor gehören auch noch zur Regelschleife und erst wenn die Schleife geschlossen ist, wird auch ausgeregelt und dadurch kann erst die Regelabweichung zu 0 werden. Ich hoffe, damit ist es jetzt klarer.
Gruss Waste
Klaus_0168
29.08.2005, 10:03
Hi farmerjo,
die Sprungantwort aus dem Excel hat mich überzeugt. Das Verhalten ist definitiv PID. Der Regler kann natürlich nur dann ausregeln, wenn der Regelkreis geschlossen ist. Bei geschlossenem Regelkreis wirst Du feststellen, daß die Regelabweichung zu Null gehen wird. Den Beiträgen von waste ist nichts mehr anzufügen.
Gruß Klaus
farmerjo
29.08.2005, 10:40
Also soll das heißen, wenn ich jetzt den Ausgang meines 8bit D/A-Wandlers an den Eingagng des A/D-Wandlers des Istwertes Anschließe und irgendwo dazwischen die Spannung messe, dann müßte sie um den eingestellten Sollwert schwanken? Ok dann fehlt zwar ne Richtige Strecke mit Totzeiten und so was dazwischen, baer sollte doch gehen oder? Man könnte ja vielleicht auch noch einen Kondensator dazwischen einbauen um eine Verzugszeit zu simulieren, nur dann muss ich erstmal rauskriegn was da für ein Strom fließt.
Gruß Johann!
Gruß Johann!
Klaus_0168
29.08.2005, 10:50
Hi farmerjo,
ich schlage dazu ein RC-Glied vor. Mit dem Ausgang das RC-Glied ansteuern und die Spannung am Kondensator wieder mit dem Eingang einlesen. Dann hast Du eine P-Strecke mit Verzögerung erster Ordnung, wie sie meistens vorkommen.
Gruß Klaus
Ja, RC-Glied ist besser, sonst schwingt die Schleife auf jeden Fall. Die Zeitkonstante des RC-Glieds sollte etwa bei 0.2 bis 0.5s liegen, oder gleich die Zeitkonstante der endgültigen Regelstrecke wählen.
Gruss Waste
Hallo Klaus
(bin erst jetzt zum Probieren gekommen)
Zu deinem Beispiel:
Soll_2a = Abweichung * Faktor2
Soll_2a = Soll_2a / 1000
Soll_2 = Soll_2 + Soll_2a
Da komme ich nicht ganz mit
Soll obiges den I-Anteil berrechnen ?
Soweit ich nachgelesen habe, ist der I-Anteil:
Abweichung*Zeit(Differenz)
Und warum hier:
-------------------------------
Soll_3 = Soll_1 + Soll_2
Soll_3 = Soll_3 / 2
-------------------------------
Soll_3 / 2 ?
Klaus_0168
31.08.2005, 09:11
Hi Roberto,
meine Version hat nichts mit dem Verschiebealgorithmus zu tun, sondern ist die kalssische Berechnugn eines PI - Reglers.
Die Zeilen mit den Variablen Soll_2a sind der I - Anteil - korrekt erkannt. Durch die Integration (Summenbildung mit sich selbst) von Soll_2 wird die steigende Kennlinie erzeugt.
Um einen PI-Regler zu bekommen muss der P-Anteil und der I-Anteil addiert werden.
Die Berechnung mit Soll_3 hatte volgenden Hintergrund.
In Soll_1 ist der P-Anteil im Bereich von 0 - 100% abgelegt.
In Soll_2 ist der I - Anteil im Bereich von 0 - 100% abgelegt.
Nach der Addition muss das Ventil im Bereich von 0 - 200% gestellt werden, was jedoch nicht möglcih ist, da das Ventil schon bei 100% Stellgröße ganz geöffent ist. Aus diesen Grund habe ich dei Summe (Soll_3) durch 2 geteilt.
Der Nachteil (fällt mir leider erst jetzt auf) dieser Berechnug ist, daß ich mir die Parameter für den P und den I - Anteil verbiege.
Gruß Klaus
farmerjo
31.08.2005, 09:39
Hi!
Kleine rechnung zum Tiefpass, für eine Zeitkonstante von 0,25s brauch ich bei einem 0,1microFarad Kondensator einen 25Megaohm Widerstand? Ist der nicht ein bischen Groß? Warum geht den in die Formel garnicht der Strom ein der fließt?
Ich hab jetzt mal mit den Einheiten s, Ohm und Farad gerechnet, gehören ja alles zu den erweiterten SI Einheiten oder?
Gruß Johann!
Hallo farmerjo,
die Formel für die Zeitkonstante ist:
tau = R * C
Da kannst Dir beliebige Kombinationen raussuchen, z.B.
100kOhm und 2,2µF ergeben 0,22s
22kOhm und 10µF ergeben ebenfalls 0,22s
usw.
Es sollten beide für Deinen Einsatz möglich sein.
Wenn Du mir sagst, wie gross der Ausgangswiderstand Deines DA-Wandlers und der Eingangswiderstand des AD-Wandlers ist, dann kann ich Dir genau sagen, welches RC-Glied dazu passt.
Gruss Waste
Rage_Empire
31.08.2005, 16:30
Ist das die gleiche Formel, wie beim I-Regler (R*C)?
@Rage_Empire
Tut mir leid, ich kenne keine Formel für I-Regler mit R*C. Mag sein, dass bei einem bestimmten I-Regler die Formel auch vorkommt, weil eine Zeitkonstante berechnet wird, dann ist es vermutlich die Gleiche.
Waste
farmerjo
31.08.2005, 20:20
Hey Strecke aufgebaut, tut sich zwar auch was, aber irgendwie noch nicht das richtige. Irgendwie macht der DA-Wandler wieder Ärger und spukt nur 5V aus. Nun ja morgen ist auch noch ein Tag.
Anbei mal der Code, vielleicht hab ich da jetzt auf die Schnelle auch noch ein Bug reingebaut:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Dim Y As Single
Dim Y1 As Single
Dim Yaus As Integer
Dim Xj0 As Single
Dim Xj1 As Single
Dim Xj2 As Single
Dim M0 As Single
Dim M1 As Single
Dim M2 As Single
Dim Ist As Integer
Dim Soll As Integer
Dim A As Single
Dim B As Integer
Const Q0 = 13.01
Const Q1 = -25.5
Const Q2 = 12.5
Config Portb = Output
Config Timer1 = Timer , Prescale = 8
Enable Interrupts
On Timer1 Zeit
Config Adc = Single , Prescaler = Auto , Reference = Off
Config Pinc.0 = Input 'Istwert
Config Pinc.1 = Input 'Sollwert
Portc.0 = 1
Portc.0 = 1
Start Adc
Xj0 = 0
Xj1 = 0
Xj2 = 0
Y = 0
Timer1 = 55536
Enable Timer1
Portb. = 0
Waitms 1000
Sound Portb.0 , 400 , 450
Do
Ist = Getadc(0)
Soll = Getadc(1)
Loop
Zeit:
Timer1 = 55536
Xj0 = Ist - Soll
Xj0 = Xj0 / 1023
M0 = Q0 * Xj0
M1 = Q1 * Xj1
M2 = Q2 * Xj2
Y = Y1 + M0
Y = Y + M1
Y = Y + M2
'Print Y
Yaus = Y + 128
If Yaus < 1 Then
Yaus = 0
Elseif Yaus > 254 Then
Yaus = 255
End If
Print Yaus
Portb. = Yaus
Xj2 = Xj1
Xj1 = Xj0
Y1 = Y
Y = 0
Return
So morgen geht es weiter!
Gruß Johann!
Klaus_0168
01.09.2005, 08:10
Hi all,
Ist das die gleiche Formel, wie beim I-Regler (R*C)?
Nein. Der Spannungsverlauf vom RC-Glied ist eine e-Funktion.
Gruß Klaus
Rage_Empire
01.09.2005, 09:49
ja schon, aber ein i-regler mit ops hat ja auch ne zeitkonstante. Vieleicht stehe ich etwas aufm schlauch???
Klaus_0168
01.09.2005, 11:25
Hi Rage_Empire,
rein zur Definition : Bei einem Integrierer wird der Widerstand zwischen dem Eingang und dem Minusanschluss vom OP angeschlossen und der Kondensator zwischen dem Ausgang und dem Minuseingang. Wenn der Pluseingang vom OP auf einem festen Potential liegt, wirkt die Schaltung wie ein Integrierer.
Weil der Widerstand zwischen den Eingängen gegen unendlich geht, ist die Spannugsdifferenz zwischen den Enigängen im ausgeregelten Zustand gleich 0V. Dadurch liegt der Minuseingang des OP auf festem Potential. Wenn der Pluseingang auf Masse liegt, spricht man beim Potential an dem Minuseingang von der 'virtuelen Masse'. Wenn nun die Eingangsspannung z.B. 1V beträgt und der Pluseingang auf Masse liegt, beträgt der Spannungsabfall am Widerstand 1V - mit dem entsprechenden Stromfluss. Durch die Eingänge des OP kann kein Strom fliessen (R gegen unendlich). Aus diesem Grund fliesst ein konstanter Strom in den Kondensator und läd ihn auf.
Mit U = Q/C und Q = I*t lässt sich die Formel U = I*t/C herleiten.
Demnach ist die Spannung direkt proportional zum Strom und der Einwirkungsdauer.
Hier ist noch ein Link zum nachlesen ( http://de.wikipedia.org/wiki/Operationsverst%C3%A4rker#Integrator )
Grüße Klaus
@Rage_Empire
Ah, jetzt kapier ich erst was Du meinst. Ja, bei einem analogen Integrator mit Operationsverstärker gibt es auch eine Zeitkonstante, die mit R*C berechnet wird.
Ich bin nicht darauf gekommen, weil es bisher nur um digitale Regler ging. Da bin ich auf dem Schlauch gestanden.
Gruss Waste
Rage_Empire
01.09.2005, 14:25
Ja, die meinte ich. Jedoch ist da kein R (bei meiner Schaltung jedenfalls nur rückkopplung durch c), deswegen hats mich etwas gewundert. Standen wohl beide aufm schlauch ;-)
Klaus_0168
01.09.2005, 22:00
Hi all,
@Rage_Empire : Und das hat funktioniert ?
Gruß Klaus
Rage_Empire
02.09.2005, 08:18
Ja, funktionieren tuts. Hab aber im moment nur nen analogen I-Regler am laufen. Will jetzt die Regelung aus OPs durch nen µC ersetzen und dann den Regler mit P und evtl. D ausstatten.
Der analoge I-Regler regelt an sich sehr gut. nur bei schnellen schwankungen und spitzen ist er halt zu träge.
Klar, ist auch nen i-Regler. Er läuft aber wesentlich besser als erwartet. Soweit, so gut.
Hab jetzt nur Problem die Werte des I- Reglers in die Software zu setzen. Sozusagen Problem mit der übersetzung von analog auf digital.
Der analoge I-regler hat an den eingängen jeweils 10k-widerstände. Am Ausgang ist ebenfalls ein 10K. Nach dem 10K am Ausgang des OPs hängt der Kondensator mit 2µ2 (als "Rückkopplung" -> Integrierer) direkt an den -Eingang.
Wie und was sind nun die Werte für den µC?
Das ist nun mein Problem!
Gibt es da auch eine Zeichnung oder Bild? Notfalls als ascii-Zeichnung im Code-Fenster, dann wären wir uns sicherer mit einer Aussage. Vermutlich ist es der 10k Widerstand am Eingang. Womöglich ist es gar ein PI-Regler?
Wenn die Zeitkonstante Ti des Integrators bekannt ist, dann kann Ki folgendermassen berechnet werden:
Ki = 1/Ti
Die weitere Vorgehensweise dann hier nachlesen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=109170&highlight=#109170
Gruss Waste
Rage_Empire
02.09.2005, 10:43
Sieht im Moment so aus:
Na, da isser ja! :)
Es ist der 10k am minus-Eingang des OP.
Damit ist die Zeitkonstante Ti = 10k*2.2µ = 0.022s
Ki = 1/0.022 = 45
Was der 10k am Ausgang des OP macht, ist mir nicht so recht klar. Vielleicht eine Begrenzung? Aber warum?
Weitere Schaltungsteile davor oder dahinter könnten noch eine Verstärkung oder Dämpfung bewirken, das müsste auch berücksichtigt werden.
Waste
Rage_Empire
02.09.2005, 11:42
Hm, das gebilde sieht insgesammt komplex aus. Naja, habe auch viel zeit mit versuche verbracht ;-)
Der Teil vor den 10k Widerständen ist noch von Interesse. Je nachdem wo eingespeist wird, ist es ein I- oder PI-Regler.
Waste
Rage_Empire
02.09.2005, 14:26
Warum das? -Eingang Bekommt einen Bezug mit nem Poti. +Eingang kommt das gemessene Signal, auf das geregelt wird.
Tja, damit ist es ein PI-Regler!
Kommst Du selber darauf, warum das so ist?
Wenn nicht, dann wäre ein Studium doch nicht so schlecht.
Habe bis jetzt alles ohne studium und titeln geschafft. Wer gut genug ist, braucht kein papier zu bestätigung.
Keine Bange, ich helfe schon noch weiter, falls Du es nicht selbst schaffst. :wink:
Gruss Waste
Rage_Empire
02.09.2005, 16:01
@waste:Habe ja auch keine Zeitangabe gemacht. Wenn ich aber die Zeit für ein studium und schule rechne die ich übergangen habe, bin ich im mom. immernoch schneller zum Ziel gekommen ;-)
Plomp gesagt: Es ist wegen des Widerstands am ausgang vom OP zum C ein PI-Regler, Richtig?
Nein, durch die Ansteuerung auf den Plus-Eingang. Ein nichtinventierender Verstärker mit OPs hat immer eine Verstärkung von mindestens eins. Das gilt auch für den Integrator. In Deinem Fall ist es also ein PI-Regler mit:
kp = 1 und ki = 45
Wenn es noch nicht klar ist, dann sag Bescheid.
Gruss Waste
Rage_Empire
04.09.2005, 12:11
Oh, jetzt hast mich erwischt ;-)
Hm, dann wurde es zufällig ein PI- Regler. Klar ist mir das noch nicht so ganz. Stehe auch mit analog etwas auf kriegsfuß :-D
farmerjo
08.09.2005, 17:46
Hi!
Hab meinen Digitalen PID-Regler ans laufen bekommen. Nachdem ich den Kreis über ein RC-Glied geschlossen haben funktioniert das ganz gut. Hab mir mal ein 2 Kanalozsi ausgeliehen und die angehängte aufnahme gemacht. Der weiße Graph ist der Regler der andere der Sollwert.
Was an dem Regler auch ganz angenehm ist, dass er mit der eingebauten Ausgabebegrenzung nicht mal mehr Überlaufen kann wenn der voll ausgesteuert ist. Ich werd mich die Tage mal daran machen das ganze auf ein Board unterzubringen. Die Abweichung am 5V Ende koomt daher das doch ein paar mV im DA-Wandler hängen bleiben. Ansonsten funktioniert der echt gut. Ist es vielleicht empfehlenswert einen Extra Chip als DA-Wandler zu nehmen als so ein R/2R Netzwerk?
Gruß Johann!
Rage_Empire
15.10.2005, 17:09
Hab hier ein Prog gefunden, vieleicht intressierts euch ja:
http://www.auto.tuwien.ac.at/~jlukasse/project.htm
Hallo Rage_Empire,
wo kann man das Programm runterladen?
Auf der Seite finde ich nichts.
mfg
AVRWalli
Rage_Empire
15.10.2005, 17:58
Wenn du oben auf Downloads gehst müsstest du es Downloaden können. Ist sogar ne Deutsche PDF als Anleitung verfügbar.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.