Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thermistors malfunction tests results #2066

Closed
clefranc opened this issue May 12, 2015 · 72 comments
Closed

Thermistors malfunction tests results #2066

clefranc opened this issue May 12, 2015 · 72 comments
Labels

Comments

@clefranc
Copy link
Contributor

Here are the bed and hotend thermistors malfunction tests results.

Tests done using full thermal protection.

Please report errors, omissions, ask for more tests or information about results here.

EDIT 2015-05-13 - Added PR #2067 test
EDIT 2015-05-14 - Added PR #2077 bed test, will do hotend later
EDIT 2015-05-15 - Added PR #2077 hotend test
EDIT 2015-05-19 - Added PR #2115 bed test, will do hotend later
EDIT 2015-05-20 - Redo PR #2115 (right branch) for Test 8
EDIT 2015-05-22 - Added PR #2142 for Test 1,2,7 & 8
EDIT 2015-05-26 - Added PR #2164 for Test 8,10,12 & 14
EDIT 2015-06-03 - Added PR #2231 for Test 1, 2, 3, 4, 5, 6, 8 & 14

New addition in italic.

TEST 1 - Bed's thermistor disconnected before startup

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 0°C current temperature at startup and the _Err: MINTEMP BED_is displayed on the LCD.

Host:

  • The bed doesn't appears in the Manual Control tab!
  • Sending a M140 S100 don't sets the bed's target temperature to 100°C on the LCD...
  • The bed is not heating...
  • No warning or error displays on the console.
  • The LCD status message shows _Err: MINTEMP BED__..._
  • The serial console shows _Error:MINTEMP triggered, system stopped! Heater_ID: bed__..._
  • The serial console shows _Error:Printer halted. kill() called!__._

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed target temperature to 100°C on the LCD...
  • Idem to host
  • The LCD controls are freezed.

Conclusion:
When the bed's thermistor is disconnected before startup, the bed's current temperature displayed on the LCD is always 0°C and a _MINTEMP BED_ error is displayed both on the LCD and serial console. When sending M140 command, or using LCD preheat, the bed's target temperature displayed on the LCD is 100°C. The bed is not heating and there is no warning or error displayed. After reconnecting the bed's thermistor, a thermal jump error is displayed both on the LCD and serial console. The board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 2 - Bed's thermistor disconnected before startup AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 25°C current temperature at startup.

Host:

  • Sending a M140 S100 sets the bed's target temperature to 100°C on the LCD...
  • The bed starts heating...
  • The bed's current temperature stays at 25°C...
  • The bed continues to heat indefinitely...
  • The bed's thermistor is reconnected...
  • The bed's current temperature is displayed...
  • The bed's target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows _Err: THERMAL JUMP__..._
  • The serial console shows _Error:Thermal jump, system stopped! Heater_ID: bed__..._
  • The serial console shows _Error:Printer halted. kill() called!__._

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed target temperature to 100°C on the LCD...
  • Idem to host.

Conclusion:
When the bed's thermistor is disconnected before startup AND thermistor table begins at 25°C, the bed's current temperature displayed on the LCD is always 25°C. When sending M140 command, or using LCD preheat, the bed's target temperature displayed on the LCD is 100°C. The bed will heat indefinitely, or stops when proper command sent. After reconnecting the bed's thermistor, the bed stops heating and a thermal jump error is displayed both on the LCD and serial console. The board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: HIGH


TEST 3 - Bed's thermistor disconnected after heating begins

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 25°C current temperature at startup.

Host:

  • Sending a M140 S100 sets the bed's target temperature to 100°C on the LCD...
  • The bed starts heating...
  • The bed's thermistor is disconnected...
  • The bed's current temperature freezes...
  • The bed's target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows _Err: THERMAL JUMP__..._
  • The serial console shows _Error:Thermal jump, system stopped! Heater_ID: bed__..._
  • The serial console shows _Error:Printer halted. kill() called!__._

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed target temperature to 100°C on the LCD...
  • Idem to host
  • The LCD controls are freezed.

Conclusion:
When the bed's thermistor is disconnected after heating begins, the bed's current temperature displayed on the LCD freezes at the current temperature and its target temperature drops to 0°C. The bed stops heating and a thermal jump error is displayed both on the LCD and serial console. The board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 4 - Bed's thermistor disconnected after heating begins AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 25°C current temperature at startup.

Host:

  • Sending a M140 S100 sets the bed's target temperature to 100°C on the LCD...
  • The bed starts heating and current temperature rises...
  • The bed's thermistor is disconnected...
  • The bed's current temperature drops to 25°C...
  • The bed's target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows Err: THERMAL JUMP...
  • The serial console shows Error:Thermal jump, system stopped! Heater_ID: bed...
  • The serial console shows Error:Printer halted. kill() called!.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed target temperature to 100°C on the LCD...
  • Idem to host.

Conclusion:
When the bed's thermistor is disconnected after heating begins AND thermistor table begins at 25°C, the bed's current temperature displayed on the LCD drops to 25°C and its target temperature drops to 0°C. The bed stops heating and a thermal jump error is displayed both on the LCD and serial console. After reconnecting the bed's thermistor, the board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 5 - Bed's thermistor disconnected after target temperature reached

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 25°C current temperature at startup.

