Using Multiple Bed Heaters

  • Firstly, merry Christmas.

    Sitting with family and contemplating bed heaters.

    dc42 mentioned on the RepRap forum that the Duet now supports multiple bed heaters with the new firmware. I remember seeing something about that here but the post is tangled in the chaparral of recent forum activity, and defies the search feature.

    What do I need to add to config.g to set, say, the E4 Heater and E4 Thermistor as another bed controller (to external relay)?

    Once working, does the temperature of an additional bed heater get reported as part of the normal gcode terminal stream from the Duet?

    For the curious, I have 5 bed heater zones; four square silicone heaters plus a nichrome perimeter wire. There aren't enough outputs to control each individually (there's also a 4 extruder toolhead to think about), but if I can at least get the perimeter wire on a separate output things will be shiny.


  • It looks like the process isn’t formally documented yet. A few comments on RC2 seem to describe how to set it up.

  • Thank you. The syntax is confusing but looks like dc42 is thinking of changing it.

    For completeness, the relevant posts:


    Please be aware that multiple bed heaters are not yet supported on DWC but in principle it is fairly easy to configure them. Assuming you want to map heaters 3-5 to heated beds leaving heater 0 as the first bed heater, you could send

    M140 P1 H3
    M140 P2 H4
    M140 P3 H5

    to the firmware to set everything up. Just make sure you don't put excessive load on the heater channels - in fact you may want to consider connecting an SSR to each of them before you continue.




    So, in practice, I'd set all four heaters to my target temperature (e.g. 80°C) and the Duet takes care that each zone reaches 80°C and stays at it. I know the zones will affect each other, but in the end, the Duet will figure out which zone to heat, right?

    That's correct. Currently you will need to send M140 P0 S80, M140 P1 S80, M140 P2 S80 and M140 P3 S80. Then M116 to wait for them all to reach temperature. M140 with no P parameter defaults to P0.

    I am considering making a couple of changes:

    1. Use M140 H0:2:3:4 to configure multiple bed heaters, instead of M140 P0 H0, M140 P1 H3 etc.

    2. Make M140 Sxxx (also M190) with no P parameter set the temperature of all bed heaters. So the bed temperature commands generated by slicers would apply to all bed heaters by default.

    These changes would also apply to the M141 command to configure and control chamber heaters.


  • Having trouble.

    Recap: I want to set the E4 heater output and E4 thermistor input on the Duex5 as a bed heater in addition to the normal bed heater output and thermistor input.

    If I turn on the bed, the E4 terminal block stays at 0v while the bed terminal block goes to 24v.

    This is the relevant part of my config.g:

    ; Heaters
    M143 H1 S300 ; Set maximum heater temperature for the extruder (in C). 
    M140 P2 H4;		;Tie the E4 heater (and thermistor) output (and input) to the bed heater. 
    M570 S400 ; Set maximum heating time (s)
    M305 P0 R4700 T100000 B3950   ; set bed thermistor parameters
    M305 P2 R4700 T100000 B3950   ; set bed thermistor parameters
    M305 P1 R4700 T100000 B4725 C7.06e-8   ; set E0 (extruder 0) thermistor parameters
    M307 H1 A421.2 C243.8 D3.9 B0				;Set the settings for the extruder heater (H1). 
    ; Define Tool 0 (Mono-Extruder)
    M563 P0 D0 H1 ; Define tool 0 (P0) to use drive 0 (D0) and heater 1
    G10 P0 S0 R0 X0 Y0    ; set tool 0 temperatures and offsets
    T0			; Select tool 0

    The Pnnn designations are confusing and I'll bet I have it wrong. I've confirmed the thermistor connection is good.

  • administrators

    I don't know of any slicers that support multiple bed heaters, so if you want to use more than just bed heater 0 you will need to set the temperatures of any additional bed heater up manually in your clicer start script, and turn them off in your slicer end script. Use the M140 P# S# command to set the temperature individually for each heater, and M116 to wait for all heaters to come up to temperature..

  • Ahhhhhhhhhhh. Thank you dc42.

  • If I send M140 P2 S50 I get,

    READ: Error: Temperature reading fault on heater 4: unknown temperature sensor channel

  • Looks like you don't have a M305 set up for that thermistor yet.

  • I thought I did:

    M305 P2 R4700 T100000 B3950   ; set bed thermistor parameters

    Should that be

    M305 P4 R4700 T100000 B3950   ; set bed thermistor parameters


  • I think it should indeed be P4 in the M305 command, as in

    M305 P4 R4700 T100000 B3950   

    But it's still not working. When sending M140 P2 S50 it returns:

    READ: Error: Temperature reading fault on heater 4: sensor open circuit

    So it goes from complaining that the temperature sensor channel is unknown to complaining that it's not connected, but it is connected. I have the thermistor plugged into the E4:ESSA/THERMISTOR5 and it reads ~100k at ambient, probed right at the Molex connector.

    Also tried setting M305 P5 R4700 T100000 B3950 just to be sure, but the error goes back to unknown temperature sensor channel.

  • administrators

    The E4 thermistor channel is channel 5. You have configured the second bed heater to use channel 4, which is the one labeled E3. They are offset by one because the bed thermistor is channel 0, therefore the E0 thermistor is channel 1, and so on.

  • Tried that too (see end of comment above), but that also gives me [c]READ: Error: Temperature reading fault on heater 4: sensor open circuit[/c].

    Just tried it again to be sure. Same.

  • administrators

    Did you remember to change your M140 command from M140 P2 H4 to M140 P2 H5 too?

  • I did not! Thank you David(?).

  • Closer by the day.

    My understanding is I can use M140 Hn Snn to turn on specific heater channels (H0, H5, H6, and H7 in my case), but the way the config file is set up, M140 P2 Snn should turn on ALL of the linked heaters. Is that right?

    The current primary problem is that I get the ""temperature rising much more slowly than the expected 0.7C/sec" error very quickly after turning on a heater, but if I try to autotune H5 (for example) with M303 H5 S60, I get

    READ: Heater is not ready to perform PID auto-tuning

    What's going on here?

  • ALSO,

    I can't use M140 Hn Snn to turn on more than one heater at a time. For example, if I send M140 H5 S50, that heater goes on, but if I then send M140 H6 S50, it switches to H6 instead of keeping both H5 and H6 on.

  • administrators

    I have condensed your reports into the following:

    1. Unable to autotune a heater that is assigned as an additional bed heater because of "not ready" message. Did you clear the heater fault before you sent the M303 command?

    2. M140 H6 S50, it switches to H6 instead of keeping both H5 and H6 on. This is the correct behaviour, because that command both assigns heater 6 to bed heaster 0 (because the P parameter defaults to 0) and switches it on. To control a bed heater, use M140 P# Snn where # is the bed heater number you want to control.

    3. "My understanding is I can use M140 Hn Snn to turn on specific heater channels (H0, H5, H6, and H7 in my case), but the way the config file is set up, M140 P2 Snn should turn on ALL of the linked heaters. Is that right?"

    No. You should not normally use both H and S in the same command. The H parameter assigns that heater number to the bed heater number that you specify in the P parameter. You would normally use M140 with an H parameter only in config.g because you will use a fixed assignment of bed heater numbers to heater channels. Subsequently, to control a bed heater, use M140 P# Snn.

    HTH David

  • Thank you for the attentiveness David.

    You know, the default H0 heater model settings work fine. Could you possibly report those settings so I can apply them to the other bed heaters as a starting point?

    I think tuning these heaters will be a bit of a pain since they will behave differently when turned on individually versus all at once.

  • administrators

    Just send M307 H0 to get the current settings for heater 0.

  • ::facepalm::


  • Here's a summary of what I did to get multiple bed heaters working, thanks to a lot of hand-holding:

    1. 4 bed heaters, connected to the default bed heater as well as the E4, E5, and E6 heaters on the Duex5.
    2. The bed heaters are configured in config.g as follows:

    ; ###Configure Bed Heaters###
    M140 P0 H0		;Tie the E4 (H5) heater and thermistor to P0 as a bed heater. This is so by default but included for visual consistecy in this file.
    M140 P1 H5		;Tie the E4 (H5) heater and thermistor to P5 as a bed heater. 
    M140 P2 H6		;Tie the E5 (H6) heater and thermistor to P6 as a bed heater. 
    M140 P3 H7		;Tie the E6 (H7) heater and thermistor to P7 as a bed heater. 
    M305 P0 R4700 T100000 B3950       ;Set thermistor parameters
    M305 P5 R4700 T100000 B3950   
    M305 P6 R4700 T100000 B3950   
    M305 P7 R4700 T100000 B3950   
    M307 H0 A90.0 C700.0 D10.0 B1		;Set heater model settings
    M307 H5 A90.0 C700.0 D10.0 B1
    M307 H6 A90.0 C700.0 D10.0 B1
    M307 H7 A90.0 C700.0 D10.0 B1
    M143 H0 S120 ; Set maximum heater temperature.
    M143 H5 S120 ;
    M143 H6 S120 ;
    M143 H7 S120 ; 
    M570 H0 S1200 ; Set maximum heating time (Snnn, in seconds).
    M570 H5 S1200 ; 
    M570 H6 S1200 ; 
    M570 H7 S1200 ; 

    3. If I want to turn all the bed heaters on and set them to nn*C, I send:

    M140 P0 Snn
    M140 P1 Snn
    M140 P2 Snn
    M140 P3 Snn	
    M116		;wait for all heaters to stabilize


    -M140 P0 Snn is the default heater output, so if a heated bed is specified in the slicer settings this will be redundant.
    -If adding this to the start script in Simplify3D, it seems better to remove the normal bed heater from the Temperature Tab altogether. Otherwise, the start script doesn't run until after the first heater zone has come up to temperature and stabilized, which means a single heater needs to fight against the thermal mass of the whole build plate before the other heaters are ever woken up, so it may not get up to temperature at all. It's still not great because the extruder will have come up to temperature and be sitting like that the whole time the bed is coming up to temperature. But unchecking "wait for temperature controller to come up to temperature before beginning build" for the extruder helps so at least everything comes on at the same time.
    -Hopefully Simplify3D will soon support multiple bed heaters. Someone on the Simplify forum claims it already does (, but I don't know what they're talking about. I posted on that forum to address the question.

Log in to reply