simple user PID error led to high temps.



  • 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.



  • 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.



  • @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?


  • administrators

    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.



  • @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.


  • administrators

    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.


  • administrators

    @Nuramori said in simple user PID error led to high temps.:

    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.



  • @dc42

    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
    ; out2
    ; out3
    ; out4 - Radiator cooling fan - WC heatsink
    ; out5
    ; out6
    ; out7
    ; out8 - Parts cooler on printhead
    ; out9 - Duet board cooling fan
    ; out4.tach - Radiator cooling fan rpm wire - WC heatsink
    ; out5.tach
    ; out6.tach
    ; io0.in
    ; 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
    ; io6.in
    ; io7.in
    ; io8.in
    ; io0.out
    ; io1.out
    ; io2.out
    ; io3.out - GPIO port 0 on IO3, servo mode - BLTouch Z-Probe
    ; io4.out
    ; io5.out
    ; io6.out
    ; io7.out
    ; io8.out
    ; servo, out10 (only on v0.5, not on v0.6)
    ; pson
    ; spi.cs0
    ; spi.cs1
    ; spi.cs2
    ; spi.cs3
    ; temp0 - Bed Thermistor
    ; temp1 - Extruder Thermistor (PT1000)
    ; temp2 - RPi Thermistor (PT1000)
    ; temp3
    ; 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

    ; Network
    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

    ; Drives
    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

    ; Endstops

    M574 X1 S1 P"io1.in" ; X min active high endstop switch
    M574 Y2 S1 P"io2.in" ; Y max active high endstop switch

    ; 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

    ; Fans
    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

    ; Tools
    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

    ; Emergency Stop
    M574 S1 P"^!io5.in" ; Define Emergency endstop - emergency stop switch condition
    M581 P"io5.in" T0 ; Define action to be taken with activation of emergency stop switch

    ; Miscellaneous
    T0 ; select first tool
    M501 ; Store parameters


Log in to reply