Host:

  • Sending a M190 S100 sets the bed's target temperature to 100°C on the LCD...
  • The LCD status message shows Bed Heating.
  • The bed starts heating...
  • The bed's current temperature reaches 100°C...
  • The LCD status message shows Bed done.
  • The bed's thermistor is disconnected...
  • The bed's current temperature drops and freezes to a random value...
  • The bed's target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows _Err: THERMAL JUMP__..._
  • The serial console shows _Error:Thermal jump, system stopped! Heater_ID: bed__..._
  • The serial console shows _Error:Printer halted. kill() called!__._

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed target temperature to 100°C on the LCD...
  • Idem to host.

Conclusion:
When the bed's thermistor is disconnected after target temperature is reached, the bed's current temperature drops to a random value and its target temperature drops to 0°C. The bed heating stops immediately and ~~a MINTEMP BED error is displayed both on the LCD and serial console a _thermal jump error_ is displayed both on the LCD and serial console. After reconnecting the bed's thermistor, the board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 6 - Bed's thermistor disconnected after target temperature reached AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142, #2231

The bed shows 25°C current temperature at startup.

Host:

  • Sending a M190 S100 sets the bed's target temperature to 100°C on the LCD...
  • The LCD status message shows Bed Heating....
  • The bed starts heating and current temperature rises...
  • The bed's current temperature reaches 100°C...
  • The LCD status message shows Bed done....
  • The bed's thermistor is disconnected...
  • The bed’s current temperature drops to 25°C...
  • The bed’s target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows Err: THERMAL JUMP...
  • The serial console shows Error:Thermal jump, system stopped! Heater_ID: bed...
  • The serial console shows Error:Printer halted. kill() called!.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS Bed set the bed's target temperature to 100°C on the LCD...
  • Idem to host.

Conclusion:
When the bed's thermistor is disconnected after target temperature is reached AND thermistor table begins at 25°C, the current temperature displayed on the LCD drops to 25°C. The bed stops heating and a thermal jump error is displayed both on the LCD and serial console. After reconnecting the bed's thermistor, the board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 7 - Hotend's thermistor disconnected before startup

PR : #2055, #2067, #2077, #2142

The hotend #1 shows 0°C current temperature at startup, hotend #2 shows 25°C. The LCD status message shows Err: MINTEMP. The hotend #1 is used for LCD preheat tests purpose.

The REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER doesn't start. The serial console is full of

_Error:MINTEMP triggered, system stopped! Heater_ID: 0_
_20:09:26.154 : Error:Printer halted. kill() called!_

Host:

  • Sending a M104 S240 don’t sets the hotend's target temperature to 240°C on the LCD...
  • The hotend’s target temperature stays at 0°C…
  • The hotend’s current temperature stays at 0°C…
  • The hotend is not heating...

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 don’t set the hotend's target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS All don’t set the hotends target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

Conclusion:
When the hotend's thermistor is disconnected before startup, the LCD is blank and MINTEMP error is displayed indefinitely in the serial console. the hotend's current temperature displayed on the LCD is always 0°C. When sending M104 command, or using LCD preheat, the hotend will not heat. New hotend’s target temperature and heating operates normally after the thermistor reconnection. The LCD status message shows Err: MINTEMP even after the hotend’s thermistor is reconnected or new commands sent.

THERMAL RUNAWAY RISK: none + bug


TEST 8 - Hotend's thermistor disconnected before startup AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2115, #2142, #2231

The hotend_s_ shows 25°C current temperature at startup. The hotend #1 is used for LCD preheat tests purpose.

Host:

  • Sending a M104 S240 sets the hotend's target temperature to 240°C on the LCD...

  • The hotend starts heating...

  • Hotend's current temperature stays at 25°C...

  • The hotend's target temperature drops to 0°C after the 16 seconds mark...

  • The hotend stops heating...

  • The LCD status message shows:

    Heating failed
    * The host displays:

    Error:Heating failed, system stopped! Heater_ID: 0
    Error:Printer halted. kill() called!
    * The board needs to be reset to accept new commands.

  • The hotend heats indefinitely...

  • The hotend's thermistor is reconnected...

  • The hotend's current temperature is displayed...

  • The hotend's target temperature drops to 0°C...

  • The bed stops heating immediately...

  • The LCD status message shows _Err: THERMAL JUMP__..._

  • The serial console shows _Error:Thermal jump, system stopped! Heater_ID: bed__..._

  • The serial console shows _Error:Printer halted. kill() called!__._

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 or Preheat ABS 2 set the hotend's target temperature to 240°C and bed's at 100°C...
  • Ident to host.

_LCD:_

  • Going to the Prepare/Preaheat ABS/Preheat ABS All set the hotend's target temperature to 240°C and bed's at 100°C...
  • Idem to host.

Conclusion:
When the hotend's thermistor is disconnected before startup AND thermistor table begins at 25°C, the hotend's current temperature displayed on the LCD is always 25°C. When sending M104 command, or using LCD Preheat ABS 1 or LCD Preheat ABS 2, the hotend will heat indefinitely until 16 seconds elapsed then all heaters are shutdown properly. The LCD status message Heating failed is then displayed. The board needs to be reset to continue normal operation.
When using the LCD Preheat ABS All after a reset and before 16 seconds, none of the heaters are heating. The board freezes or reset itself.

