Jump to content
Ultimaker Community of 3D Printing Experts
dbotos

temperature sensor setting for Ultimaker Original heated bed upgrade?

Recommended Posts

I recently purchased the heated bed upgrade kit for my Ultimaker Original. Hardware installation went fine, but now I'm having a problem with firmware/software. I have a direct-drive extruder, so it needs custom firmware to set steps per e correctly. I've been using Ginge's Marlin firmware builder to do that (http://marlinbuilder.robotfuzz.com/).

If I select the PT100 sensor (which made sense since the installation instructions for the heated bed mention plugging in the PT100 sensor), Cura thinks the bed is already at 70 °C when it's really at room temperature (~20 °C). I also tried the "Basic Ultimaker + heated bed (100k therm, relay driven)" option next to Templates, which chooses the sensor "100k thermistor - best choice for EPCOS 100k (4.7k pullup)", but that's even worse, showing the bed as 146 °C when only at room temperature.

What is the correct temperature sensor option for the heated bed upgrade (see attached list)? Do I need to tweak other settings elsewhere? The heated bed checkbox in Cura's Machine Settings is checked, so it definitely know there's one there (or else it wouldn't display bed temperature at all).

heated_bed_temperature_sensor_options.png.a23b0c27d23e4ac0c76a53590f1a5340.png

Thanks,

David

heated_bed_temperature_sensor_options.png.a23b0c27d23e4ac0c76a53590f1a5340.png

Share this post


Link to post
Share on other sites

Hi David,

You should use; "PT100 circuit found in the Ultimainboard V2.X".

Have you checked the installation manual note on page 26?

I've looked a little into this and think the problems seem to be in the Ginge's Marlin builder software, since you cannot deselect the "old" reference amplifier used for the "K-thermocouple", the AD595. This old temp ref is added to the new absolute temp sensor and make this error reading.

I'll guess someone have a suggestion for this, but the best will be to have the software you're using updated to cope with this problem.

The manual is here:

https://ultimaker.com/en/resources/249-assembly-manual

Thanks.

Torgeir

Edited by Guest

Share this post


Link to post
Share on other sites

Thanks for the replies. I did not get email notifications, hence my late response.

I tried the firmware builder in the link from gr5. I chose the "Ultimaker Original with HBK", which selects "The PT100 circuit found in the Ultimainboard V2.x" for heated bed temperature sensor. Inverted the extruder axis and that was all I changed. Uploaded new firmware and it thinks the bed is at 71 °C when at room temperature.

I looked at the main board just now and it says Version 1.5.6. I purchased my machine back in March of 2012. I'm assuming the heated bed temperature sensor circuitry on the earlier board is different than the 2.x versions and the cause of the reading error.

Share this post


Link to post
Share on other sites

heated bed upgrade kit should have included a little board that converts the temperature. Also you need to remove the 4.7k resistor on the bed sensor circuit if you had inserted one long ago. Actually the 4.7k resistor issue is common for many people who built their own heated beds. Make sure no one installed one on your 1.5.6 board.

Share this post


Link to post
Share on other sites

Well something is wrong somewhere. At room temp the bed resistor should be about 108 ohms and the little board (not shown in picture) converts that to some voltage between 0V and 5V and sends that to this bigger board (shown). Something somewhere in that long path is broken. I don't know what parts to probe other than the 108 ohms.

Share this post


Link to post
Share on other sites

PT100 sensor resistance, measured at the connector that plugs into the little board (with the connector unplugged) is 108.8 Ω at 73 °F [22.78 °C]. Theoretical value for a PT100 at this temperature is 108.86 Ω, so close enough considering the accuracy of the thermometer and multimeter.

What can I check next? Any way to ping the Ultimaker from the computer for raw voltage of the temperature signal?

Share this post


Link to post
Share on other sites

Looks like the PT100 comes in on J3 (2-pin) of the little board and the outgoing voltage to the main board is on J1 (3-pin):

heated_bed_PCB_PT100_schematic_chunk.thumb.png.c8eb3da74670a335bb5bb6b7d599e720.png

That INA826 (U1) is a Texas Instruments instrumentation amplifier (see formulas on right side):

INA826_diagram.thumb.gif.e9fae1346341a6144f918c06b38609e6.gif

If I've done my calculations correctly (assuming the capacitors act like opens at steady state), then the output voltage should be ~1.2 V at room temperature and ~1.4 V when the bed is at 70 °C:

heated_bed_INA826_calcs.thumb.png.c50709297c34927a13f737af9d001942.png

heated_bed_PCB_PT100_schematic_chunk.thumb.png.c8eb3da74670a335bb5bb6b7d599e720.png

INA826_diagram.thumb.gif.e9fae1346341a6144f918c06b38609e6.gif

heated_bed_INA826_calcs.thumb.png.c50709297c34927a13f737af9d001942.png

  • Like 2

Share this post


Link to post
Share on other sites

Little PCB's J1 connector reads 1.217 V across pins 1 and 3 where it goes into the board. Pin 1 (blue wire) is ground, pin 3 (red wire) is V_out. Tracing those same colors to the big board, I get the same voltage on the Temp 3 connector where it goes into the board. Looks like that is correct as measurement was taken with ambient a little above 20 °C.

On the big board, that V_out goes into ADCH pin 3, which I'm assuming is the high side of an analog-to-digital converter. My main board does not have R4 installed:

main_board_1_5_6_schematic_temp_3.thumb.png.1fe31e7c4a2a0770d5b71e07e0771cc6.png

main_board_1_5_6_schematic_temp_3.thumb.png.1fe31e7c4a2a0770d5b71e07e0771cc6.png

Share this post


Link to post
Share on other sites

I agree - it's most likely a firmware issue. Maybe you said this already - but where did you get your firmware? Ideally you want to get the latest Cura and tell it that you have a UMO (not UMO+) with the heated bed (maybe you chose umo+ by accident?). Then update the firmware. Or you can choose custom update and look through the choices.

Share this post


Link to post
Share on other sites

I have Cura 15.04.5, which is latest non-beta. I have a custom direct-drive extruder, so I need custom firmware to invert that axis and tell it steps per e. I had used Ginge's Marlin builder prior to getting the heated bed kit. I also tried the bultimaker Marlin builder, but unfortunately, it doesn't have a choice for my situation, which is the following three elements:

1) PT100 RTD heated bed temperature sensor

