Hallo nochmal,
es ist jetzt einige Zeit vergangen, aber ich habe die Zeit genutzt um mich ein bisschen einzuarbeiten und meinen ersten Sketch zu schreiben. Das Auslesen der Thermistoren scheint schon ganz gut zu klappen, wenngleich ich es nur rudimentär mit fixen Widerständen prüfen konnte, da die Thermistoren erst die Woche bei mir eintrudeln...
Der Sketch ist noch nicht ganz fertig. Es soll noch ein zweiter Sensor rein und eine Möglichkeit mittels Potentiometer den Sollwert vorzugeben, aber das denke ich krieg ich gebacken. Woran ich grade etwas zu knabbern habe ist meine Regelung

. Aber zunächst der Reihe nach noch mal die Fakten:
Was soll rauskommen:
Eine (PID ?) Regelung einer Heizplatte (12V)...
Dabei handelt es sich um die folgende:
HEATBEDBisher habe ich den folgenden Sketch, welcher an der ein oder anderen Stelle sicherlich noch nicht ganz sauber geschrieben ist:
///////////////////////////////
//////// Declaration //////////
///////////////////////////////
// Loading config- File
#include "config.h"
// Loading Thermistor read function
#include "get_thermistor_temp.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12,13);
///////////////////////////////
//////////// Setup ////////////
///////////////////////////////
void setup()
{
Serial.begin(9600);
Serial.println("Starting Controlling");
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Starting Controlling");
}
///////////////////////////////
//////////// Loop /////////////
///////////////////////////////
long T_set=0;
void loop()
{
// TEMPERARATUR 1
int T1=get_thermistor_temp(THERMISTOR1_TYPE, THERMISTOR1_PIN);
// Serial Input Controller Temperature
if(Serial.available()){
T_set=Serial.parseInt();
}
// Seriell Output
Serial.print("TEMP 1 = ");
Serial.print(T1);
Serial.println(" C");
Serial.print("SET_TEMP = ");
Serial.print(T_set);
Serial.println(" C");
// LCD OUTPUT
lcd.setCursor(0,0);
lcd.clear();
lcd.print("T1: ");
lcd.print(T1);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("T2: ");
//lcd.print(T2); // comming soon
lcd.print(" C");
delay(1000);
lcd.setCursor(0,0);
lcd.clear();
lcd.print("T_set: ");
lcd.print(T_set);
lcd.print(" C");
if (T_set-T1 > 2){
lcd.setCursor(0,1);
lcd.print("HEATING");
}
delay(1000);
}
// CONFIG_ FILE
// Define Thermistor Pins: (max.:2)
#define NUM_THERMISTOR 1
#define THERMISTOR1_PIN 0
//#define THERMISTOR2_PIN 1
// Define Thermocpuple Pins: (max.:2)
#define NUM_THERMOCOUPLE 0
//#define THERMOCOUPLE1_PIN 1
//#define THERMOCOUPLE1_PIN 1
//Define Theristor Typ:
// 1: Epcos 100K Thermistor
#define THERMISTOR1_TYPE 1
//#define THERMISTOR2_TYPE 1
//Define Thermocouple Typ:
// 1: ...
//#define THERMOCOUPLE1_TYPE 1
//#define THERMOCOUPLE2_TYPE 1
//PID
#define K_P 7
#define K_I 2
#define K_D 40
// Input: Type, Voltage; Output: Temperature
int get_thermistor_temp(int type, int pin) {
/////////////////////////
/// Temperauture Table///
////////////////////////
// TYPE 1: EPCOS 100K
int steps_THMI_type1 = 20;
short temptable_THMI_type1[steps_THMI_type1][2] = {
{1, 841},
{54, 255},
{107, 209},
{160, 184},
{213, 166},
{266, 153},
{319, 142},
{372, 132},
{425, 124},
{478, 116},
{531, 108},
{584, 101},
{637, 93},
{690, 86},
{743, 78},
{796, 70},
{849, 61},
{902, 50},
{955, 34},
{1008, 3}
};
// TYPE 2: ...
////////////////////
/// Interpolation///
////////////////////
int rawtemp = analogRead(pin);
switch (type) {
case 1: {
int i;
for (i = 1; i<steps_THMI_type1; i++){
if (temptable_THMI_type1[i][0] > rawtemp){
int realtemp =temptable_THMI_type1[i - 1][1] + (rawtemp - temptable_THMI_type1[i - 1][0]) * (temptable_THMI_type1[i][1] - temptable_THMI_type1[i - 1][1]) / (temptable_THMI_type1[i][0] - temptable_THMI_type1[i - 1][0]);
if (realtemp > 255){
realtemp = 255;
}
return realtemp;
break;
}
}
break;
}
case 2: {
break;
}
default: {
break;
}
}
}
Ich möchte als nächsten Schritt eine PID- Reglung einbauen. Die P,I und D- Glieder habe ich bereits als Anfangswerte. Als Solltemperatur ist T_set und als Isttemperatur T1 vorerst vorgesehen.
Nun zu den Unklarheiten:
- zunächst zur Verkabelung: Es ist bereits das Wort MOFSET gefallen, aber leider habe ich keinen FET da- kann ich für den Zweck auch einen normalen NTC nutzen?
- Ich bin in der PID- Libaray zwangsläufig auch auf diese Funktion gestoßen:
PID(&Input, &Output, &Setpoint, Kp, Ki, Kd, Direction)
Kp, Ki und Kd sind mir noch ein Begriff, Setpoint wird wohl meine Zieltemperatur T_set sein, und INPUT meine Isttemperatur T1? Direction hätte ich auf DIRECT gesetzt... Ist das so korrekt?
- Wie funktioniert das mit dem Output. Muss ich da einen PWM definieren der an den MOFSET drangeklemmt wird und was muss ich dabei beachten...
Ich hoffe das ist nicht zu schwammig und der Sketch nicht zu grusilig...
DANKE für die viele Hilfe bisher!!!