THERMAL RUNAWAY RISK: HIGH


TEST 9 - Hotend's thermistor disconnected after heating begins AND before 16 seconds elapsed

PR : #2055, #2067, #2077, #2142

The hotend shows 25°C current temperature at startup.

Host:

  • Sending a M104 S240 sets the hotend's target temperature to 240°C on the LCD...
  • The hotend starts heating...
  • The hotend’s current temperature rises…
  • The hotend’s thermistor is disconnected before 16 seconds mark…
  • The hotend stops heating immediately...
  • The LCD status message shows Err: MINTEMP.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 don’t set the hotend's target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS All don’t set the hotends target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

Conclusion:
When the hotend's thermistor is disconnected after heating begins AND before 16 seconds elapsed, the hotend's current temperature displayed on the LCD drops to 0°C and the hotend’s stops heating. New hotend’s target temperature and heating operates normally after the thermistor reconnection. The LCD status message shows Err: MINTEMP even after the hotend’s thermistor is reconnected or new commands sent.

THERMAL RUNAWAY RISK: none


TEST 10 - Hotend's thermistor disconnected after heating begins AND before 16 seconds elapsed AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142

The hotend_s_ shows 25°C current temperature at startup. The hotend #1 is used for LCD preheat tests purpose.

Host:

  • Sending a M104 S240 sets the hotend's target temperature to 240°C on the LCD...
  • The hotend starts heating and current temperature rises...
  • The hotend's thermistor is disconnected before 16 seconds elapsed...
  • The hotend's current temperature drops to 25°C...
  • The hotend's target temperature is set to 0°C at the 16 seconds mark...
  • The hotend stops heating...
  • The LCD status message shows Heating failed...
  • The bed accepts only new host target temperature command if a hotend one is issued first...
  • The hotend and bed accepts new host/LCD target temperature command and heats for 16 seconds.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 set the hotend's target temperature to 240°C and bed's to 100°C on the LCD...
  • The hotend and bed starts heating...
  • The hotend's thermistor is disconnected before 16 seconds elapsed...
  • The hotend's current temperature drops to 25°C...
  • The hotend and bed target temperature drops to 0°C at the 16 seconds mark...
  • The hotend and bed stops heating (cooling fan still on)...
  • The LCD status message shows Heating failed...
  • The bed accepts only new host target temperature command if a hotend one is issued first...
  • The hotend and bed accepts new host/LCD target temperature command and heats for 16 seconds.

_LCD:_

Conclusion:
When the hotend's thermistor is disconnected after heating begins AND before 16 seconds elapsed AND thermistor table begins at 25°C, the hotend's current temperature displayed on the LCD drops to 25°C. The hotend and bed stops heating at the 16 seconds mark. The LCD status message Heating failed is then displayed. The board can continue operation normally. When using the LCD Preheat ABS All, the faulted hotend's thermistor keeps its heater on indefinitely while the other hotend and bed reaches their target temperature. There is no warning or error displayed on both the LCD and the console.

THERMAL RUNAWAY RISK: none HIGH


TEST 11 - Hotend's thermistor disconnected after heating begins AND after 16 seconds elapsed

PR : #2055, #2067, #2077, #2142

The hotend shows 25°C current temperature at startup.

Host:

  • Sending a M104 S240 sets the hotend's target temperature to 240°C on the LCD...
  • The hotend starts heating and current temperature rises...
  • The hotend’s thermistor is disconnected after 16 seconds mark…
  • The hotend stops heating immediately...
  • The LCD status message shows Err: MINTEMP.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 don’t set the hotend's target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS All don’t set the hotends target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

Conclusion:
When the hotend's thermistor is disconnected after heating begins AND after 16 seconds elapsed, the hotend's current temperature displayed on the LCD drops to 0°C and the hotend’s stops heating. New hotend’s target temperature and heating operates normally after the thermistor reconnection. The LCD status message shows Err: MINTEMP even after the hotend’s thermistor is reconnected or new commands sent.

THERMAL RUNAWAY RISK: none


TEST 12 - Hotend's thermistor disconnected after heating begins AND after 16 seconds elapsed AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142

The hotend_s_ shows 25°C current temperature at startup. The hotend #1 is used for LCD preheat tests purpose.

Host:

  • Sending a M104 S240 set the hotend's target temperature to 240°C on the LCD...
  • The hotend starts heating and current temperature rises...
  • The hotend's thermistor is disconnected after 16 seconds elapsed...
  • The hotend's current temperature drops to 25°C...
  • The hotend continues heating...
  • After 16 seconds, hotend stops heating...
  • The hotend stops heating...
  • The LCD status message shows Heating failed
  • The LCD status message shows _Err: THERMAL JUMP_ ...
  • The hotend and bed don't accept new host target temperature command...
  • The hotend and bed accepts new LCD target temperature command but don't heat.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 set the hotend's target temperature to 240°C and bed's to 100°C on the LCD...
  • Idem to host.
  • The hotend and bed starts heating...
  • The hotend's thermistor is disconnected after 16 seconds elapsed...
  • The hotend's current temperature drops to 25°C...
  • All heaters stops heating...
  • The hotend and bed target temperature drops to 0°C...
  • Cooling fan still on...
  • The LCD status message shows _Err: THERMAL JUMP_ ...
  • The hotend and bed don't accept new host target temperature command...
  • The hotend and bed accepts new LCD target temperature command but don't heat.

