Jump to content
Ultimaker Community of 3D Printing Experts
Sign in to follow this  

Massive initial temperature overshooting, then levels out?

Recommended Posts

I have been reading through some of the Ultimaker 1 temperature issues, but I haven't seen mine yet.

I've been using my Ultimaker since August and have been able to figure out every issue until now. My hotend was on its last legs, so I went ahead and installed an E3D hotend. I hooked everything back up (I also have a heated bed) but I have not been able to figure out why the hotend temperature will SKYROCKET past the input temperature:

ie, I enter 60, it shoots up to 130; I enter 160, it gets up to 230

Then it realizes it is way too hot and the temperature decreases, and finally reaches the correct temperature and stays there.

Has anyone else experienced this? The thermocoupler is brand new. Could it be something with the relay or the board?

I am out of ideas. If anyone has suggestions please let me know


Share this post

Link to post
Share on other sites

There are a few settings to deal with this. First of all I would cut P,I and D in half since you want less power. Especially P. That should help a little. Maybe cut it in half again if it still overshoots. You can play with these values with the ulticontroller but it's so much easier with pronterface:

printrun/pronterface/prontrface download:



Then you can also limit the max power setting for the heater if you want. Unfortunately you might be forced to do that.

#define PID_MAX 255 // limits current to nozzle; 255=full current
#ifdef PIDTEMP
//#define PID_DEBUG // Sends debug data to the serial port.
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
// is more then PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term

Above is a section from Configuration.h. You can limit PID_MAX to say 128 instead of 255 so it will put out half the power - this will make it heat up half as fast.

You can also open up the range of 10 degrees to something more reasonable - by the time your head is 10 degrees below the goal temp it's too late for the PID controller so make that 20 degrees. That alone should be a huge help. Unfortunately doing these Configuration.h changes requires a recompile of Marlin:

First get the source code files here:


Then edit Configuration.h – this is by far the hardest step and it's not bad. I recommend you go here:


and use that website only to get the Configuration.h file. Then run winmerge or some other diff program to compare the latest ErikZalm version of Configuration.h to the one from robotfuzz which is usually a few months behind. Edit the ErikZalm version to match the robotfuzz generated version. Make any other edits as necessary. It sound complicated but it is extremely clear and well commented. Sometimes with paragraphs of explanation.

configuration.h file detailed explanation:


Then you need to build Marlin. There are instructions that come with the erik zalm download in the "README.md" text file.

Basically you download and install arduino ide:


Then copy the sanguino software as explained in README file. Open Marlin.ino file in Arduino IDE by double clicking it (not pde file as stated in README - I think that's old). Select board as "Mega 2560" as explained in README file. Go to "file" "preferences" and select "verbose output" so you can find your hex file. Then build it by clicking the check box in the upper left corner. At the bottom you will see it compiling Marlin. At the end of this it says where the hex file is. If you are currently connected to your UM through USB you can just click "file" "upload" and you are done! But you should locate that hex file and save it somewhere along with the Configuration.h file used to create it so you can recreate the same version with maybe one change. Also you can upload the hex file using Cura in expert menu.

Alternatively you can build Marlin with somewhat more detailed step by step instructions the command line way (which I don't prefer):




Share this post

Link to post
Share on other sites

Hi Guys,

Reading this topic about P.I.D. values, power and temperatures, makes me wonder.

I'm working with a lot of different UM originals lately, and I was wondering why aprox. half of them can't keep up the temperature to 225/230 when the original 'Origami' fan kicks in.

Could It be there where some changes in parts specifications or those Firmware PID settings you refer to, in the last couple of months?

Reading this topic gives me the idea it might be possible to change those settings in the ulticontroller to get more power to the hotend?

Any of you walking encyclopaedia, knows if its possible, safe and witch ones to change.

Regards Kees


Share this post

Link to post
Share on other sites

Understanding the I value is important here. I is for integral (or sum) of the temp error. To calculate the I portion you find the error (actual temp minus goal temp) and you average that forever. You multiply that by the "I" constant to get how much heat to add. The I term basically tells you how much energy you need to achieve a steady state. It may take a while (a whole minute) for the I term to be accurate. Eventually it is guaranteed to be the exact right amount of energy to keep the nozzle at the goal temperature. Once you get there the P and D terms evaluate to nearly zero.

Once you turn on the fan, everything changes. The I term which has finally settled to the perfect amount is no longer valid. The nozzle cools, the I term slowly builds and eventually you settle on the new integrated error with the higher energy.

The latest Cura, by default, turns on the fan slowly for this reason. So that the I term has time to adjust to the new, colder, environment.

One possible firmware fix would be to print for a while with the fan off and then print for a while with the fan on and somehow read back the integrated error for both of those states. Find the difference in integrated error (think of it as the "base" power level needed to maintain temp with fan on and fan off). Then everytime the fan is switched on or off, you cheat and instantly bump the error by that amount.

That would require some changes to the code. I don't think this is critical as I just turn the fan on slowly.

The existing PID values are properly tuned and work quite well (but not for E3D nozzle) so I wouldn't mess with them other than maybe expand that 10 degree range of where they are used.


Share this post

Link to post
Share on other sites

Thank you all for the help. I thought I would mess around with the settings on the Ulticontroller first and had no luck. I tried every combination for decreasing the PID levels and the inverses as well, but the result was the same every time (btw what is the PID-C = 1 setting?).

Every increase in temperature resulted in an almost exactly doubled amount before it would slow down and return to the desired level, regardless of how small the increase.

I finally got frustrated and hooked it up to a 12v power supply and the problem VANISHED, although it would not have been enough to run the steppers. I connected the board fan to a separate power supply and turned off the nozzle cooling fan and the problem returned with a vengeance when I tried again. This leads me to believe that the heater is definitely getting too much power, but I'm still peeved that none of the 3 hours of tinkering with the PID settings amounted to squat.

So I guess my next step will be some tinkering in the config h file per GR5's much appreciated instructions and if anyone has more insight to my dilemma please holler back


Share this post

Link to post
Share on other sites


#define PID_MAX 255 // limits current to nozzle; 255=full current

This one thing alone is probably enough - it's like setting the max voltage to a lower voltage.


Every increase in temperature resulted in an almost exactly doubled amount


Were your increases more than 10 degrees above the current temperature? Because, again, PID feature is only used when it gets within 10 degrees.

pid-c is a constant used to give the head an extra boost of power when the extruder is moving fast - presumably because when you suddenly decide to melt twice is much plastic as normal you need a bit more power to keep the head at a constant temperature.


#define DEFAULT_Kc (1) //heating power=Kc*(e_speed)

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
Sign in to follow this  

  • Our picks

    • Ultimaker Cura | a new interface
      We're not only trying to always make Ultimaker Cura better with the usual new features and improvements we build, but we're also trying to make it more pleasant to operate. The interface was the focus for the upcoming release, from which we would already like to present you the first glance. 
        • Like
      • 122 replies
    • "Back To The Future" using Generative Design & Investment Casting
      Designing for light-weight parts is becoming more important, and I’m a firm believer in the need to produce lighter weight, less over-engineered parts for the future. This is for sustainability reasons because we need to be using less raw materials and, in things like transportation, it impacts the energy usage of the product during it’s service life.
        • Like
      • 12 replies

Important Information

Welcome to the Ultimaker Community of 3D printing experts. Visit the following links to read more about our Terms of Use or our Privacy Policy. Thank you!