PID tuning 50 W cartridge in Marlin Recently I decided to upgrade my Geeetech A10 (GT2560 v3.0 board) with E3D Chimera, Marlin 2.0.3 and more powerful 50&nbsp;W heater cartridge. I wired everything up and tried to PID tune the hot end, but I got a problem. 

When the tuning ends and I use the values with M301, the values are too agressive and the hot end initially overshoots more than 15&nbsp;&deg;C. After that the temperature is rock steady.



The tuned values are P=9.4 I=0.47 and D=46.4. 

I tried to change the values according the wikipedia table to no overshoot (P=3,13 I=0.47 and D=123.7), but it just made the temperature unstable. 

I also tried to tune the values manually but with no succes. I even tried to use zeros for all three gains but it just oscilated &plusmn;10&nbsp;&deg;C and still overshot.

My guess is that the cartridge is too powerful for the Marlin PID tuning.

Is there a setting in the firmware where I can set the PWM value for the PID tuning? To slow the heating down? I tried to use M301 E1 P0.25 S200 C10 but it seems that it didnt use the P parameter.

Or is there a way to manually tune the values without the printer? I've got an Arduin Uno and RPi Zero availible. Or do I have to buy another less powerful cartridge?
Besides the P, I and D values, you may also have to tune PID_FUNCTIONAL_RANGE and PID_INTEGRAL_DRIVE_MAX.

Basically, the functional range disables PID control when more than the set number of degrees away from the target temperature and just puts the heater to zero/maximum power. The integral drive max parameter limits the value of the integral term of the PID controller.

The RepRap wiki notes: (note this wiki is dated! some options might not be available)


  In Marlin, the parameters that control and limit the PID controller can have more significant effects than the popular PID parameters. For example, PID_MAX and PID_FUNCTIONAL_RANGE, and PID_INTEGRAL_DRIVE_MAX can each have dramatic, unexpected effects on PID behavior. For instance, a too-large PID_MAX on a high-power heater can make autotuning impossible; a too-small PID_FUNCTIONAL_RANGE can cause odd reset behavior; a too large PID_FUNCTIONAL_RANGE can guarantee overshoot; and a too-small PID_INTEGRAL_DRIVE_MAX can cause droop.


My hunch is that the functional range may be too small; the PID doesn't kick in until close to the desired temperature at which point you will already have overshot the target (due to the high power heater and delay in the measurements). Once you've overshot the target temperature the integral term starts growing (negative) which causes the massive undershoot.