_LCD:_

  • Going to the Prepare/Preaheat ABS/Preheat ABS All set the hotend's target temperature to 240°C and bed's at 100°C...
  • The hotends and bed starts heating...
  • The hotend Move distance shouldn't include E when XYZ are moving. #1 thermistor is disconnected after 16 seconds elapsed...
  • The hotend Move distance shouldn't include E when XYZ are moving. #1 current temperature drops to 25°C...
  • All heaters stops heating...
  • All target temperature drops to 0°C...
  • Cooling fan still on...
  • The LCD status message shows _Err: THERMAL JUMP_ ...
  • The hotend and bed don't accept new host target temperature command...
  • The hotend and bed accepts new LCD target temperature command but don't heat.

Conclusion:
When the hotend's thermistor is disconnected after heating begins AND after 16 seconds elapsed AND thermistor table begins at 25°C, the current temperature displayed on the LCD drops to 25°C. After 16 seconds, all heaters stops heating and the LCD status message Heating failed is then displayed. All heaters stops heating and the LCD status message _Err: THERMAL JUMP_ is then displayed. The board can be restarted with a M999 command to continue normal operation.

THERMAL RUNAWAY RISK: none


TEST 13 - Hotend's thermistor disconnected after target temperature reached

PR : #2055, #2067, #2077, #2142

The hotend shows 25°C current temperature at startup.

Host:

  • Sending a M109 S240 set the hotend's target temperature to 240°C on the LCD...
  • The LCD status message shows Heating…
  • The hotend starts heating and current temperature rises...
  • The hotend's current temperature reaches 240°C...
  • The LCD status message shows Heating done.
  • The hotend's thermistor is disconnected...
  • The hotend's current temperature drops to 0°C...
  • The hotend's target temperature drops to 0°C...
  • The hotend stops heating...
  • The LCD status message shows Err: MINTEMP.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS 1 set the hotend's target temperature to 240°C and bed's to 100°C on the LCD...
  • Idem to host for all heaters.

LCD:

  • Going to the Prepare/Preaheat ABS/Preheat ABS All don’t set the hotends target temperature to 240°C and bed's at 100°C...
  • Idem to host for all heaters.

Conclusion:
When the hotend's thermistor is disconnected after target temperature is reached, the hotend's current temperature displayed on the LCD drops to 0°C and the hotend’s stops heating. New hotend’s target temperature and heating operates normally after thermistor reconnection. The LCD status message shows Err: MINTEMP even after the hotend’s thermistor is reconnected or new commands sent.

THERMAL RUNAWAY RISK: none


TEST 14 - Hotend's thermistor disconnected after target temperature reached AND thermistor table begins at 25°C

PR : #2055, #2067, #2077, #2142, #2231

The hotend_s_ shows 25°C current temperature at startup. The hotend #1 is used for LCD preheat tests purpose.

Host:

  • Sending a M109 S240 set the hotend's target temperature to 240°C on the LCD...
  • The LCD status message shows Heating…
  • The hotend starts heating and current temperature rises...
  • The hotend's current temperature reaches 240°C...
  • The LCD status message shows Heating done.
  • The hotend's thermistor is disconnected...
  • The hotend's current temperature drops to a random value...
  • The hotend's target temperature drops to 0°C...
  • The bed stops heating immediately...
  • The LCD status message shows Err: THERMAL JUMP...
  • The serial console shows Error:Thermal jump, system stopped! Heater_ID: bed...
  • The serial console shows Error:Printer halted. kill() called!.

LCD:

  • No M109 equivalent command?

Conclusion:
When the hotend's thermistor is disconnected after its target temperature is reached AND thermistor table begins at 25°C, the hotend's current temperature displayed on the LCD drops to a random value and its target temperature drops to 0°C. All heaters stops heating and a thermal jump error is displayed both on the LCD and serial console. The board can be restarted with a M999 command to continue normal operation. The board needs to be reset to continue normal operation.

THERMAL RUNAWAY RISK: none


See #2024 and #2025 for original issues.

@nophead
Copy link
Contributor

nophead commented May 12, 2015

Tl;DR but basically thermistor tables should start at 0 or at the very least below MINTEMP.

@Natealus
Copy link
Contributor

Talk about through testing procedure. ;) Nice work there. 👍 👍

@clefranc
Copy link
Contributor Author

@nophead I totally agree.
Unfortunately, I have a 500°C thermistor which have a very high resistance around room temperature. So the "official" thermistor table from the hotend vendor start at 25°C. Someone has already redone the temp table using a thermocouple and all the stuff: same result. The ADC will read 1023 occasionally, enough to trigger the MINTEMP and annoy the user, hence the vendor provides a table that start at 25°C.

Is there a workaround? Anyway, I think the next Marlin release should address such issues.

@Natealus Thanks, it took me half a day to document, but I'm willing to redo it whenever new PR are available for this, because I believe safety should be priority one for the next release.

@nophead
Copy link
Contributor

nophead commented May 13, 2015

