- Labornetzteil AliExpress         
Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 69

Thema: Single PID Regler in Bascom

  1. #21
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Anzeige

    Praxistest und DIY Projekte
    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...stechnik_d.pdf

    Sind etliche Beispliele der Verhalten erwähnt, wie z.B. Heizungsregelung.

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    @Hallo

    Habe jetzt mal eine eigene Regelstrategie probiert:

    Code:
    '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 ?

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.02.2004
    Alter
    42
    Beiträge
    171
    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!

  4. #24
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    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
    Eine verrückte Idee ist besser als keine

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.02.2004
    Alter
    42
    Beiträge
    171
    Code:
    $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:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken verschieballgorhytmus.jpg   verschibe2.jpg  

  6. #26
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.02.2004
    Alter
    42
    Beiträge
    171
    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!

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.01.2005
    Ort
    Niederdorfelden / Hessen
    Alter
    56
    Beiträge
    368
    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
    Eine verrückte Idee ist besser als keine

  8. #28
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.02.2004
    Alter
    42
    Beiträge
    171
    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!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken sprungantwort.jpg  

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    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

  10. #30
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.02.2004
    Alter
    42
    Beiträge
    171
    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!

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen