[Bascom] PI Regelung

Beiträge verschoben um die Übersichtlichkeit zu bewahren

Hallo Bonze und auch die anderen,

ich hab mal die Beiträge, die sich mit der 1Wire-Temperaturmessung
befassen in einen anderen Bereich verschoben wo sie besser hinpassen
und auch bei der Suche eher gefunden werden ...
Software
- Messen physikalischer Größen
=> 1Wire Temperaturmessung für PI-Regelung


ich hab bei meinen Antworten selber schon gemerkt das es sich langsam
aber sicher immer weiter vom ursprünglichen Thema entfernt hat.
Ich setze dann noch einen Link auf diesen Beitrag damit es auch einen
Rückweg gibt ;)

Ich hoffe mal der Titel des Themas gefällt. Sonst einfach ne kurze Info und
es wird angepaßt ;)

Gruß
Dino
 
achso, den mega8 hab ich schon bestellt, jedoch sonst noch nichts wirklich, würde den auch gerne verwenden, denn ich fange mit der lüftersteuerung an , vielleicht kommt nochwas dazu ,.

@pidhunter, du beziehst dich jetzt auf das einstellen der regelstrecke?
oder kannst du das für anfänger nochmal besser erklären ?

achso, ja ich nutze die demoversion von bascom

Du willst also einen PI-Regler erklärt haben. Fangen wir einfach an - mit einem anschaulichen P-Regler.

Ein typischer P-Regler, den fast jeder zu Hause hat ist die Füllstandsreglung der Toilettenspülung, also nicht das Teil mit dem Drucksystem, sondern das klassische System mit hochhängendem offenen Wasserbecken und Schwimmer.

Wenn man an der Kette zieht, dann fließt das Wasser runter und ich habe für den Regler eine Spülung ausgelöst und damit unbewußt eine durchaus gewollte "Störgröße" erzeugt.

Erst durch die Störung wird ein P-Reglung aktiv und der Zulauf wird geöffnet und das Wasser steigt bis der Schimmer so hoch steht, dass der Wasserzulauf immer mehr gedrosselt wird, bis der P-Regler schließlich stoppt.

Es scheint alles ok zu sein. Trotzdem hat der P-Regler ein ernstes Regelproblem und das tritt erst zu Tage wenn mal die Dichtung nicht richtig schliesst und ständig etwas Wasser wegfließt, denn dann stimmt auszuregelnde Füllstand nicht mehr.

Wie weit der Füllstand unter dem Soll steht hängt "proportional" davon ab viel Wasser abfliesst. Je größer diese Regelabweichung desto mehr wird das Ventil aufgedreht.

Das kann man einfach testen wenn man ganz langsam an der Kette zieht.

Durch den Hebel wo die Kette dranhängt wird die Verstärkung des Regelkreises eingestellt. Die Stellgröße (Zulaufmenge) hängt proportional von der Abweichung des Füllstandes ab - deshalb auch der Name P-Regler.

Ist die Dichtung ziemlich marode wird der Behälter nie richtig voll und kraftvoll gefüllt wird der Behälter auch nicht wirklich.

Es gibt zwei Möglichkeiten (A) Dichtung reparieren und die ständige Störgröße entfernen oder den Reglertyp derweil anpassen bis der Klempner mit einer neuen Dichtung eintrifft. So eine typische "halbrussische" Lösung interessiert uns, weil die das nicht zu klärende Problem vorübergehend löst und uns den PI-Regler veranschaulicht, also machen wir genau das.

Wir haben den Klempner ja schon angrufen und unser Umweltgewissen beruhigt, aber wir muss aufs Clo und das muss funktionieren, denn der Klempner, der die Dichtung für uns bestellt hat ist noch im Urlaub, also nehmen wir einen Mikrocontroller und spannungssteuerbare Pumpe und einen Tauchfühler dessen Widerstand mit Spannungsteiler eine von der Füllhöhe proportional abhängen Spannung liefert und sagen dem Mikrocontroller !!! JE LÄNGER !!! die Abweichung von Füllstand ansteht desto mehr Wasser fülle im Behälter !!! ZUSÄTZLICH !!! nach.

Genau das ZUSÄTZLICHE Wasser ist dieser schwer fassbare I-Anteil aus dem I-Speicher, dessen zusätzlicher "Speicherinhalt" den Behälter trotzdem noch voll macht. Ein normaler P-Regler kann den Sollwert einfach nicht mehr halten wenn die Störgröße ständig ansteht - eine klassische Gummidichtung ist nicht selbstheilend.

Erklärung der Parameter des PI-Reglers

