After PID tuning extruder still overshoots on temp.

My Diamond hot end clogged so I switched to a V6 bowden fed single nozzle. While bridging a large area my heater (same that was in the diamond) struggled to stay at 230 C and dropped to 226 before I slowed down the cooling fan. It slowly heated up to 230 and after the bridging was done it continued to climb to 251 and trigger decoupling error despite full fan and increased feedrate. Same thing before and after PID tuning ( M303 E0 S230 C6) and entering the new values. Any ideas how to fix this overshoot?


  • Once temperature is out of the PID_CONTROL_RANGE windows heater will kick in full or be disabled. Make sure fans never make it move outside this windows. In general PID always will have overswings when temperature changed too much. M303 has different PID solutions controlled by C parameter (0-4 in 1.0.2) that behave a bit differently, so you could test if any of them reacts better. It is impossible to say take these values without knowing your system, so it is more experimenting. 

    For the decoupling problem you can increase the variance of course, bat that is not the real problem you want to solve I guess.
  • Does the PID_CONTROL_RANGE  have a max value of 20 ? As we do not seem to be getting any higher values.
    If so, please document this in the firmware.
    Is there any way to increase this over 20?

  • Yes 20 is default value. You can change it in the configuration. Online it is not changeable.
  • I mean 20 is the maximum value.
    If we set it to 60, it still only goes to 20.
    So if we set this value at 60. then set the extruder to 200, it will start doing its PID thing at 180, not at 140.
  • No, that is not true. In Extruder.cpp you have

    } else if(error > PID_CONTROL_RANGE) { // Phase 1: full heating until control range reached
    output = act->pidMax;
    act->tempIState = act->tempIStateLimitMin;
    if(act->heatManager == HTR_DEADTIME) {
    act->tempIStateLimitMax = act->pidDriveMax;
    act->tempIStateLimitMin = 0;
    } else if(error < -PID_CONTROL_RANGE) // control range left upper side!
    output = 0;

    Searching for PID_CONTROL_RANGE I did not find any line changing the set value to limits. But you need to reupload the firmware.
Sign In or Register to comment.