PID Controlled Heated Bed



  • After messing around with my Z axis a bit on my old printer, I remembered my bed might still be set for bang bang control as I had initially set it up, meaning to get back to it later. It has the original Keenovo thermistor.

    My hot end is definitely set up for PID, but it's using a 4 wire PT100. I've just upped the temp limit to 350degC, as I've got a new Microswiss all metal hot end in there and want to print some PC a bit hotter.

    Here's the heater section in my config.g (firmware 2.05):

    ; Heaters
    M143 S350 ; Set maximum extruder temperature to 350C
    M143 H0 S140 ; Set maximum bed temperature to 140C
    M305 P0 T100000 B4000 C0 R4700 L0 H0 ; Set thermistor + ADC parameters for heater 0
    M305 P1 X200 ; Set thermistor + ADC parameters for heater 1 and remap it to channel 200
    M307 H0 A144.9 C625.3 D1.0 B0
    M307 H1 A892.1 C396.5 D6.4 V24.3 B0

    H1 the hot end, H0 the bed.

    Can/should I change the bed to PID? I do get a bit of Z banding, and the printer can be a little "bindy". I hoped it might help.

    Once again I'm stuck at the wiki, as it seems things might have moved on from what I set up 4 years ago.

    All help is appreciated thanks



  • @Corexy Hi Mate,

    Looks like you are already using PID on the bed because the "B" parameter for H0 (the bed heater) is set to 0. For Bang-Bang you'd use B1.



  • @deckingman said in PID Controlled Heated Bed:

    @Corexy Hi Mate,

    Looks like you are already using PID on the bed because the "B" parameter for H0 (the bed heater) is set to 0. For Bang-Bang you'd use B1.

    True?! Cheers Ian.

    So I'll just run up the PID tuning via M303? I'm wondering how any residual plastic in my nozzle will handle 350 degC? I'll unload the filament at least.

    While I'm waiting for the hot end to cool, I'm running the bed test (M303 H1 S240). But I've left these as is for now, is that correct?

    M307 H0 A144.9 C625.3 D1.0 B0


  • administrators

    @Corexy said in PID Controlled Heated Bed:

    While I'm waiting for the hot end to cool, I'm running the bed test (M303 H1 S240). But I've left these as is for now, is that correct?
    M307 H0 A144.9 C625.3 D1.0 B0

    The D1.0 value looks rather low for a bed heater, but not impossible for a silicone heater with the thermistor embedded within it. Is the bed temperature stable, or oscillating?

    The A and C values look reasonable.



  • @dc42 said in PID Controlled Heated Bed:

    @Corexy said in PID Controlled Heated Bed:

    While I'm waiting for the hot end to cool, I'm running the bed test (M303 H1 S240). But I've left these as is for now, is that correct?
    M307 H0 A144.9 C625.3 D1.0 B0

    The D1.0 value looks rather low for a bed heater, but not impossible for a silicone heater with the thermistor embedded within it. Is the bed temperature stable, or oscillating?

    The A and C values look reasonable.

    It's always been pretty solid to be honest. I've been chasing a bit of Z banding from the start when I built it, but it's starting to look like it might be mechanical.

    I'm running M307 H0 S140 on the bed right now, so my understanding is that I run M307 H0 to see the test results, then M500 to save them in the config.g?



  • This is what I got:

    M307 H0
    Heater 0 model: gain 149.3, time constant 841.4, dead time 0.4, max PWM 1.00, calibration voltage 23.6, mode PID, inverted no, frequency default
    Computed PID parameters for setpoint change: P2289.7, I119.068, D704.4
    Computed PID parameters for load change:

    M307 H1
    Heater 1 model: gain 589.7, time constant 308.5, dead time 4.4, max PWM 1.00, calibration voltage 23.9, mode PID, inverted no, frequency default
    Computed PID parameters for setpoint change: P21.0, I0.568, D65.4
    Computed PID parameters for load change: P21.

    It would seem that M500 didn't work?

    M500
    Warning: No M501 command was executed in config.g



  • @Corexy
    The parameters are stored to config-override.g
    But you have to put a M501 at the end of config.g to read them.

    Edit:
    https://duet3d.dozuki.com/Wiki/Gcode#Section_M500_Store_parameters


  • administrators

    Alternatively, copy the new M307 parameters to your M307 command in config.g.



  • M307 H0
    Heater 0 model: gain 149.3, time constant 841.4, dead time 0.4, max PWM 1.00, calibration voltage 23.6, mode PID, inverted no, frequency default Computed PID parameters for setpoint change: P2289.7, I119.068, D704.4 Computed PID parameters for load change:

    M307 H1
    Heater 1 model: gain 589.7, time constant 308.5, dead time 4.4, max PWM 1.00, calibration voltage 23.9, mode PID, inverted no, frequency default Computed PID parameters for setpoint change: P21.0, I0.568, D65.4 Computed PID parameters for load change: P21.


  • Moderator

    It's easiest to save with M500 and then copy the actual parameter line from there rather than trying to reconstitute it from the text read out, or just add M501 to the end of config.g.



  • @Corexy said in PID Controlled Heated Bed:

    M307 H0
    Heater 0 model: gain 149.3, time constant 841.4, dead time 0.4, max PWM 1.00, calibration voltage 23.6, mode PID, inverted no, frequency default Computed PID parameters for setpoint change: P2289.7, I119.068, D704.4 Computed PID parameters for load change:

    M307 H1
    Heater 1 model: gain 589.7, time constant 308.5, dead time 4.4, max PWM 1.00, calibration voltage 23.9, mode PID, inverted no, frequency default Computed PID parameters for setpoint change: P21.0, I0.568, D65.4 Computed PID parameters for load change: P21.

    Or............ A=gain, C= time Constant, D=Dead Time and optionally, S = PWM V=voltage. So M307 for heater 1 would be
    M307 H1 A589.7 C308.5 D4.4 S1.0 V23.9 B0


Log in to reply