Hallo zusammen,
ich möchte für die Temperatursteuerung meiner Regelstrecke
"Peltier-Element-Aluminiumblock" eine einfache state machine
programmieren, damit sauber geregelt werden kann. Die Arbeitsweise soll
folgendermaßen von statten gehen: Wenn ich z. B. 40° C mit dem Encoder
als Solltemperatur einstelle, so soll geheizt werden. Dazu wird der
entsprechende Port des Arduino-Motor-Shield auf LOW oder HIGH gesetzt.
Als Regler verwende ich den Arduino-PID, dessen Ausgang dann als Input
in die H-Brücke (Motor-Shield) führt. Wird nun die Solltemperatur z. B.
auf 20° C heruntergesetzt, so sollen die 20° C Temperaturdifferenz durch
Umpolung der H-Brücke ausgeglichen werden. Die Umpolung soll ebenfalls
aktiviert werden, wenn die Solltemperatur unterhalb der Raumtemperatur
liegt. Dabei soll stets durch den PID geregelt werden.
Habe mir schon ein Programmgerüst gemacht nur ist mir nicht ganz klar,
ob ich Timer benötige und wie ich diese einbaue. Würde das so
funktionieren, wie ich das programmiert habe?
Danke schon mal im Voraus
Gruß
1 | switch (state) {
|
2 |
|
3 | case 0: // temperatur im Sollbereich
|
4 | if (temperature > (Solltemperatur + abweichung))
|
5 | {
|
6 | //Reglerparameter evtl. ändern;
|
7 | digitalWrite(12, LOW); //Umpolung auf Kühlen setzen;
|
8 | state = 1;
|
9 | }
|
10 | else if (temperature < (Solltemperatur - abweichung))
|
11 | {
|
12 | //Reglerparameter evtl. anpassen;
|
13 | digitalWrite(12, HIGH); //Umpolung auf Heizung setzen;
|
14 | state = 2;
|
15 | }
|
16 |
|
17 | break;
|
18 |
|
19 | case 1: // Kühlen
|
20 | if (temperature <= Solltemperatur )
|
21 | {
|
22 | state = 0;
|
23 | }
|
24 | break;
|
25 |
|
26 | case 2: //Heizen
|
27 | if (temperature >= Solltemperatur )
|
28 | {
|
29 | state = 0;
|
30 | break;
|
31 | }
|
32 |
|
33 | Input = temperature;
|
34 | Setpoint = Solltemperatur;
|
35 | myPID.Compute(); //Berechnung des Reglerausgangs
|
36 | analogWrite(3,Output); //Lege das Ergebnis auf PWM-Port 3
|
37 |
|
38 | }
|