simple user PID error led to high temps.
Nuramori last edited by
I was in the process of doing a heater bed PID, and entered "M303 H0 90" instead of the intended "M303 H0 S90".
The result was an attempt to autotune to 200c instead of the intended 90c. I only noticed the problem when I was noting the temp overshoot go up to 109 before I shut things down and started looking closely to what happened. That's when I noticed the typo, and also the message that it was going to tune it to 200c. I'm not sure why it selected 200c from that entry, but I would perhaps suggest that in the event of an error entry, that a warning message, or a refusal to perform the tune would be more desirable. Maybe at a certain temp threshold, a secondary confirmation when it's an out of the ordinary range.
jens55 last edited by
Be sure to alsoset your maximum allowed temperature if you have not done so. You got lucky and saved your bed heater!
I agree that it should refuse to accept a command that it can't interpret properly but doing that for everything might bloat the code base too much - after all, it checks for maximum allowable temperature already.
@jens55 I have a maximum allowed temp setting in place, as well as a thermal cutout. I wasn't at risk of damaging anything. That being said, there is really one notable major place that is "risky," namely the heaters, so it'd be pragmatic to add some redundancy there for the sake of safety.
But yeah, people assume a certain amount of risk with the hobby.
deckingman last edited by
@Nuramori To be clear, are you saying that the auto tune with typo attempted to tune the heater to temperature higher than that set in M143? i.e. if you would normally run at 90 deg C, then a safe setting for M143 would be say 100 deg C. So are you saying that the auto tune attempted to reach 200 deg C with that 100 deg C maximum temperature setting in place?
The M303 command has a default target temperature of 200C. Perhaps it would be better to make the S parameter mandatory.
@deckingman no, it didn’t get near the programmed max (my M143 is set to 120c) or TCO (manual reset that trips at 150c). It was an observation that it didn’t stop where I intended and tracked it down to not putting the “S” in front of the target temp. As a typo it was my fault to have overlooked, but I wonder if it’s common enough, and I would not try and guess how many printers don’t have safety measures in place if it went unnoticed.
Nuramori last edited by
@dc42 I would recommend that so any target temp is deliberate. Removes the chance for unintended temp excess. While a default 200c is not an issue for a hotend, the command is shared by the bed, which may or may not be a bad deal at 200c.
I was wrong. If the heater is configured as a bed heater, the default target temperature is 75C.
@dc42 well that would be concerning. I did a M308 H0 90 (as the typo), so it was the bed heater. The message (which I went back to see what it was trying to do) said it was going to heat to the target of 200c. I assume that a H0 is considered a bed heater internally? This is on the latest RRF3 on a duet3. It is a AC mains using a SSR, using 24v as the controls voltage on the input/output Vcc.
I assume that a H0 is considered a bed heater internally?
On Duet 3 there are no default heaters. So Heater 0 is not considered a bed heater unless you have used M140 to declare it as one.
I’ll take a look at M140. I don’t seem to use that command in the config.g file. I usually set it as part of my slicer output. Here’s my config.g
; Configuration file for Duet3 (firmware version 3.0 RC2)
; executed by the firmware on start-up
; --------------- Pin/connection Mapping Legend -------------------
; out0 - Bed heater
; out1 - Extruder 1 heater
; out4 - Radiator cooling fan - WC heatsink
; out8 - Parts cooler on printhead
; out9 - Duet board cooling fan
; out4.tach - Radiator cooling fan rpm wire - WC heatsink
; io1.in - X min active low endstop switch
; io2.in - Y max active low endstop switch
; io3.in - Z probe type to bltouch - DEPRECATED
; io4.in - Z probe type to PIEZO
; io5.in - Emergency stop switch
; io3.out - GPIO port 0 on IO3, servo mode - BLTouch Z-Probe
; servo, out10 (only on v0.5, not on v0.6)
; temp0 - Bed Thermistor
; temp1 - Extruder Thermistor (PT1000)
; temp2 - RPi Thermistor (PT1000)
; mcu-temp - MCU sensor
; General preferences
G4 P2000 ; Hold your Horses.
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
G21 ; Set units to Millimeters
M550 P"DUET3" ; set printer name
M584 X0.3 Y0.2 Z0.0:0.1:0.4 E0.5 ; set drive mapping to each axis
M669 K1 ; Select CoreXY mode - New format
M552 S1 ; enable network
M552 P192.168.3.120 ; Static IP Address
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet
M569 P0.0 S0 ; physical drive 0 goes backwards - Z Axis Left (1)
M569 P0.1 S0 ; physical drive 1 goes backwards - Z Axis Right Back (2)
M569 P0.2 S0 ; physical drive 2 goes backwards - Y Axis
M569 P0.3 S0 ; physical drive 3 goes backwards - X Axis
M569 P0.4 S0 ; physical drive 4 goes backwards - Z Axis Right Front (3)
M569 P0.5 S1 ; physical drive 5 goes forwards - Extruder 1
; Set up three Z-axis location
M671 X-52.5:377.5:377.5 Y162.5:282.5:42.5 S5 ; leadscrews at 1 - left, 2 - rear right and 3 - front right
M92 X200.00 Y200.00 Z400.00 E1800 ; set steps per mm
M350 X16 Y16 Z16 E16 I1 ; configure micro-stepping with interpolation
M566 X1000.00 Y1000.00 Z400.00 E240.00 ; set maximum instantaneous speed changes (mm/min)
M203 X24000.00 Y24000.00 Z2000.00 E1200.00 ; set maximum speeds (mm/min)
M201 X10000.00 Y10000.00 Z400.00 E800.00 ; set accelerations (mm/s^2)
M906 X1000 Y1000 Z1000 E800 I30 ; set motor currents (mA) and motor idle factor in percent*100
M572 D0 S0.074 ; Set pressure advance
M84 S30 ; Set idle timeout
; Axis Limits
M208 X0 Y0 Z0 S1 ; set axis minima
M208 X320 Y320 Z350 S0 ; set axis maxima
; Z-Probe - BLTouch - DEPRECATED
; M574 Z1 S2 ; set endstops controlled by probe
; M558 P9 C"^io3.in" H3 F60000 T10000 ; set Z probe type to bltouch and the dive height + speeds (bltouch NEEDS pullup)
; G31 P100 X28.5 Y-5 Z2.35 ; set Z probe trigger value, offset and trigger height
; Z-Probe - PIEZO
M574 Z1 S2 ; set endstops controlled by probe
M558 P8 C"io4.in" H5 F2000 T20000 ; set Z probe type to PIEZO and the dive height + speeds
G31 P100 X0 Y0 Z-0.1 ; set Z probe trigger value, offset and trigger height
; G30 ; Probe Z
; Configure Heaters and Sensors
M308 S0 P"temp0" Y"thermistor" A"Bed Temp" T100000 B3950 ; Configure bed temperature sensor
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"temp1" Y"pt1000" A"Extruder 1 Temp" ; Configure extruder 1 temperature sensor - PT1000 sensor
M143 H1 S280 ; set temperature limit for heater 1 to 280C
M308 S2 P"mcu-temp" Y"mcu-temp" A"Duet Board" ; Configure MCU sensor
; M308 S4 P"temp2" Y"pt1000" A"RPI" R2200 ; pt1000 temp sensor for the raspberry pi
; Define Sensors and Fans
M950 H0 C"out0" T0 ; Define heater 0 (bed heater) - bed_heat pin and Temp Sensor 0
M950 H1 C"out1" T1 ; Define heater 1 (hot-end E0) to use the "e0_heat" pin and Temp Sensor 1
M950 F0 C"out8" Q100 ; Define Fan_0 for use - Parts Cooler on Printhead - 4010 fan
M950 F1 C"!out4+^out4.tach" Q25000 ; Define Fan_1 for use - Radiator cooling - WC heatsink. - PWM fan
M950 F2 C"out9" Q25000 ; Define Fan_2 for use - Duet board cooling fan
; M950 S0 C"io3.out" ; Define GPIO port 0 on IO3, servo mode - BLTouch Z-Probe - DEPRECATED
M106 P0 S0 ; set fan 0. Parts Cooler on Printhead
M106 P1 T25:40 H2 ; Set fan 1. Manages Radiator fan for water-cooled loop.
M106 P2 T30:45 H2 ; Set fan 2. Manages Duet board fan.
;Set PID values
M307 H0 A177.4 C351.6 D1.0 V23.3 B0 ; disable bang-bang mode for the bed heater and set PWM limit
M307 H1 A862.2 C371.3 D5.7 V23.3 B0 ; disable bang-bang mode for the extruder heater and set PWM limit
M563 P0 S"Extruder 1" D0 H1 F0 ; define tool 0. Fan 0 operates with an active hot-end
G10 P0 X0 Y0 Z0 R0 S0 ; set tool 0 axis offsets active and standby temperatures to 0C
T0 ; select first tool
M501 ; Store parameters