A long time ago all the Marlin thermistor tables where changed to make sure they started at 0 so that they would always give MINTEMP when disconnected.

Which thermistor is it? Presumably it isn't 100K, that the circuit was designed for. I can see why it might not be because in order to have any resolution at 500C it would need to be a higher resistance version and then you can't measure room temp accurately enough with only a 10bit ADC.

@thinkyhead
Copy link
Member

The LCD status message parameters: is then displayed.

#2067

@thinkyhead
Copy link
Member

The bed doesn't appears in the Manual Control tab!

So that's the host, correct? I see that it does still show up in the LCD menu under Control > Temperature > Bed

@thinkyhead
Copy link
Member

TEST 12

This should be slightly improved by #2067, as it keeps the test alive while the temperature is still low enough.

@thinkyhead
Copy link
Member

TEST 4

By my reading of the code this should throw a Runaway error after THERMAL_PROTECTION_BED_PERIOD seconds transpires. The test is as follows:

// If the temperature is over the target (-hysteresis) restart the timer
if (temperature >= tr_target_temperature[heater_index] - hysteresis_degc)
  *timer = millis();
// If the timer goes too long without a reset, trigger shutdown
else if (millis() > *timer + period_seconds * 1000UL)
  *state = TRRunaway;

@clefranc
Copy link
Contributor Author

@thinkyhead Do I update the OP with the new PR or post a new comment?

@thinkyhead
Copy link
Member

@clefranc You should continue to comment on the differences, but since the OP is very long, it will be better to update it with your new results rather than post another long comment.

@AnHardt
Copy link
Member

AnHardt commented May 13, 2015

Is there a workaround?

a) Set MINTEMP well above 25 degree. Preheat the nozzle with a lighter to avoid MINTEMP-ERRORS during startup.
b) Use an other thermistor.
c) if you really need the higher temperatures - how about a thermocoupler (MAX6675 or AD595 )

@thinkyhead
Copy link
Member

@AnHardt The ultimate workaround is to keep augmenting the heater sanity check. The current routines to catch thermal problems are:

  • Temp Wait Period routine observes the heating rate any time a new, higher temperature is set. If the temperature reading doesn't go up fast enough it will halt the machine. (This error will also be triggered by a board that is powered by USB but which hasn't any power to the RAMPS shield.) By default, it requires a 4°C rise within 16 seconds.
  • Thermal Runaway Protection catches a situation (after heating has reached the target) where the heater falls too far below the target temperature for too long, indicating that the thermistor probably fell out. By default this will allow the heater to stay on for 40 seconds after a sensor failure.
  • The MIN/MAXTEMP routine catches a situation where the thermistor raw value registers outside of a fixed range, indicating a totally disconnected thermistor (or a stuck relay/FET or short keeping the heater on). (The high and low temperatures set here are also used as the limits for setting the temperature via LCD. the HEATER_n_MAXTEMP value should be set based on the hottest temperature you expect to ever use.) This error will fire instantly.

What is missing?

  • Watch for any sudden change in the temperature reading (such as 5°C in 1 second) to catch a disconnected or bad thermistor (by a secondary method). This error will fire instantly.

@nophead
Copy link
Contributor

nophead commented May 13, 2015

Well the algorithm I proposed earlier is simpler and catches all those simply by insisting it should get hotter when full on and cooler when full off. Sudden jumps will get caught indirectly if they violate those basic rules. Catching them immediately will get lots of false alarms due to noisy wiring, poor grounds and loose connections. People would rather their print finished with a loose connection than abort and as long as the temperature is still under control that is OK.

@Wurstnase
Copy link
Contributor

I agree with Chris. My thermistor for my heatbed is really noisy while heat up. Also a lot of different checks will give it too much complexity also later for debugging issues.

@AnHardt
Copy link
Member

AnHardt commented May 13, 2015

'Workaround' implies to me - a not so perfect solution to make it work - somehow.
Currently working on a PR what checks for sudden temperature jumps.

@clefranc
Copy link
Contributor Author

@thinkyhead Updated the OP with #2067

@KiteLab
Copy link
Contributor

KiteLab commented May 13, 2015

@clefranc
Does this mean - nothing has changed? Or didn't you uses siekeout everywhere?

@clefranc
Copy link
Contributor Author

@KiteLab Updated the strikeout so you can see what the new PR brings new.

At this time, only Test 12 goes from HIGH to none.

@AnHardt
Copy link
Member

AnHardt commented May 14, 2015

Got 'sudden temperature jumps' to work on raw-temperature level. Tried this to avoid floating point compares. But it's ugly, because of a lot of cases to integrate MAX5564 - with no oversampling.
I will have an other try later on the floating point level. (too difficult to concentrate when angry)

@thinkyhead
Copy link
Member

@AnHardt To the extent that things can be done at the raw temperature level, I think that will perform the best and provide the best encapsulation. We'll just have to pre-convert any temperature-based stuff into sensor values. And I like the suggestion from @nophead, if we could use an algorithm that simply checks that when the heater is on the temp goes up, when it's off the temp goes down, and Bob's your uncle.

@nophead
Copy link
Contributor

nophead commented May 14, 2015

Yes it doesn't care about set point changes and start up, etc. You can rely on the fact the control loop will apply full power or full off when the temperature is outside the PID band.

