M143 and heater fault behaviour
-
Hello,
I have a custom cartesian printer in an insulated enclosure with a chamber heater. Duet wifi 2 and all electronics other than steppers are outside the enclosure. I've been running this setup for a while but in the last 6 months I've experienced the same odd behavior twice now.
Typically I set my chamber heater to 30-40C, because my enclosure is near air tight and double-wall insulated, once the set temperature is reached the heater doesn't need to turn on again. The enclosure will easily get to 50+ degrees or more after reaching the set temp.
Initial problem with this was the printer would halt due to the measured temperature exceeding the set temperature. I then configured this heater via M143 using the A1 parameter to turn the heater off permanently. This has worked fine for years.
Now, I've had it happen twice now where the print pauses and the head parks because of the fault. The first time I wasn't around when it happened, the second time was just now and i was beside the printer.
This is my heater config:
M950 H2 C"!exp.heater4" T2 ; create chamber heater output on heater4 and map it to sensor 2 M307 H2 A170.0 C4590.7 D1.4 V24.4 B0 S1 ; disable bang-bang mode for the chamber heater and set PWM limit M141 H2 ; map chamber to heater 2 M143 H2 S50 A1 ; set temperature limit for heater to 50C, turn off once exceeded (A1)
I'm running FW version 3.4.6
Has anyone observed this before?
Edit, after re-reading this and looking at my config i think I know what is happening.
Previously i would set my chamber temp for 40C, it would hit 50C before there was any kind of fault I assume that is why A1 would turn it off.What's happening now is i have my temp set for 30C and it doesn't reach 50 to shut itself off. So there is a general heating fault because my chamber is still climbing beyond the set temp but doesn't hit 50C in time.
Is there any workaround for this?
Thanks,
-
I suppose you could use daemon.g to dynamically set the max temp to just over the active temp.
By default daemon.g runs once every 10 seconds.
You must manually create the file if it's not there.This code should achieve what you want.
Adjust theoverTemp
variable as required.I'm not 100% sure of the object model state of the heater when it's deactivated, but it's easy enough for you to check.
If you change the active temp then an M143 will be sent.
However once deactivated you would have to manually activate it again.; Max temp will be set to current active temp plus this value if !exists var.overTemp var overTemp = 5 ; this must be set to whatever state the heater has when it is disabled. I think it is "offline" if heat.heaters[2].state != "offline" ; this will only trigger once after each time the heater temp is changed if (heat.heaters[2].state = "active") && (heat.heaters[2].active > 0) && (heat.heaters[2].max != heat.heaters.active + var.overTemp) M143 H2 S{heat.heaters.active + var.overTemp} A1
-
@kmart Use M570. The default temperature excursion before a fault is raised is 15 Deg C (I think). So change this using M570 to say 25 or more. The downside is that in the event of a genuine failure, you might not get notified but it sounds like your chamber heater is low powered so it might not matter (and you could use a thermal fuse).
Have you tried tuning the heater? It's not always easy with an under or over powered heater but if you can do it successfully, then you can use PUd control rather than bang-bang which should then negate the heater faults.
-
@OwenD
Thanks, this looks like the answer I was seeking. Had no idea about the system daemon but this is very useful. Ideally I want to shut the heater off once it hits the set temperature so I'm going to start exploring what's possible with this.@deckingman
Thanks, I didn't know about M570.
My chamber heater is 120v running on an SSR, it was PID tuned but because my enclosure is so well insulated the temperature takes a loooooooong time to fall. This is part of the problem when printing because the bed heat doesn't allow the chamber temperature to fall at all. Once it reaches the set temp it never drops, only climbs. -
@kmart The purpose of heater fault detection is to try and prevent a fire hazard if for any reason a component (including wiring) should fail. For your situation whereby you might want a chamber temperature of around 50 deg C, then it's fair to say even if it reached 100 deg C or even say 150 deg C, there is very little likelihood of anything catching fire. Because your set pint is relatively low, you could could set the heater fault tolerance to 50 deg or even 100 deg C. (M570 T50) and still be safe. i.e, if the set point was 50, then the chamber would have to reach 100 deg C before a heater fault was raised. Or if the set point was 30, then the chamber would need to rise above 80. If it was me, I think I'd be comfortable with using a max temperature of 50 (M143) with a fault tolerance of 100 (M570 T100).
-
@kmart said in M143 and heater fault behaviour:
My chamber heater is 120v running on an SSR, it was PID tuned but because my enclosure is so well insulated the temperature takes a loooooooong time to fall. This is part of the problem when printing because the bed heat doesn't allow the chamber temperature to fall at all. Once it reaches the set temp it never drops, only climbs.
You could always set up a fan to pull air from outside the chamber to help regulate that.
-
@OwenD
The Enclosure is made from an old medical refrigerator, double steel wall and insulted.To be able to vent air, i need to open another hole in it to allow air in. I also need filtration since I only do ABS... Turns into more work than i want to do lol.
@deckingman
So what's the difference between M143 and M570 and how exactly do they coexist?
Like i set the max temp with M143 H2 S50 A1 followed by M570 H0 T100?The GCode dictionary says the T parameter is for the allowed temperature excursion. Does that mean the max limit before a fault or the max of the allowable difference between the M143 setpoint and M570 T parameter? I just want to make sure I have it right
-
@kmart They do two different things. M143 defines the maximum temperature that you (or a slicer) is able to set. It has nothing to do with fault detection. M570 sets the limits which if exeded generate a fault condition. The "T" parameter in M570 defines how far away from the set point the temperature must drift before a heater fault is flagged. So for example, you might have a hot end which is capable of printing high temperature filaments so you might use something like 300 as the maximum allowed value in M143. But you might be printing say PLA and set the temperature to 200. If you use the default setting in M570, then if the hot end temperature exceeded 215, you'd get a heater fault.
-
M143 defines the maximum temperature that you (or a slicer) is able to set. It has nothing to do with fault detection.
This isn't quite correct. Yes, it sets the temperature limit above which a heater cannot be set:
M143 H1 S280 ; set temperature limit for heater 1 to 280C M568 P0 S290 ; set tool 0 temperature to 290C Error: M568: Requested temperature out of range
But it also defines what happens at particular temperatures, and whether a fault is generated. You can also have up to three M143 monitors per heater. If you send
M143 H#
(where # is the heater number) you will get a report of what monitors are set:Heater 1 monitor 0 uses sensor 1 to generate a heater fault if the reading exceeds 280.0°C Heater 1 monitor 1 is disabled Heater 1 monitor 2 is disabled
So you could generate a warning at one temperature, turn off the heater at a second, and raise a fault at a third temperature. Heater faults are handled by the event system, and the heater-fault.g macro can be used to control what happens in the event of a heater fault.
M570 sets the limits which, if exceeded, generate a fault condition.
This is correct, but deals with excursions from the set temperature. I think if the heater is off, it isn't in effect. Otherwise it would generate heater faults when heaters are turned off and your machine was cooling down.
See this wiki page may better explain the inner workings of heater monitoring: https://docs.duet3d.com/en/User_manual/Troubleshooting/Heater_faults
@kmart I think what you really want is to set M143 to turn off the chamber heater when it gets to the set temperature. Which is what you have been doing manually, until you set the chamber temperature to 30C and M143 was set to 50C, causing a heater fault when the temperature hit 45C, because of the default 15C difference in M570. Rather than edit M570 and remove the protection it affords, change M143 to get the behaviour your want.
How do you set the chamber temperature currently? If manually, you could add a macro that asks you what temperature to set the chamber to, then sets the chamber and M143 to that temperature.
Ian
-
I think what you really want is to set M143 to turn off the chamber heater when it gets to the set temperature.
Yes, this is exactly what i want to do and kind of what i figured was going on once i started setting my chamber temperature to 30C instead of 40C.
How do you set the chamber temperature currently?
Typically in the slicer
So what you said makes sense and was what I was going to test next, just lowering the S parameter value of M143.
Thank you for this info.