2) Main board version 1.5.6 (it has one for 2.x main boards)

3) No 4.7 kΩ pullup resistor (it has choices for PT100 with 4.7 kΩ and 1 kΩ pullups; no mention of main board version on those)

So I think I either need to find a Marlin builder than can combine those three elements or I might have to build my own Marlin firmware (which I've never done before).

Share this post


Link to post
Share on other sites

Yes. What @Torgeir said. You can adjust steps/mm from the control panel. Make sure you do a save or you will lose that value the next time you power up the printer. And if needed, to reverse an axis swap just two wires in the extruder connector (the two wires of either twisted pair).

Source:

http://reprap.org/wiki/Stepper_wiring#Motor_moving_the_wrong_direction

Share this post


Link to post
Share on other sites

Hmm., maybe another one, find the X thermistor (the thermistor supposed to be used on your UMO back then) by using a resistance bridge to find zero deg. Celsius, then same method to find the resistance for the 100 deg. Celsius value.

Those two temperatures are good calibration points to use when setting up your system.

Armed with this numbers it might be easy to adjust the Rg "gain resistor" in order to match the actual value the firmware use for the key temperatures.

Edit: You might need to adjust the offset for zero and the gain for 100 deg. Celsius.

Should be possible as an alternative solution?

Thanks

Torgeir.

Edited by Guest

Share this post


Link to post
Share on other sites

I'm hoping I can do everything with the firmware and not have to mess with the hardware. The steps per e for the extruder and inversion of the extruder axis seem simple to change in the Marlin configuration.h file prior to compiling:

#define DEFAULT_AXIS_STEPS_PER_UNIT {x,y,z,e} where x,y,z, and e are the steps per unit of that particular axis

#define INVERT_E0_DIR true

For the heated bed temperature sensor, it looks like it refers to a portion of the thermistortables.h file based on the chosen temperature sensor from a list of pre-defined sensors. I'm guessing it would be possible to make another choice and necessary data in the thermistortables.h file that works for my setup. I looked at the PT100 circuits in the 2.1.1 main board schematic (since one of the sensor choices in thermistortables.h is the PT100 circuit found in the 2.x main board) and it's just like the one on the little heated bed kit board - same flanking resistors and R_G. The V_out on the third PT100 circuit in the 2.1.1 schematic (assuming for heated bed, as first two should be for nozzle heaters) goes right to ADC10 with no pullup:

2_1_1_main_board_temp_3.thumb.png.f7c0850fb928bb63ab7b13ba55ed9193.png

If you look at the Temp 3 portion of the 1.5.6 main board schematic (posted earlier), it also goes to ADC10 (same as ADCH3) if no R4 present (which is the case on mine). So it seems like that choice should have worked when I was using the online firmware builders.

Here's a link to the 2.1.1 main board electronics:

https://github.com/Ultimaker/Ultimaker2/blob/master/1091_Main_board_v2.1.1_%28x1%29/Main%20Board%20V2.1.1.pdf

2_1_1_main_board_temp_3.thumb.png.f7c0850fb928bb63ab7b13ba55ed9193.png

Share this post


Link to post
Share on other sites

Hi David,

I've been looking into this many times and think that it is the look up table for the thermistors that's in error. This table shall contain the "offset value" (the value at zero deg. Celsius, water with ice cubes that's stirred to keep mixture at zero) and the "gain value" (boiling water 100 deg. Celsius at sea level). PT100 offset value (at zero deg.) is 100 ohm, will give 1.111 volt output from the extra PCB in your heat bed kit.

Actually, this table (in C) might be around some place I'm sure.

OK. Good Luck.

Torgeir.

Share this post


Link to post
Share on other sites

Torgeir,

I think you're right. My circuitry is functionally identical to what's in the 2.1.1 main board so the bed temperature sensor ID choice of "20" (PT100 circuit found in the Ultimainboard V2.x) should be correct.

Here's what the sensor ID "20" section of thermistortables.h says:

 

#if (THERMISTORHEATER_0 == 20) || (THERMISTORHEATER_1 == 20) || (THERMISTORHEATER_2 == 20) || (THERMISTORBED == 20) // PT100 with INA826 amp on Ultimaker v2.0 electronics/* The PT100 in the Ultimaker v2.0 electronics has a high sample value for a high temperature.This does not match the normal thermistor behaviour so we need to set the following defines */#if (THERMISTORHEATER_0 == 20)# define HEATER_0_RAW_HI_TEMP 16383# define HEATER_0_RAW_LO_TEMP 0#endif#if (THERMISTORHEATER_1 == 20)# define HEATER_1_RAW_HI_TEMP 16383# define HEATER_1_RAW_LO_TEMP 0#endif#if (THERMISTORHEATER_2 == 20)# define HEATER_2_RAW_HI_TEMP 16383# define HEATER_2_RAW_LO_TEMP 0#endif#if (THERMISTORBED == 20)# define HEATER_BED_RAW_HI_TEMP 16383# define HEATER_BED_RAW_LO_TEMP 0#endifconst short temptable_20[][2] PROGMEM = {{         0*OVERSAMPLENR ,       0     },{       227*OVERSAMPLENR ,       1     },{       236*OVERSAMPLENR ,       10     },{       245*OVERSAMPLENR ,       20     },{       253*OVERSAMPLENR ,       30     },{       262*OVERSAMPLENR ,       40     },{       270*OVERSAMPLENR ,       50     },{       279*OVERSAMPLENR ,       60     },{       287*OVERSAMPLENR ,       70     },{       295*OVERSAMPLENR ,       80     },{       304*OVERSAMPLENR ,       90     },{       312*OVERSAMPLENR ,       100     },{       320*OVERSAMPLENR ,       110     },{       329*OVERSAMPLENR ,       120     },{       337*OVERSAMPLENR ,       130     },{       345*OVERSAMPLENR ,       140     },{       353*OVERSAMPLENR ,       150     },{       361*OVERSAMPLENR ,       160     },{       369*OVERSAMPLENR ,       170     },{       377*OVERSAMPLENR ,       180     },{       385*OVERSAMPLENR ,       190     },{       393*OVERSAMPLENR ,       200     },{       401*OVERSAMPLENR ,       210     },{       409*OVERSAMPLENR ,       220     },{       417*OVERSAMPLENR ,       230     },{       424*OVERSAMPLENR ,       240     },{       432*OVERSAMPLENR ,       250     },{       440*OVERSAMPLENR ,       260     },{       447*OVERSAMPLENR ,       270     },{       455*OVERSAMPLENR ,       280     },{       463*OVERSAMPLENR ,       290     },{       470*OVERSAMPLENR ,       300     },{       478*OVERSAMPLENR ,       310     },{       485*OVERSAMPLENR ,       320     },{       493*OVERSAMPLENR ,       330     },{       500*OVERSAMPLENR ,       340     },{       507*OVERSAMPLENR ,       350     },{       515*OVERSAMPLENR ,       360     },{       522*OVERSAMPLENR ,       370     },{       529*OVERSAMPLENR ,       380     },{       537*OVERSAMPLENR ,       390     },{       544*OVERSAMPLENR ,       400     },{       614*OVERSAMPLENR ,       500     },{       681*OVERSAMPLENR ,       600     },{       744*OVERSAMPLENR ,       700     },{       805*OVERSAMPLENR ,       800     },{       862*OVERSAMPLENR ,       900     },{       917*OVERSAMPLENR ,       1000     },{       968*OVERSAMPLENR ,       1100     }};#endif

 

Near the top of thermistortables.h is a line that says:

 

#define OVERSAMPLENR 16

 

So if we go back and plug that into the table, we get:

 

0	03632	13776	103920	204048	304192	404320	504464	604592	704720	804864	904992	1005120	1105264	1205392	1305520	1405648	1505776	1605904	1706032	1806160	1906288	2006416	2106544	2206672	2306784	2406912	2507040	2607152	2707280	2807408	2907520	3007648	3107760	3207888	3308000	3408112	3508240	3608352	3708464	3808592	3908704	4009824	50010896	60011904	70012880	80013792	90014672	100015488	1100

 

I'm assuming the first column is the digital value of the A-to-D converter and the second column is temperature in °C. If a digital zero (first row, first column) is equivalent to zero volts analog, then the table is saying a PT100 at 0 °C would read 0 Ω (which we know is not true - it's 100 Ω, as you said and is the namesake of the sensor).

So the next question, in order to fix the table (assuming it's not calculating in some other offset elsewhere that I'm oblivious to), is what's the A-to-D conversion factor (i.e. if I have X volts analog going into the ADC, what do I multiply that by to get the digital value in that first column of the table)?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Terms of Use Privacy Policy