Die Zeit die, der PI-Regler schneller den Behälter auffüllt (es fliesst kurzzeitig deutlich mehr Wasser zu) als dies der P-Regler für gewöhnlich tun würde, nennt man die Nachstellzeit des PI-Regler's - meist mit Ti abgekürzt.

Der Kehrwert von Ti ist das Ki, also Ki=1/Ti und der oft händeringend gesuchte Ki ist der sogenannte Verstärkungsbeiwert des I-Anteils. Ist dieser Wert klein, dann war die Nachstellzeit gross, also hat der I-Anteil sehr heftig nachgefüllt. Ist der Ki-Wert gross, dann war die Nachstellzeit klein und das Nachfüllen ging gemächlich.

Der Anstieg der Funktion aus dem Weg beim Ziehen der Kette zur resultierenden Wassermenge ist die Kp-Verstärkung, der Verstärkungsbeiwert des P-Reglers, genannt Kp.

Je kürzer der Weg beim Kette ziehen, desto heftiger das Nachfüllen und desto geringer ist die Füllstandsdifferenz, denn die Füllhöhe X wird durch die ZulaufmengeY mit Y=Kp*Xw erreicht, wobei Xw die Regelabweichung ist, also die Differenz zwischen Sollfüllstand W und Istfüllstand X.

Je größer das Kp desto heftiger geht das Nachfüllen und desto mehr "Stellvermögen" hat der P-Anteil und desto schneller reagiert der Regler.

Der Punkt an dem der Zulauf für gewöhnlich aufhört ist der Sollwert W und der momentane Wasserstand ist der Istwert X, deshalb gilt Xw=W-X (Anm: nicht X-W programmieren, denn die Subtraktion ist nicht kommutativ und den Regler funktioniert dann nicht)

Ist die Kp-Verstärkung sehr gross reagiert, also ein Füllen mit sehr viel Druck und mit mindestens Feuerwehr B-Schlauch, dann reagiert der Regler so heftig, dass das Zulaufwasser einfach drüberschwappt und nach dem Drüberschwappen der Behälter trotzdem halb leer ist, also schwingt der Regler hektoliterweise den ganzen Tag und die Stadtwerke machen schon mal den Sekt auf. :cheers:

Der Punkt an das Überschwingen gerade noch nicht auftritt ist die kritische Kp-Verstärkung.

Liegt man über dieser Grenze wird selbst eine triste Clo-Spülung zu einer dauerhaften Wasserfallattaktion, die bei durchsichtiger, hoch hängender Ausführung des Systems als sprudelnder Abkühlbehälter für einen Freizeitpark taugt.

Fazit der Vorteile eines PI-Regelsystems

Trotz PI-Regler fliesst zwar trotzdem unnötig Wasser weg, aber wenigstes ist der Füllstand genau ausgeglichen und falls jemand auf's Clo muss, dann steht wenigstens noch der volle Wasservorrat zur Verfügung.

Hydraulik-Positioniersysteme sind fast immer mit PI-Reglern aufgebaut, da sonst die Position entweder nicht stimmt oder alles unnötig langsam geht.

Kurz ein PI-Regler arbeitet bei richtiger Einstellung von Kp und Ki schnell und trotzdem präzise.
 
wow :D hast du viel geschrieben
naja , ich weiss schon wie ein pi regler funktioniert,
hab nur leichte probleme das in code umzusetzen, habsa mal probiert, anhand der geläufigen formeln aus ner formelsammlung.
Code:
Sollwert = Temp
      T = 0.5
      Kri = 2
      Krp = 5
      Sollwert = 30                                         'Sollwert auf 30°C setzen

      Regeldifferenz = Istwert - Sollwert

      'P-Anteil
      Pverstellung = Krp * Regeldifferenz

      'I Anteil
      Tmp_ianteil = Regeldifferenz * Kri
      Iverstellung = Tmp_ianteil / T
      Ianteil = I_alt + Iverstellung

      'Ergebnis
      Regelgroesse = Pverstellung + Ianteil

      Piregler = Regelgroesse


ich denke ich geh schon in die richtige richtung allerdings hab ich bestimmt ne kleinigkeit übersehen oder vergessen.
 
hab die sachen seit samstag werd mal sehen das ich sie schnellstmöglich zusammengebaut bekomme, hat der mega8 nen ttl-pegel von 5 oder 3,3V :? bei UART
 
Hallo Bonze!

Na, dann kann das fröhliche Basteln ja beginnen! :D

Was deine Frage vom Pegel des UART betrifft.....
Soweit mir bekannt ist, wird die Pegelhöhe immer von der Versorgungsspannung des Comtrollers bestimmt.
Darum musst du auch ein Pegelwandler (MAX232) dazwischen schalten, wenn du dein µC mit dem PC verbinden möchtest.