@grob6000
Copy link
Contributor

I did a wee table, and only issue I can see with @nophead's proposal is when the printer is sitting at ambient, the heater is off, the temperature will stay constant (won't decrease) - would this trigger the fault?
Maybe a couple of options:
(a) only check when heater is enabled (not ideal - worth identifying errors even when they're off!)
(b) have a threshold (say 60C, yet another config parameter!) above which you trigger (if heater off and temp not down then kill), but below this only (if heater off and temp up then kill).
I'm a fan of doing temperature stuff in temperature space - would make the whole MAX5564 thing not an issue, not to mention any other temperature sources included later down the track...
Is it worth doing an FMEA table for this stuff, make sure we've chosen a sane solution?

@thinkyhead
Copy link
Member

#2077 looks good - and simple. I'm almost inspired enough to add BED MINTEMP and round out the whole thing…

@nophead
Copy link
Contributor

nophead commented May 15, 2015

@grob6000 the pseudo code I posted caters for that condition explicitly with this line:

              initial_temp = max(current_temp(), MAX_ROOM_TEMP);

@AnHardt
Copy link
Member

AnHardt commented May 15, 2015

When i tried to implement it yesterday, my firs note was:
// MAX_ROOM_TEMP is critical here. For sure we don't want false positives.
// One thermometer more, for the 'chamber temperature', would be fine.

Some ideas pop on simultaneously , for different reasons.

Any good ideas for a default value?

@nophead
Copy link
Contributor

nophead commented May 15, 2015

Should really be called MAX_AMBIENT_TEMP I suppose to make more sense when you have a heated chamber.

50C should be safe for most cases.

@clefranc
Copy link
Contributor Author

@AnHardt @thinkyhead Will try to test #2156 #2157 tonight...

@AnHardt
Copy link
Member

AnHardt commented May 27, 2015

@thinkyhead
Test 2 can not be caught by BED_MINTEMP but by #2164. Will fail then with HEATING_FAILED.

@clefranc
Copy link
Contributor Author

@AnHardt @thinkyhead See OP for PR #2164 test 8,10,12 & 14.

Almost there, but the test 14 failed because after M109, there is no Heating failed.

@AnHardt
Copy link
Member

AnHardt commented May 27, 2015

@clefranc
May i ask about your settings for #2164? Do you have activated MAX_THERMO_JUMP_AMOUNT?
Maybe you downloaded to early to have the "jump-test" at all.
Let's see why test 14 failed.

The thermometer shows 240°C. The heater_state is ether OFF or ON but probably not FULL_ON. The temperature_state is probably constant.
The sensor is disconnected. The displayed temperature jumps to 25°C. (should have been detected by 'jump' - downloaded to early or not activated or has an error) The temperature_state switches to falling, for a few readings - until the average drops below 25+TEMP_RAW_NOISE - after that, the temperature_state will be and remains to be constant. The PID sees a much to low temperature and switches the power to FULL_ON. The heater_state changes to FULL_ON and will stay there. The temperature_state (probably falling) is stored, the MAX_TEMP_OVERSTOOT_TIME begins to run.
The next few tests will see a falling temperature_state - no change - no test.
The average temperature reaches 25+TEMP_RAW_NOISE. The temperature_state changes from falling to constant. Constant is no reason to fail.
MAX_TEMP_OVERSTOOT_TIME is reached somewhen. The test will see a temperature_state of constant - no reason to fail. The test is rescheduled. Therefore the heater_state is set to ON.
The next test sees a temperature_state of constant, will switch heater_state to FULL_ON, stores constant.
The temperature_state will not change again - so no further test until MAX_TEMP_OVERSTOOT_TIME is reached again. Here the test will see a temperature_state of constant. That's no reason for an error.
Every further retest will have the same result.

Conclusion:
Even this implementation of the (nophead-)test can not catch case 14.
The additional "jump-test" should have caught this.

@clefranc
Copy link
Contributor Author

@AnHardt Your're right, I've used the default parameters. Using these catch test 14 with a Heating failed:

#define MAX_TEMP_OVERSTOOT_TIME 10
#define TEMP_RAW_NOISE 6
#define TEMP_CONSEC_COUNT 6
#define MAX_AMBIENT_TEMPERATURE 50
#define MAX_THERMO_JUMP_AMOUNT 30
#define HEATER_STATE_DEBUG

I wrongly assumed I should use the default protection for the test. Sorry for the confusion.

I'll redo all test tomorrow. Is my values above correct?

@AnHardt
Copy link
Member

AnHardt commented May 27, 2015

Strategy to tune (set up) the new test.

1.) Turn off THERMAL_PROTECTION_HOTENDS and THERMAL_PROTECTION_BED in Configuration.h.
We don't want to see what they may detect - we want to se what the new function does.

2.) In Configuration_adv.h turn on the new functions by setting MAX_TEMP_OVERSTOOT_TIME to value different from 0.
The correct value you can find by setting a high target value to the heater but turning it off when MAX_AMBIENT_TEMPERATURE is reached.
The time between turning off and changing direction of the measured temperature is MAX_TEMP_OVERSTOOT_TIME. A smaller value is saver but may give false positives.

