<font face="Arial, Verdana">Yes, it shows exactly that it is not expected behaviour, so I checked the source for dev release. For lower temp range you have</font>
<font face="Arial, Verdana"> else if(error > PID_CONTROL_RANGE) // Phase 1: full heating until control range reached</font>
<font face="Arial, Verdana"> {</font>
<font face="Arial, Verdana"> output = act->pidMax;</font>
<font face="Arial, Verdana">
</font>
<font face="Arial, Verdana">which is PID max value. and in control range you get</font>
<font face="Arial, Verdana">
</font>
<font face="Arial, Verdana"><div> else if(act->heatManager == HTR_DEADTIME) // dead-time control
{
act->startHoldDecouple(time);
float raising = 3.333 * (act->currentTemperatureC - act->tempArray[act->tempPointer]); // raising dT/dt, 3.33 = reciprocal of time interval (300 ms)
act->tempIState = 0.25 * (3.0 * act->tempIState + raising); // damp raising
output = (act->currentTemperatureC + act->tempIState * act->deadTime > act->targetTemperatureC ? 0 : act->pidDriveMax);
}
so using pidDriveMax as you expect. So the code and what you expect is ok, result not. Not sure how you managed to get that error. Could you add after last output a log message:
Com::printFLN(PSTR("OUT:"),(int)output);
so you see in log what it sets output to at that point. I guess it is ok there and gets changed to bad value somewhere else.
</span></font></div>