Forum: Mikrocontroller und Digitale Elektronik PID Regler Skalierung


von Bernd (Gast)


Lesenswert?

Hallo!

Ich benutze den Code vom AVR221 Beispiel. Mir geht es aber nicht um den 
Regelalgorithmus selbst, sondern eher um die Skalierung auf meinen 
gewünschten Stellwert.

Beschreibung:

Eine Konstantstromquelle wird über eine PWM eingestellt.
Wobei der Wert 2806 der Maximalwert ist(entspricht 400mA, aber nur 78% 
der PWM). Ein Temperatursensor liefert mir den aktuellen Temperaturwert 
in Grad C. Mein Grenzwert(Sollwert) ist auf 85 GradC eingestellt. Ich 
möchte nun, dass die Konstantstromquelle bis 60 GradC mit dem maximalen 
Strom läuft und dann pro Grad in ca. 10mA-Schritten(entspricht ca. einer 
2% Verminderung der PWM) fällt und bei >=85GradC nur mehr 200mA hat.

Wenn ich nun eine einfache Proportionalregelung verwende, wie muss ich 
die Skalierung vornehmen damit ich vernünftige PWM-Werte erziele?

Mein maxError ist auf 25 eingestellt, damit der Regler erst bei einer 
Temperatur von 60 GradC anfängt zu regeln. Der Faktor P_Factor ist auf 
0,5 eingestellt.

Mir ist nicht ganz klar wie mit welchen Faktor x ich (P_Factor  error  
x) multiplizieren muss um ein p_term zu bekommen was meiner PWM 
entspricht.

Bsp.: bei 60GradC

error  = 85 - 60 = 25
p_term = 0,5 * 25 = 12,5 um nun den PWM Wert 2734 für 76% zu erhalten 
muss p_term mit 218 multipliziert werden.

bei 61GradC
error  = 85 - 61 = 24
p_term = 0,5 * 24 = 12 um nun den PWM Wert 2662 für 74% zu erhalten muss 
p_term mit 221 multipliziert werden usw.

Wie realisiere ich das am besten?
Ich kann doch nicht für jedes GradC mit if Abfragen den richtigen Faktor 
suchen. Es geht sicher noch einfacher...
1
  error = setpoint - process_val;
2
3
  /* Calculate Pterm and limit error overflow */
4
  if (error > pid_st->maxError) {
5
    p_term = 2880;
6
  } else if (error < -pid_st->maxError) {
7
    p_term = -MAX_INT;
8
  } else {
9
    p_term = pid_st->P_Factor * error * ???

Bitte um einwenig Hilfestellung...

lg

von oha (Gast)


Lesenswert?

Das wuere bedingen eine  Wet zu haben, der Strom in Temperatur 
umrechnet. Haben wir aber nicht. Daher. Probieren. Deshalb sollte man 
einem Regler mit einer logginh funktionalitaet ausruesten, sodass man 
ein paar Versuche Fahren kann.
Fuer so ne Heiszung sollte man den PID erweitern. Naemlich um einen 
Term, der die Differenz der Solltemperatur zur Umgebungstemperatur 
multipliziert mit einer Variablem ausmacht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.