Haltepunkt automatisch erkennen!..

Hallo ,

Ich hab mal einen Temperaturregler gefertigt. Und zwar als Hysterese. Die Temperaturschwelle wird dann gegeben z.B 1500°C und die Leistungsschwelle 150W wenn die Temperatur 1800°C überschreitet, erniedrigt sich die Leistung um 20% von 150W. wenn die Temperatur zu weniger als 1200°C kommt, erhöht sich die Leistung um 20%.

-> nun möchte ich vom gleichen Programm folgendes kriegen:

wenn die Temperatur weniger als 500°C, muss die Leistung bei 0W sein (ausgeschaltet). anderes: wenn der Laserkopf nicht mehr auf den Material fährt/wirkt, dann erniedrigt sich die Temperatur und muss somit Laser ausgeschaltet werden. und wenn der Laserkopf wieder auf den Material wirkt, muss Laser eingeschaltet werden.

hat jd eine Idee? muss z.B ein Sensor im Laserkopf eingebaut werden? wenn ja wie kann er mit dem Schaltblock verbunden wird? wenn es eine Zeichnung nötig um die Frage besser zu verstehen, werde ich die gerne hochladen.

Danke im Vorab VG

Wenn du weisst, wie du Temperaturen im Bereich 100 .. 2000 °C messen kannst. Und wenn du weisst, wie du die 4 Stufen (0, 80, 100, 120 %) von 150 W (?) schalten kannst. Wenn es kein Problem ist, wie der Sensor erstmal auf über 500 °C kommt, obwohl das Ding noch aus ist.

Der Rest ist ein Klacks.

LaserZ: hat jd eine Idee?

Ja, beschreibe das, was Du machst so, dass einer wie ich es versteht. Wie man einen Temperaturregler als „Hysterese“ fertigt, ist mir ein Rätsel.

Michael scheint da weniger Probleme zu haben als ich.

Gruß

Gregor

Michael scheint da weniger Probleme zu haben als ich

Na, wo ich die Probleme sehe, habe ich auch beschrieben.
Wenn das keine sind, kriegst du das mit den 4 Schaltstufen und der Hysterese auch gebacken. :wink:
Das wäre ein 10-Zeilen Sketch oder so …
Schreib den mal, und dann sehen wir weiter, wenn du genau erzählst, was wie anders läuft als gedacht.

Genauer:

→ nun möchte ich vom gleichen Programm folgendes kriegen:
wenn die Temperatur weniger als 500°C, muss die Leistung bei 0W sein (ausgeschaltet).

Das erweitert deinen vorhandenen Hystere-Sketch um eine weitere Bedingung.
Werden also aus 8 Zeilen 10. oder so …

Danke erstmal für die Antworten.
Ich mach mal die Frage einfacher bzw. deutlicher mit einem Beispiel und zwar:

