So ich bin nun endlich wieder dazugekommen, an meinem regelungsprogramm weiterzuarbeiten.
Leider funktioniert es immer noch nicht. Konkret schaut es nun so aus:
Code:
Dim E As Single , Esum As Single , Ealt As Single
Cls
Start Adc
Dim Sollwert As Single
Dim Istwert As Single
Dim Stellwert As Single
Dim W As Word
Stellwert = 0
Sollwert = 3.00
Ealt = 0
Cyclic:
Waitms 50
Gosub Regulator
Goto Cyclic
Regulator:
Pwm1a = Stellwert
Const Kp = 0.0
Const Ki = 0.0
Const Kd = 1
Dim Panteil As Single
Dim Ianteil As Single
Dim Danteil As Single
W = Getadc(0)
Istwert = W / 1023
Istwert = Istwert * 50
E = Sollwert - Istwert
Esum = Esum + E
Panteil = Kp * E
Ianteil = 0.05 * Esum
Ianteil = Ianteil * Ki
Danteil = E - Ealt
Danteil = Danteil * Kd
Danteil = Danteil * 20 '1 / Ta = 20, da Ta = 0.05ms'
Stellwert = Panteil + Danteil
Stellwert = Stellwert + Ianteil
Ealt = E
Locate 1 , 1
Lcd Stellwert
Locate 2 , 1
Lcd Fusing(istwert , "#.##")
Return
Ich hab mich dabei mit an dem Bascom Beispiel orientiert. Darum auch die 50ms Verzögerung am Anfang. Ich hab mir auch den anderen Beitrag im Forum zu dem Beispiel durchgelesen und weis, dass es nicht das beste ist. Mein Problem ist immer noch folgendes, dass der Stellwert teilweise negativ wird. Kp und Ki hab ich absichtlich weggelassen um ersteinmal Ki einzustellen. Nur wie bring ich jetzt den Stellwert in Verbindung mit dem PWM wert. Der Stellwert kann ja auch negativ werden. Ich wäre für vorschläge sehr dankbar. Achja: der Faktor 0.05 stellt die Abtastrate (50ms Verzögerung dar, und der Faktor 20 der Kehrwert)
Vielen Dank für eure Hilfe.
Martin
Lesezeichen