Gruß,
Cassio
 
Hallo,

hat der mega8 nen ttl-pegel von 5 oder 3,3V :? bei UART
Also der Mega8 arbeitet natürlich mit seiner Betriebsspannung. Das ist je nach
Gebastel 3,3V oder 5V oder bei Batterien 4,5V oder bei Akkus 4,8V oder bei ner
Lithium-Zelle 3V oder, ...

Der RS232-Anschluß am PC arbeitet aber mit -12V und +12V (nach Norm).
Der MAX232 erzeugt aber mit Ladungspumpen (das mit den Kondensatoren
dran) -9V und +9V um an diesen Standard ranzukommen. Das reicht meißt aus.
Der MAX3232 macht das von seinen 3,3V aus. Also je nach Betriebsspannung
deines Mega8 kommst du entweder mit dem MAX232 aus oder brauchst den
MAX3232. Der MAX3232 kann 3,3V UND 5V. Also ist der vorzuziehen. Aber
zum PC brauchst du auf jeden Fall einen Pegelwandler.

Andere Bausteine die auch nur mit der Betriebsspannung arbeiten, die
dem Mega8 zur Verfügung steht, kann man auch direkt anschließen.

Gruß
Dino
 
Ich hab grad mal
http://www.datasheetcatalog.org/datasheet/maxim/MAX220-MAX249.pdf
gezogen, wonach der MAX 232 durchaus 5V abkann. Aber die Familie der 232'er
ist beachtlich groß und je nach Namens-Zusatz kann glaub ich auch einer für
nur 3,3V mit von der Partie sein :rolleyes:

...
Also je nach Betriebsspannung deines Mega8 kommst du entweder mit dem MAX232 aus oder brauchst den MAX3232. Der MAX3232 kann 3,3V UND 5V. Also ist der vorzuziehen.
...

Ich benutz die Käfer durchweg an 5V und bis jetzt tuns auch noch alle ohne
Hitzschlag :D

Grüssle
Wolfgang
 
Hi Wolfgang,

Ich hab grad mal
http://www.datasheetcatalog.org/datasheet/maxim/MAX220-MAX249.pdf
gezogen, wonach der MAX 232 durchaus 5V abkann. Aber die Familie der 232'er
ist beachtlich groß und je nach Namens-Zusatz kann glaub ich auch einer für
nur 3,3V mit von der Partie sein :rolleyes:

Ich benutz die Käfer durchweg an 5V und bis jetzt tuns auch noch alle ohne
Hitzschlag :D
Abkönnen tuen beide die 5V.
Also...
Der MAX232 kann nur 5V Betriebsspannung
Der MAX3232 kann 3,3V oder 5V Betriebsspannung.

Wenn du also nur 5V benutzt dann kannst du beide verwenden. Wenn du
aber auch mal mit 3,3V arbeiten willst dann geht nur der MAX3232.

Vom MAX232 gibt es ne ganze Menge Untertypen. Die haben teilweise
andere Gehäuse oder andere Kondensatorbeschaltungen usw. Aber mit
1µF Elkos sollten alle soweit laufen. Nur wenn man bei den Ladungspumpen
mit 100nF arbeiten will dann gehen nicht mehr alle.

Gruß
Dino
 
so ,
hab mal versucht nachdem ich die temp lesen und umwandeln kann jetzt meine Regelung zum laufen zu bekommen, bekomme allerdings da nen gewissen ERROR 46, an der markierten Stelle, weiss nicht was daran falsch sein soll?
Code:
Declare Function Piregler(byval Temp As Single) As Single 
Dim Test As Single   
Test = Piregler(ist_temp1)
  
'PI-Regeler#########################################
   Function Piregler(byval Istwert As Single ) As Single
      Local Dim Regeldifferenz As Single                    'Regeldifferenz
      Local Dim Sollwert As Single                          'Sollwert
      'Local Dim Istwert As Single                           'Istwert
      Local Dim Pverstellung As Single
      Local Dim Iverstellung As Single
      Local Dim Tmp_ianteil As Single
      Local Dim Regelgroesse As Single
      Local Dim Ianteil As Single
      Local Dim Kri As Byte
      Local Dim Krp As Byte
      Local Dim T As Byte
      Local Dim I_alt As Single
[B]
      T = 1
      Kri = 2[/B]
      Krp = 5
      Sollwert = 30                                         'Sollwert auf 30°C setzen

      Regeldifferenz = Istwert - Sollwert

      'P-Anteil
      Pverstellung = Krp * Regeldifferenz

      'I Anteil
      Tmp_ianteil = Regeldifferenz * Kri
      Iverstellung = Tmp_ianteil / T
      Ianteil = I_alt + Iverstellung

      'Ergebnis
      Regelgroesse = Pverstellung + Ianteil

      Piregler = Regelgroesse
   End Function

nebenbei gefragt gibts irgenwo ein lcd/glcd welches möglichst groß ist max 5cm hoch , die platine dürfte nicht höher als 8cm sein
 
mh die fehler sind jetzt weg , code sieht so aus ,.
Code:
'PI-Regeler#########################################
Function Piregler(byval Istwert As Single) As Single
      Local Regeldifferenz As Single                        'Regeldifferenz
      Local Sollwert As Single                              'Sollwert
      Local Istwert As Single                               'Istwert
      Local Pverstellung As Integer
      Local Iverstellung As Integer
      Local Tmp_ianteil As Integer
      'Local Regelgroesse As Single
      Local Ianteil As Integer
      Local Kri As Byte
      Local Krp As Byte
      Local T As Byte
      Local I_alt As Integer

      T = 1
      Kri = 2
      Krp = 5
      Sollwert = 30                                         'Sollwert auf 30°C setzen

      Regeldifferenz = Istwert - Sollwert

      'P-Anteil
      Pverstellung = Krp * Regeldifferenz

      'I Anteil
      Tmp_ianteil = Regeldifferenz * Kri
      Iverstellung = Tmp_ianteil / T
      Ianteil = I_alt + Iverstellung

      'Ergebnis
      Piregler = Pverstellung + Ianteil                     'entspricht der regelgröße
End Function

als ausgabe mit
Code:
   Test = Piregler(ist_temp1)
   Print Test;
ist_temp1 hab ich natürlcich, ist ne Zahl die ungef#hr so aussieht 25.0125
bekomme ich nur 0.0 ausgegeben
 
Ein paar Kommentare:
Du verwendest ziemlich viele lokale Variablen. Hast du dafür genügend Frame reserviert?
Vermeide implizite Typumwandlungen wie z.B. in

Pverstellung = Krp * Regeldifferenz

Integer = Byte * Single

Mit welchem Wert von ist_temp1 rufst du die Funktion auf.
Hast du den Ablauf mal im Simulator überprüft? Da kannst du bei jedem Schritt sehen, wie sich die Wert ändern.

HBA
 
Schau mal zuerst in der BASCOM Hilfe unter
BASCOM IDE -> Program Simulate
Das meiste ist eh intuitiv.
Also kompilieren und dann den roten Button für Simulate.

HBA
 
jo hab ich dann kann man die variablen in die gelben felder eintragen welche man beobachten möchte oder? z.B. Test und die variablen der PI Regelung
bei den blauen bzw der brille kann man werte vorgeben ?
also bei mir z.B. meine temp von 40°C oder 50°

mh da kommt nur scheiss bei raus, hab auch mal direk an den avr angeschlossen und dann simuliert, aba irgendwie is das auch komisch,
 
Die gelben sind globale Variablen, die blauen lokale.
Wenn du in die Zeile klickst, kannst du die Variable auswählen.
Wenn du auf den Wert klickst, kannst du den aktuellen Wert auch abändern, wenn du mit anderen Werten arbeiten willst.
Versuche mal rauszufinden, ob die Zwischenergebnissen deinen Erwartungen entsprechen.
Wenn du ganz oben auf das blaue M gehst, dann zeigt er dir den Inhalt des SRAM an. Wenn du im Einzelschritt (F8) gehst, zeigt er in rot die geänderten Werte.

HBA
 
wie kann man waits übergehen?
bei mir bleibt er daran stehen und bewegt sich erst wenn ich auf goto line dann eine reihe weitergehe,.

so hab rausgefunden das Kri als byte zu klein definiert war , der wert hat 255 betragen,. habs mal von byte auf integer gestellt

habe eben noch was gelesen beim ablauf des progs, "Frame or softwarestack overlap",.

regeldifferenz wird auch nicht berechnet,. bleibt also 0
 
wie kann man waits übergehen?
Mit der Direktive $sim werden alle Wartezeiten ignoriert.

habe eben noch was gelesen beim ablauf des progs, "Frame or softwarestack overlap",
Das hatte ich dich schon gefragt.
Wenn in deinem Program kein $Framesize angegeben ist, dann nimmt er das was unter
Options -> Compiler -> Chip steht

Wie gesagt, besonders den Frame musst du vergrößern und bei so vielen lokalen Variablen ist auch der SW-Stack zu klein.
Nimm mal ordentlich große Werte für beide, ca. 100 vielleicht.

HBA
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)