-
-
Notifications
You must be signed in to change notification settings - Fork 19.2k
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
Hotend thermistor malfunction behavior #2025
Comments
@clefranc Thermal protection should definitely be smarter about a detached thermistor. I can see why (logically) it doesn't throw "MAXTEMP" until the temperature registers high. But it should throw something as soon as the thermistor detaches. In fact, I would argue any rapid jump or drop in temperature should throw an error instantly, disable the heaters, and trigger a thermal alarm (with audio feedback coming soon). |
@thinkyhead I totally agree, sorry I've nothing to add to the discussion. |
Mine, using an old version of Marlin, shows error mintemp when the thermistor is detached. I haven't actually tried it while the printer is on and heating though but I know it won't start heating until you attach it again and give it the M999 command. I'll go test it later tonight and see what the old version does, and test against the latest version when it's already at temperature. edit: oh never mind I misread it as becoming electrically disconnected rather than just falling out of the heater block. Either way I'm running 100% metal hot ends so I doubt I'll fry anything significant by pulling the thermistor out of the heater |
Yes Marlin would normally give a MINTEMP error as soon as the thermistor is disconnected because open circuit corresponds to a very low temperature. The problem in this case is the thermistor table starts at 25, so it can never return a value lower than that. Because thermistor responses are logarithmic I don't think a 500C range is practical with the normal circuit. |
Afaik Marlin doesn't compare the temperature. It tests the raw_value. This should return 0 if there is nothing connected. Independed of the thermistor_table, or? |
The raw value would be 1023 with nothing connected. |
But the OP says he gets 1023 at room temp, so MINTEMP can never work in this case. It needs to be handled by THERMAL_RUNAWAY_PROTECTION. |
Or something like |
Yes basically if the heater is on full power and the temperature does not rise within some timeout it must be a fault. THERMAL_RUNAWAY_PROTECTION should handle this but doesn't. |
Similarly if the heater is off and the temperature does not fall within some timeout that is also a fault. |
That's right because:
|
There seems to be an other problem. Ohhh, even worse. 16 * 1023 == 16368 but 16383 == 16 * 1024-1. We check against a value we can never reach. |
There is a TEMP_MIN/MAX_ROUTINE which handle that. |
Yes I think it converts the specified MIN and MAX temperatures to raw values for the interrupt to check. But that won't work if they are outside the range of the table. I think THERMAL_RUNAWAY_PROTECTION should work like this:
|
Sorry for the wrong alarm. |
Yes the recent addition of macros with token pasting to repeat code makes Marlin even less readable than it was before. That plus Github's broken search makes it very difficult to find what goes on. |
I updated the comments on Thermal Runaway Protection to warn that it doesn't catch every condition. For example, if the thermistor is already disconnected when you start the heater, it will not get caught. (For that you must separately enable
Any other conditions worth adding? |
I'm proposing #2041 to enable |
I propose any and all fail safes are enabled by default. Anything that can figure out whether or not the printer has malfunctioned shouldn't really be optional anyway. I don't know why you'd even have the option to disable them in firmware and just allow users to send a gcode to temporarily override it in a test case scenario (like allowing cold extrusions while testing with the hot end removed). |
I also propose to group all the thermal protection in the same section, in one configuration file, either Configuration.h or Configuration_adv.h. |
@clefranc @ntoff I agree that a single |
#2055 simplifies enabling thermal protection for hotends and the bed by making them simple switches, with the time and temperature parameters moved to |
Please continue discussion here: #2066 |
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. |
I'm using a 500°C thermistor that came with a Pico hotend, the official temperature table has the lower value at 25°C (not 0°C as expected).
The main reason why it doesn't goes to 0°C lays in the specification of this particular thermistor: at room temperature its resistance is too high to be detected by my RUMBA board. If I set the 1023 temp table entry to 0, it triggers a MINTEMP error. So I set them to 25.
Now the protection discussion.
First test: The thermistor is disconnected prior printing (or completely detached from hotend)
This is the expected behavior.
Second test: The thermistor fail during a print (or completely detach from hotend)
What went wrong with the second test? I've redone it multiple time at 50°C with the same result (reconnect after 60 seconds).
In my configurations, I think I'm using full protection:
The text was updated successfully, but these errors were encountered: