Multiple/Combined Thermistors for a single Tool (Heatbed)

  • Hello,

    is it possible to actually make use of multiple thermistors for a single tool, especially the heatbed?

    I have a silicone heatmat with an integrated thermistor, which is bonded to an 8mm thick aluminium plate. I'd like to install thermistor on the aluminium plate, too, somewhere on an outermost corner, to actually read the temperature of the aluminium plate, and not only of the silicone mat. This way I can differentiate and tell how hot the mat and the plate are.

    Similar to that I may want to use two thermistors for my hotend, since I'm going to install a watercooling - on thermistor (PT100) for the heatblock and maybe one for the water temperature.

    At all the additional thermistors must not be usable in terms of gcode, but I'd like to be able to read them at least somewhere.

    Best regards,

  • administrators

    You can do that with the 1.19beta firmware. Use M305 to create a virtual heater for each additional thermistor, starting at heater number 103. See

  • Hi,

    another question:
    Especially for larger print beds one temperature measurement is not "enough" to define the temperature of the bed.

    Using virtual sensors more than one sensor can be linked to a single heater.

    But is it somehow possible to control the average temperature of multiple sensors (thermistors) ?

    If the electric relation between e.g. "resistance" and temperature would be linear, it could be done with simple wiring. Unfortunately PTC thermistors are not linear at all.

    In case the bed has multiple heating zones, one could setup multiple heaters for multiple sensors. Unfortunately if these heating zones are controlled with single input single output PID-loops, this will/might not work well, because of the interaction.

    Maybe one cold use a NiCr heating wire put evenly spaced and well mounted under the bed as "average temp sensor" ?

  • administrators

    If the bed has just a single heater and a good heat spreader then you could just connect your multiple thermistors in parallel. The heat spreader will ensure that the temperatures at the thermistors don't differ by more than a few degrees, in which case the effect of non-linearity won't be significant.

  • that is a good point, in the high temp region (100 °C) this will for sure work, and probably also in the "low temp" (e.g. 40 °C) region

    In case somebody tries it, one comment:
    If two thermistors are used, just connecting them in parallel is not enough.

    The total resistance of 2 resistors is
    Rges = R1*R2/(R1+R2)

    But what is wanted is
    Rges* = (R1+R2)/2

    so Rges* <> Rges

    To get approximately there, one has to connect 2 of the same thermistors in series and than connect these 2 "pairs" in parallel.
    This still gives slightly smaller values than wanted. In case more than 2 thermistors are used, it gets quickly unusable.

    The better approach is to connect them in series and to adjust the T-value accordingly (for two thermistors double T and so on). This will represent the real average better and easier.

  • administrators

    Connecting them in parallel is OK but of course you need to reduce the T parameter in your M305 command to allow for the lower resistance. For example, with two thermistors in parallel, halve the T parameter.

    I suggested using a parallel connection instead of a series connection so that if the temperatures of the two thermistors are significantly different, the hotter one will have a more dominant effect. If you connect them in series then the cooler one will dominate.

    OTOH with the series connection, if the connection to either thermistor breaks, then the combination as a whole will be open circuit, which will be detected by the firmware and is safer.

  • If we assume linear relations, why does in series connection the cooler dominate ?

    When using 2 thermistors, we want Rges* = (R1+R2)/2. When T is adjusted to T/2 this is exactly what happens when connecting them in series.

    Taking the nonlinear behavior into account, Rges would be higher and by that showing a smaller temperature than it has.

    A parallel connection will also show a sightly too small value, even with linear relations.

    R1 = 105
    R2 = 95

    Rges in series = (105 + 95)/2 = 100 (T value adjusted to T/2)
    Rges in parallel = 105*95/(105 + 95)2 = 99.75 (T value adjusted to T2)

  • administrators

    If we assume linear relations then neither thermistor dominates in the series case. But the relationship is not linear: the resistance change per degC is smaller as the thermistors get hotter. That is why I said that the cooler thermistor will dominate. In an extreme case, if one of the thermistors fell out of the bed and was at room temperature instead, the bed could reach infinite temperature but the temperature calculated from the total resistance would only be about 40C

  • now it is clear to me, that was what i meant with

    Taking the nonlinear behavior into account, Rges would be higher and by that showing a smaller temperature than it has.

    To sum it up, in case a thermistor breaks completely, connection in series is better, because it auto detects the problem, in case a thermistor is completely wrong (too cold) but still alive, connection in parallel would be better.

    So it is a lose or lose situation;)

  • administrators

    Yes, that about sums it up.

  • If I want to connect a second thermistor for a virtual heater do i connect to Pin 35 for thermistoR3 but the other wire goes to ground? I could not find a wiring diagram.

    M305 P103 T100000 R1000 B4200 STEMP2 but how do i tell it is Thermistor3


  • administrators

    The other wire should go to AGND.

    Add parameter X3 to that M305 command to tell it to use thermistor 3 (the one labelled E2).

  • Great thanks David

  • Ok gots things hooked up and setup, my questione is wheere do i find the reading in the Web Control if you can see it that is?
    Under Extra I have only a MCU which has always been there.

    ok found out this:

    M305 P103
    Heater 103 uses Thermistor sensor channel 3, T:100000.0 B:4700.0 C:0.00e+00 R:1000.0 L:0 H:0

    does this meah I have to create a tool Heater 103?

  • @dc42:

    …. (the one labelled E2).

    Sorry but I can,t find a E2 there are other two like E2_Step, E2_N amd more. (which you surly know 🙂 )I thought it was the Pin 35 Labeled Thermistor3-

    Before I burn something I would rather be sure. Thanks

  • administrators

    Yes it's the pin labelled Thermistor 3 if you are connecting directly to the expansion connector.

  • Strange then, please what is the G code to read the temperature as I can not find it.
    Also I see nothing the the Web Control.

    Just a thought is there a specific GND to use I used Pin 42.

  • administrators

    Connect it to the AGND pin (also called VSSA), not GND.

    You will find the additional temperature in DWC if you follow the Extra link above the heaters display, provided that you give the heater a name in the M305 command.

  • Thanks David did not know VSSA was also called AGND…

    I thought it was a typo error and you wanted to say a GND. 🙂

  • Not so good I'm getting a reading of 1100,00 .
    Now if I connect to the main bedheater connector I get the same value as the one there is now.
    So I know its not the thermistor giving strange readings seeing when connected there it works.
    Gave it a name etc. I tried different B and R values but nothing it may go a low as 600C.
    Any ideas as to why itws not giveing correct readings. Connected to Pin 35 and 40 on the expansione bus.

    This is my setup I copied the first heater 0 settings
    ; Heaters
    M305 P0 T100000 B3950 C0 R4700 ; Set thermistor + ADC parameters for heater 0
    M143 H0 S120 ; Set temperature limit for heater 0 to 120C
    M305 P1 T100000 B4725 C7.060000e-8 R4700 ; Set thermistor + ADC parameters for heater 1
    M143 H1 S280 ; Set temperature limit for heater 1 to 280C
    M305 P103 T100000 B3950 C0 R4700 S"TEMP2" X3


Looks like your connection to Duet3D was lost, please wait while we try to reconnect.