When you say 30°C jump you mean immediately at a speed that is physical not possible?
There is only one function using pid drive min:
void TemperatureController::updateTempControlVars() {
if (heatManager == HTR_PID && pidIGain != 0) { // prevent division by zero
tempIStateLimitMax = (float)pidDriveMax * 10.0f / pidIGain;
tempIStateLimitMin = (float)pidDriveMin * 10.0f / pidIGain;
}
}
You see it is not really min/max but it limits the I part of the PID computation. Not sure you know how PID works, so I is integral part that builds over time. When you hold the temperature exact you would only need this part, so you can think of it as the range required to hold all the temperatures you want.
P is proportional part. It adds temperature difference * P to drive value. So if I is 127 and P=10 with bing 30°C too hot it will subtract 10*30 = 300 from your min value 127 becoming negative so resulting in 0. D is damping of that move and would reduce it.
So having a min I is of no help if you get the jump and otherwise works good. The problem is there should be no jump and normally there is none. Also if 5V is changing it would also change the 5V reference voltage I'd guess so no jump from this.
Have you already tried a different thermistor pin instead to see if that behaves the same?