3.) Turn on HEATER_STATE_DEBUG to see what's going on.

4.) Don't heat any heater but observe the output of HEATER_STATE_DEBUG on the serial console.

...
echo:SD card ok
Temperature: 0 count: 127 Temp.: 984 Temp.A.:0 Heater: 0 T_State: 0 Time:4294965691 H_State:1
Temperature: 1 count: 127 Temp.: 108 Temp.A.:0 Heater: 1 T_State: 0 Time:4294965687 H_State:1
Temperature: 0 count: 0 Temp.: 984 Temp.A.:984 Heater: 0 T_State: 0 Time:29916 H_State:2
Temperature: 1 count: 0 Temp.: 108 Temp.A.:108 Heater: 1 T_State: 0 Time:29917 H_State:2
...
Temperature: 1 count: 0 Temp.: 99 Temp.A.:107 Heater: 1 T_State: 0 Time:27630 H_State:2
Temperature: 0 count: 0 Temp.: 983 Temp.A.:983 Heater: 0 T_State: 0 Time:27433 H_State:2
Temperature: 1 count: -1 Temp.: 99 Temp.A.:107 Heater: 1 T_State: 0 Time:27434 H_State:2
Temperature: 0 count: 0 Temp.: 984 Temp.A.:983 Heater: 0 T_State: 0 Time:27236 H_State:2
Temperature: 1 count: -2 Temp.: 108 Temp.A.:106 Heater: 1 T_State: 0 Time:27237 H_State:2
Temperature: 0 count: 0 Temp.: 983 Temp.A.:984 Heater: 0 T_State: 0 Time:27039 H_State:2
Temperature: 1 count: 0 Temp.: 108 Temp.A.:106 Heater: 1 T_State: 0 Time:27040 H_State:2
...

Temperature: 0 -> bed
Temperature: 1 -> heater 0
count: 127 -> not initialized
count: 0 -> initialized
Temp.: 984 -> readout of a normal thermistor at room temperature
Temp.: 108 -> readout of a MAX 6675 at room temperature
Temp.A.:0 -> Average temperature not initialized
Temp.A.:984 -> Average temperature readout for the last 16 readouts - thermistor
Temp.A.:108 -> Average temperature readout for the last 16 readouts - MAX6675

Now some noise:

Temperature: 1 count: -1 Temp.: 99 Temp.A.:107 -> at this moment Temp. (99) was smaller than Temp.A.-TEMP_RAW_NOISE (106-6) so the counter is decreased.
Temperature: 1 count: -2 Temp.: 108 Temp.A.:106 -> the temperatures are close together again - the counter will be reset.
Temperature: 1 count: 0 Temp.: 108 Temp.A.:106 -> ok again

5.) Find a value for TEMP_RAW_NOISE where the count stays between -2 and 2, than add a bit.
Now try to produce noise by switching on/off lights, fans, play with the display, machines close by, maybe an other heater.
Count should not grow above +-2.
(For a 25° thermistor test above 25° - else you'll have no noise at all.)

6.) Set TEMP_CONSEC_COUNT to a value the count NEVER can reach by noise. If set to low, you may get false positives.

7.) For MAX_AMBIENT_TEMPERATURE 50° is a good value. A extruder heater may not fall below this, placed above a working heated bed.

8.) To adjust MAX_THERMO_JUMP_AMOUNT take a look on your Temp.: readings at room temperature. Take the difference to 1024 and to 0. The smaller difference is the maximum jump the value can make in this direction. To detect an error in worse conditions make MAX_THERMO_JUMP_AMOUNT the half of the smaller difference. The value must be higher than TEMP_RAW_NOISE. If the difference/2 is smaller than TEMP_RAW_NOISE take TEMP_RAW_NOISE+2. The fastest "normal" change is about full_range in one minute with about 5 readings per second (1024/60/5 = 3). Due to non-linearitys of the thermistor table the change my be a bit faster.

9.) Tests
Extruders and the bed are handled the same for this tests. So the results should be the same.
In various states,

  • Disconnect the sensor,
  • Short the sensor,
  • Disconnect the heater or the main power supply.

10.) Disable HEATER_STATE_DEBUG
11.) Reenable THERMAL_PROTECTION_HOTENDS and THERMAL_PROTECTION_BED in Configuration.h.

@clefranc
Copy link
Contributor Author

@AnHardt Here my parameters:

#define MAX_TEMP_OVERSTOOT_TIME 10
#define TEMP_RAW_NOISE 6
#define TEMP_CONSEC_COUNT 6
#define MAX_AMBIENT_TEMPERATURE 50
#define MAX_THERMO_JUMP_AMOUNT 30
#define HEATER_STATE_DEBUG

Doing regular heating, I can't get it to work without error:

  • When heating the nozzle to target temperature 240°C, I get Err:TERM. JUMP at around 150°C, then many more before reaching target. Sometimes getting THERMAL RUNAWAY right after a reset of the board.Even got a Heating failed.
  • When cooling the nozzle from 240°C, I get THERMAL RUNAWAY at around 210°C, then more before reaching room temprature.

@AnHardt
Copy link
Member

AnHardt commented May 31, 2015

@clefranc
Thank you for the tests.
Identified 2 stupid errors. Update will follow.

@clefranc
Copy link
Contributor Author

