Hallo,
ich bin auch gerade dabei mich an einer PID Regelung zu versuchen.
Allerdings für eine andere Anwendung:
Ich habe ein Schaltnetzteil gebaut welches aus einer 24 VGleichspannung (Gegentackt) über einen Trafo 2500 V macht welche wiederum über eine
Fullwavekaskade auf 25.000 V hochtransformiert wird. Und eben diese
Spannung will ich ausregeln.
Ich habe bisher ein PI Regler programiert der so aussieht:
Könnte das so stimmen?
Das funktiniert auch soweit und ich kann die Spannung auf 30 V +- Ausregeln. Sehr genau sogar. Aber ich glaube so ganz sauber ist das nicht
und der D-Anteil fehlt auch noch. (Ist hier für Fragen dazugekommen, in meinem
code fehlt er noch)
Meine Frage wäre. Wie ist das mit der Integralberechnung hier gemeint?
Was für Variablen muss man verwenden? Ich habe momentan meine so definiert:
Und das wichtigste ist, wie kann ich den D-Anteil rein bringen.
Kenne mich leider nicht so dolle damit aus, bin schon froh, dass er so super und genau ausregelt. Möchte es aber noch verfeinern.
[edit]
Habe es gerade noch etwas angepasst. Er Regelt nun echt sauber. Aber stimmt das auch so?
Komischer weise regelt er aber auch super schön aus, wenn ich nur den D-Anteil nehme.
Gruß und Danke
Snatch
ich bin auch gerade dabei mich an einer PID Regelung zu versuchen.
Allerdings für eine andere Anwendung:
Ich habe ein Schaltnetzteil gebaut welches aus einer 24 VGleichspannung (Gegentackt) über einen Trafo 2500 V macht welche wiederum über eine
Fullwavekaskade auf 25.000 V hochtransformiert wird. Und eben diese
Spannung will ich ausregeln.
Ich habe bisher ein PI Regler programiert der so aussieht:
Könnte das so stimmen?
Code:
Const Kp = 1 ' Konstande des P-Wertes (Verhalten) der Regelung
Const Ki = 1 ' Konstande des I-Wertes (Verhalten) der Regelung
Const Kd = 1 ' Konstande des D-Wertes (Verhalten) der Regelung
Dim P As Single ' Variable zur Verarbeitung des P-Wertes
Dim D as Single
Dim Ii As Single ' Vaariable zur Verarbeitung des I-Werts
Dim Fehler As Single ' Variable zum Speichern des Berechneten Fehlers (Soll / Ist) für die Regelung
Dim Fehleralt As Single ' Variable zum Speichern des vorherigen Fehlers Error für die Regelung
Dim Ergebniss As Word ' Variable Speichert das Ergebniss auf der Berechnung de I Wertes der Regelung
P = Fehler * Kp
If P < 0 Then P = 0
If P > 1024 Then P = 1024
Ii = Fehleralt * Ki
If Ii < 0 Then Ii = 0
If Ii > 64511 Then Ii = 64511
D = Fehleralt - Fehler
D = Kd * D
Fehleralt = Fehler + Fehleralt
Ergebniss = P + Ii
If Ergebniss < 0 Then Ergebniss = 0
If Ergebniss > 65534 Then Ergebniss = 65535
Ocr1a = Ergebniss
Das funktiniert auch soweit und ich kann die Spannung auf 30 V +- Ausregeln. Sehr genau sogar. Aber ich glaube so ganz sauber ist das nicht
und der D-Anteil fehlt auch noch. (Ist hier für Fragen dazugekommen, in meinem
code fehlt er noch)
Meine Frage wäre. Wie ist das mit der Integralberechnung hier gemeint?
Was für Variablen muss man verwenden? Ich habe momentan meine so definiert:
Und das wichtigste ist, wie kann ich den D-Anteil rein bringen.
Kenne mich leider nicht so dolle damit aus, bin schon froh, dass er so super und genau ausregelt. Möchte es aber noch verfeinern.
[edit]
Habe es gerade noch etwas angepasst. Er Regelt nun echt sauber. Aber stimmt das auch so?
Code:
' P-Anteil
P = Fehler * Kp
If P < 0 Then P = 0
If P > 1024 Then P = 1024
'Alte I-Berechuung Ii = Fehleralt * Ki
' I-Anteil
Tmp = Fehler * Ki
If Ocr1a < 65534 Then ' Integral wirkt erst im Regelbereich
Ii = Ii + Tmp
Else
Ii = 0
End If
If Ii < 0 Then Ii = 0
If Ii > 1024 Then Ii = 1024
D = Fehleralt - Fehler
D = Kd * D
Fehleralt = Fehler + Fehleralt
Ergebniss = P + Ii
Ergebniss = Ergebniss + D
If Ergebniss < 0 Then Ergebniss = 0
If Ergebniss > 65534 Then Ergebniss = 65535
Ocr1a = Ergebniss
Gruß und Danke
Snatch