double Setpoint, Watt_min = 100 ,Watt_max = 150; // (Setpoint= Temperaturschwelle z.B 1000°C, Watt-min= minimale Leistung)
[void loop()
if (Input >= Setpoint + 200) // (Input= die während der Bearbeitung erreichende Temperatur)
{
Watt_min -= Watt_min*(20/100);
Watt_max -= Watt_max*(20/100);
else if (Input <= Setpoint - 200)
{
Watt_min += Watt_min*(20/100);
Watt_max += Watt_max*(20/100);]
somit wackelt sich die Temperatur zwischen 800°C und 1200°C und die minimale Leistung zwischen 80 und 120W.

mein nächstes Ziel ist es unbedingt mit dem gleichen Programm (ansonsten ist es ganz leicht das Ziel mit einem separaten Programm zu erreichen)
wenn die Temperatur (Input) <= Setpoint - 400 muss Watt_min= 0. (im Bild punkt 2, auch 4)

nach punkt 2 wird sowohl die Leistung als auch die Temperatur = 0.
nächster Schritt ist, wie kann es denn programmiert werden, sodass die Leistung im punkt 3 (Bild) wieder auf den definierten Watt_min = 100 erhöht wird???

Ich glaube somit ist die Frage sonnenklar.

Danke im Vorab
VG

Funktioniert das, was du da programmiert hast? Wenn die Temperatur 1200 erreicht, verringerst du die Leistung um 20%. Beim nächsten Durchlauf durch loop (also wenige Mikrosekunden später), ist die Temperatur wahrscheinlich immer noch über 1200, und du verringerst die Leistung wieder um 20% usw. Die Leistung geht damit schlagartig auf 0. Du brauchst erst mal ein Konzept für eine "state machine" (im Deutschen oft ganz bescheuert "endlicher Automat" genannt), google mal... Jeder deiner relevanten Temperaturbereiche ist ein "Zustand". Für jeden Zustand hast du eine gewünschte Heizleistung etc. BTW aus deinem Bild werde ich nicht schlau, ist aber vielleicht nur mein Problem :-) BTW für das was du machst, brauchst du auf keinen Fall den Datentyp float

@ Michael: kannst mal ein Beispiel über die Hystere-Sketch Erweiterung geben bzw. die weitere Bedingung, die du gemeint hast nennen!

Danke olf2012, Ich such mal nach. es funktioniert einwandfrei. Mit dem System, womit ich arbeite ist es "unmöglich" die Temperatur z.B bei 1000°C zu halten. da sie sich in Millisikunden von 0°C zu 1000°C erhöht. und zwar in Abhängigkeit von der Leistung, deswegen ist es nötig die Temperaturschwelle in einem Bereich von z.B +-200 °C zu begrenzen. und das ist ausreichend für die Aufgabe.

Hallo,
" in einem Bereich von z.B ±200 °C zu begrenzen"

Also einen TemperaturUnterschied von 400 °C ?

if ((Temperatur > TemperaturEingestellt +200) || (Temperatur < TemperaturEingestellt -200))
{
mach was richtiges
}

So etwa?
Gruß und Spaß
Andreaas

sich in Millisikunden von 0°C zu 1000°C erhöht

Kannst du solche Temperaturen so schnell messen? Toll !
Wie du deinen 200W Laser steuerst, scheint für dich ja auch kein Problem zu sein…

Hier also “der Klacks” (na gut, komplett kompilierfähig etwas mehr als 12 Zeilen :wink: )

uint16_t getTemp() { return 1000; } // TODO: Dummy
void doOutput(byte percent){}  // TODO: Dummy

bool startPhase = true;  // Laser an, selbst wenn Temperatur < 500
enum {T_LOW, T_NORMAL, T_HIGH} state;

void setup() {}

void loop() {
  unsigned int temp = getTemp(); // liefert einen Wert 0 ... 2000 als ca. °C
  if (temp < 500 && !startPhase) { 
     doOutput(0);  //  aus! Kommt aus diesem Zustand nur per Reset raus,
                   // oder wenn die Temperatur sonstwie erreicht wird ?
     return;
  }
  if (temp > 500) startPhase = false;
   
  if (temp > 1200) state = T_HIGH;
  else if (temp < 800) state = T_LOW;
  else if ( temp > 1000 && state == T_LOW) state = T_NORMAL;
  else if ( temp < 1000 && state == T_HIGH) state = T_NORMAL;
  // else Hysterese, state bleibt unverändert

  switch (state) {
    case T_LOW:     doOutput(120); break;  // setPoint in %
    case T_NORMAL:  doOutput(100); break;
    case T_HIGH:    doOutput( 80); break;
  }
}

Das ist jedenfalls eine Hyterese-Regelung mit doppelter Hysterese zwischen 800 und 1000 und zwischen 1000 und 1200 und mit Zwangsabschaltung unter 500.
Wie gesagt, ob das funktioniert kann ich nicht abschätzen, aber der Sketch selbst ist ein Klacks…

Danke euch Beide.

Die Temperatur wird mit einem professionellen Pyrometer aufgenommen und direkt in PyroProgramm angezeigt. Die Leistung kann beliebig per CNC Steuerung gesteuert. Ich werde es nächste Woche probieren und dann sag ich mal Bescheid.

VG