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

Have you re calibrated the PID settings since installing the new hotend? I seem to recall that someone else had similar issues related to the different power to thermal mass ratio of alternative hot ends, but I'm not sure how they fixed it.

Share this post

Link to post

Share on other sites

I have not, just found the thread, thank you. The issue in that thread was not resolved but Daid said on 12/19/13 that new U1 firmware would be coming with the next Cura update, which should fix the PID bugs. Has there been a firmware update since then?

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:

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:

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.

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

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 on other sites

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.