GMB
25.03.2006, 10:06
Hallo zusammen!!
Habe folgendes Problem:
Möchte eine Temperaturregelung implementieren, bei der der angeschlossene Lüfter über PWM gesteuert wird. "Manuell" den Lüfter über PWM zu steuern funktioniert auch einwandfrei (habe schon "ausgelotet", welche Frequenz und welche minimal Pulsbreite möglich ist,etc. also alles schon OK), auch habe ich eine Temperaturmessung schon "integriert", zudem habe ich auch Grundkenntnisse der Regelungstechnik.
Habe mich jetzt mal an den Artikel hier auf Robotornetz gehalten, und erstmal ein kleines Programm geschrieben zur "Simulation":
Hier mal das Programm soweit:
$regfile = "m8def.dat"
$crystal = 3686400
Config Pinb.1 = Output
Config Pinb.2 = Output
Dim Esum As Single
Dim E As Single
Dim Kp As Single
Dim Ki As Single
Dim Ta As Single
Dim X As Word
Dim Y As Single
Dim Z As Single
Dim W As Single
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Adc = Single , Prescaler = Auto , Reference = Internal
Do
W = -25 'Sollwert = -25°
Kp = 18 'Aus Beitrag übernommen
Ki = 60 'Aus Beitrag übernommen
Ta = 0.01 ' Aus Beitrag übernommen
X = Getadc(0) 'Istwert Einlesen
E = W - X 'Vergleich (Regelabweichung)
Esum = Esum + E 'Integration I-Anteil
If Esum < -400 Then
Esum = -400
End If 'Begrenzung I -anteil
If Esum > 400 Then
Esum = 400
End If
Y = Kp * E
Z = 0.6 * Esum
Y = Y + Z
'Reglergleichung
If Y < 0 Then
Y = 0 'Begrenzung Stellgröße
End If
If Y > 255 Then
Y = 255
End If
Pwm1a = Y 'Einfach mal so "fiktiv" gesetzt
Cls
Upperline
Lcd "Y: " ; Y ; "X: " ; X 'Displayausgabe der Werte zur Kontrolle
Lowerline
Lcd "E: " ; E
Loop
So, wenn ich jetzt mal am ADC0 "drehe", bleibt Y immer auf Null!!
Woran liegt das?!?!
Wie kann ich sonst noch die Regelung einbauen?!?!
Ich denke ein PI-Regler sollte reichen, jedoch ist mir nicht ganz klar wie ich ihn noch aufbauen kann mit einem Mikrocontroller..
Danke schonmal für eure Hilfe!
Habe folgendes Problem:
Möchte eine Temperaturregelung implementieren, bei der der angeschlossene Lüfter über PWM gesteuert wird. "Manuell" den Lüfter über PWM zu steuern funktioniert auch einwandfrei (habe schon "ausgelotet", welche Frequenz und welche minimal Pulsbreite möglich ist,etc. also alles schon OK), auch habe ich eine Temperaturmessung schon "integriert", zudem habe ich auch Grundkenntnisse der Regelungstechnik.
Habe mich jetzt mal an den Artikel hier auf Robotornetz gehalten, und erstmal ein kleines Programm geschrieben zur "Simulation":
Hier mal das Programm soweit:
$regfile = "m8def.dat"
$crystal = 3686400
Config Pinb.1 = Output
Config Pinb.2 = Output
Dim Esum As Single
Dim E As Single
Dim Kp As Single
Dim Ki As Single
Dim Ta As Single
Dim X As Word
Dim Y As Single
Dim Z As Single
Dim W As Single
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Adc = Single , Prescaler = Auto , Reference = Internal
Do
W = -25 'Sollwert = -25°
Kp = 18 'Aus Beitrag übernommen
Ki = 60 'Aus Beitrag übernommen
Ta = 0.01 ' Aus Beitrag übernommen
X = Getadc(0) 'Istwert Einlesen
E = W - X 'Vergleich (Regelabweichung)
Esum = Esum + E 'Integration I-Anteil
If Esum < -400 Then
Esum = -400
End If 'Begrenzung I -anteil
If Esum > 400 Then
Esum = 400
End If
Y = Kp * E
Z = 0.6 * Esum
Y = Y + Z
'Reglergleichung
If Y < 0 Then
Y = 0 'Begrenzung Stellgröße
End If
If Y > 255 Then
Y = 255
End If
Pwm1a = Y 'Einfach mal so "fiktiv" gesetzt
Cls
Upperline
Lcd "Y: " ; Y ; "X: " ; X 'Displayausgabe der Werte zur Kontrolle
Lowerline
Lcd "E: " ; E
Loop
So, wenn ich jetzt mal am ADC0 "drehe", bleibt Y immer auf Null!!
Woran liegt das?!?!
Wie kann ich sonst noch die Regelung einbauen?!?!
Ich denke ein PI-Regler sollte reichen, jedoch ist mir nicht ganz klar wie ich ihn noch aufbauen kann mit einem Mikrocontroller..
Danke schonmal für eure Hilfe!