clefranc commented Jun 3, 2015

@AnHardt See OP for results of #2231.

Look at test 2 & 8.

#define MAX_TEMP_OVERSHOOT_TIME 16
#define TEMP_RAW_NOISE 7
#define TEMP_CONSEC_COUNT 7
#define MAX_AMBIENT_TEMPERATURE 50
#define MAX_THERMO_JUMP_AMOUNT 30
#define HEATER_STATE_DEBUG

@thinkyhead
Copy link
Member

@clefranc @AnHardt Just looking at TEST 2. The bed temperature should be seen to rise, but it does not rise. Is that condition supposed to be caught in #2231? What needs fixing to catch it? (TEST 8 sounds like the same issue.)

@thinkyhead
Copy link
Member

The bug in TEST 7 sounds familiar. At least I think I recall we had some other display issue where the display needed to initialize earlier, before the temperature protection started.

Getting closer…!

@clefranc
Copy link
Contributor Author

@thinkyhead Getting closer indeed. Thankfully @AnHardt is still patching his code, I'll be available to test again in 2 weeks...

@AnHardt
Copy link
Member

AnHardt commented Jun 11, 2015

2 and 8 fail because a) there is no jump downwards to detect, b) the condition for failing is: "if the heater is full on the temperature shall not fall". The temperature can not fall.
8 can be caught, and was caught, by the conventional 'heater sanity check', what is not implemented for the bed (2) . I hope the conventional test for 8 failed this time because i explicit asked for turning off the conventional tests.
7 is fixed by initializing the display earlier. The PR is already in, but not retested by @clefranc. Yes, we had similar problems with testing the MAX6675 before that was initialized - before the display was initialized. In this case shifting the test behind the init of the MAX was the right way. Initializing the display earlier only had shown us the error. ( #2183 )

All in all #2231 again is not very satisfying to me. The 'jump' test is working well, is cheep and easy to set up, but does nothing what MIN/MAX-TEMP tests could not detect (except for the 25° sensors - and even there disconnected sensors during boot can not be detected).
The other part is very sensitive to it's parameters. Ether my setup instructions are to crappy, or its to difficult at all (Where one tester and me is not a big basis for a judgement). A auto-tune-routine is possible but will need a lot of code.

With the experience of #2231 i'll try to polish 'heater sanity check' and extend it to the bed.

@nophead
Copy link
Contributor

nophead commented Jun 11, 2015

"if the heater is full on the temperature shall not fall"

If it is full on it should rise, given enough delay. It may fall initially though, so this seems wrong.

@AnHardt
Copy link
Member

AnHardt commented Jun 11, 2015

@nophead
I think this was discussed before - but can't find it.
At temperatures at the upper end, a slow bed may not have enough power to produce enough slope to detect 'rising'. My bed can reach 130° but for the last 10° it needs about 20 minutes.

@nophead
Copy link
Contributor

nophead commented Jun 11, 2015

Well a bed like that is self limiting so doesn't need any firmware protection.

The resistance of PCB beds increases with temperature so the maximum temperature is determined by the supply voltage. They are inherently safe unless you use a very high voltage supply. If you do then it will still rise when power is full on near the target temperature.

I have some beds with resistors and they can get too hot so I use a thermal fuse to make them safe. I don't rely on firmware as the most likely failure is the SSR becoming shorted.

On one of my machines I have a PCB bed with a 1mm thick aluminium sheet under the glass to spread the heat better. That has a very curious affect: When the power is full on it heats and then levels off well below the target and actually starts dropping a bit before heating again and reaching the target. This is all before the PWM kicks in, I can see the power is 100%. I only get this strange inflection with the aluminium sheet in place. It would certainly trip all the protection schemes that have been discussed so I prefer not to use any protection as it will just lead to false positives and become a nuisance.

I think there are such a range of heater characteristics that it will be impossible to come up with an algorithm that doesn't give false positives in some situations.

@Wackerbarth
Copy link
Contributor

@nophead - "bed ... aluminium sheet ... curious effect"
To what do you attribute this (apparent) temperature drop? It seems to defy the Laws of Thermodynamics.

"impossible to come up with an algorithm that doesn't give false positives" -- I totally agree.

@nophead
Copy link
Contributor

nophead commented Jun 11, 2015

Yes its very odd. My only theory is perhaps the PCB or the aluminium flexes and they achieve a better thermal contact at higher temperatures, although it is very consistent and a smooth graph. The temperature is measured on the underside of the PCB, where the traces are. I don't suppose the surface temperature has an inflection but it might have an increase in gradient.

@Wackerbarth
Copy link
Contributor

That is a reasonable hypothesis. If things flex, creating better contact, the "cold" aluminum would suck the heat out of the PCB during that conductivity transition.

@AnHardt
Copy link
Member

AnHardt commented Jun 11, 2015

I'll have a look how #2231 looks when the failure condition is configurable - per thermometer. But will last for a while - projects are piling up.

@boelle boelle modified the milestone: Feature Requests Round 12 Jun 29, 2015
@thinkyhead
Copy link
Member

This is quite stale now. Please open a new issue if this is still existing in RCBugFix. Thank you!

@github-actions
Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked and limited conversation to collaborators Apr 10, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

10 participants