Dual Loop PID, a accurate bed surface temperature

Interesting.

I also have a similar bed temperature monitoring setup on my Voron2 printer. The bed heating pad has a thermistor on it, and I have added a thermistor to the bottom of the aluminum plate ( voron2-mods/bed.md at master · KevinOConnor/voron2-mods · GitHub ).

At least on my printer I am able to get stable bed temperatures using some simple macros.

I have found that during normal printing there is a consistent temperature difference between the heater thermistor and the plate thermistor. Thus, the heater thermistor seems sufficient to control the bed during normal printing. (It is worth pointing out that neither sensor will report an accurate temperature for the bed surface - both sensors are at best a “proxy” for the surface temperature.)

The heater thermistor, however, is not a good proxy for bed temperature during initial heatup. So, I use a macro to get the bed to the initial temperatures.

[gcode_macro start_print_abs]
gcode:
    {% set BED_TEMP = 105 %}
    {% set EXTRUDER_TEMP = 245 %}
    {% set BED_HEAT = 115 %}
    {% set WAIT_CHAMBER_TEMP = 43 %}
    {% set WAIT_PLATE_TEMP = 95 %}
    # Prep
    G90                 ; absolute positioning
    # Warm chamber
    M104 S1
    M140 S{BED_HEAT}    # Set bed to heat chamber
    G1 X125 Y100 Z20 F800
    M106 S255         # Turn on layer cooling fan to distribute heat
    TEMPERATURE_WAIT sensor="temperature_sensor chamber" minimum={WAIT_CHAMBER_TEMP}
    TEMPERATURE_WAIT sensor="temperature_sensor bed_plate" minimum={WAIT_PLATE_TEMP}
    # Heat extruder
    M106 S0
    G1 X5 Y5 Z5 F4000
    G1 Z0.25 F400
    M140 S{BED_TEMP}
    M109 S{EXTRUDER_TEMP} # Wait for extruder temp
    M190 S{BED_TEMP}    # Wait for bed temp
    G92 E0

The above macro also includes code for heating the hotend and chamber.

The main idea, however, is to enable a high temperature for the heater PID during heatup, wait for the bed plate temperature to reach an intermediate temperature, and then lower the heater PID to its actual target temperature. One should be able to avoid overshoot by selecting an appropriate “intermediate temperature”.

Cheers,
-Kevin