Redundant thermistor and thermal runaway protected

Is smoothieboard support redundant thermistor ?
Is there any thermal runway protect mechanism ? I think this is very important for everyone who can’t always keep an eye on 3DP all the time.
There is an very easy protect mechanism for a loosen thermistor:
If the system cannot reach the target temperature at a defined time( maybe 180 second), smoothieboard should turn off the heater.

Imported from wikidot

Hi there !

Smoothie will shut down if the thermistor gets disconnected, that’s implemented.
I think redundant thermistor and the delay thing are not really necessary considering we already have protection, but if you want to add those features, I guess more safety is better …

Cheers !

Thermistor sometimes is not only disconnected but only defected and keep in wrong resistance and makes system keep heating up. It is better to have a timeout to protect this.
Safety is my priority one.
ErikZalm Marlin has this done. You could refer it. Thanks a lot.

Are you interested in adding this to the firmware ? If so I can guide/help you.

Sure, I’m interesting in this. Please help, thanks a lot.

Hey.

You can contact me at wolf.arthur@gmail.com, and we can work on this.

Cheers :slight_smile:

Any updates on this?
I find this very important, and I able to code it, but I think this should be built in. No runaway heaters.

Their are cases where the thermometer becomes dislodged from the hotend, so reporting wrong temperature.

A simple timer might fix it. If the printer on constantly for over a set time (Like 15 minutes for hotend, or 30 minutes for heatbed). Shut down every thing.

Took a look at the code. Line 470 TemperatureControl.cpp

Just need to add a timer here most likely. Here is some sudo code

TemperatureControl.h
Timer TimerA //Or Tick count
bool startedMaxPwmTimer
TemperatureControl.cpp
    if (this->o >= heater_pin.max_pwm())
    {
        this->o = heater_pin.max_pwm();
        if(!startedMaxPwmTimer)
        {
             timerA.Reset;
             timerA.Start;
            startedMaxPwmTimer = true;
        }
        else
        {
              if(TimerA > MaxTime)
                  KillAll();
        }
}
else if (this->o < 0)
    this->o = 0;
    startedMaxPwmTimer = false;
    timerA.Stop;
else if(this->windup)
    this->iTerm = new_I; // Only update I term when output is not saturated.
    startedMaxPwmTimer = false;
     timerA.Stop;</code>