早上好, 我正在开发使用珀耳帖元件的 PI/PID 水温控制器。
我在实现 PI/PID 控制器时遇到问题。
首先我创建了一个P控制器。当达到设定值时,误差值变为 0。问题是输出变为 0,然后开始振荡。 Kp 值减少了 40%,随后实现了 PI 控制器。
然而,问题在于积分器会遇到抗饱和设置。我怎样才能防止这种情况发生?
如果设定点不比当前温度低很多,则较低的 Ki 会导致问题。积分器的值太低,这意味着 PI 控制器无法调节温度。
我的代码已添加到此论坛
float PID_Update(PIDController *pid, float setpoint, float measurement)
{
/* Error signal */
float error = setpoint - measurement;
/* Proportional */
float proportional = pid->Kp * error;
/* Integral */
pid->integrator = pid->integrator + 0.5f * pid->Ki * pid->T * (error + pid->prevError);
/* Anti-wind-up via integrator clamping */
if (pid->integrator > pid->limMaxInt)
{
pid->integrator = pid->limMaxInt;
}
else if (pid->integrator < pid->limMinInt)
{
pid->integrator = pid->limMinInt;
}
/* Derivative (band-limited differentiator) */
/* Note: derivative on measurement, therefore minus sign in front of equation! */
pid->differentiator = -(2.0f * pid->Kd * (measurement - pid->prevMeasurement) + (2.0f * pid->tau - pid->T) * pid->differentiator) / (2.0f * pid->tau + pid->T);
/* Compute output and apply limits */
pid->out = proportional + pid->integrator + pid->differentiator;
if (pid->out > pid->limMax)
{
pid->out = pid->limMax;
}
else if (pid->out < pid->limMin)
{
pid->out = pid->limMin;
}
/* Store error and measurement for later use */
pid->prevError = error;
pid->prevMeasurement = measurement;
/* Return controller output */
return pid->out;
}
当您说“振荡”时,您的意思是它不再受到控制,还是只是在设定点附近打开和关闭,就像您期望保持设定点一样?
Ki 项通常仅适用于需要输出来维持设定点的系统。例如,电机速度控制器需要连续的非零输出来维持运动,而position控制器则不需要。
从这个意义上说,温度控制器类似于或位置控制器,外部影响(环境热量)将使系统偏离设定点,Kp 项将增加以应用输出来纠正它。为了防止比例控制器振荡,您可以添加 Kd(微分)项而不是 Ki。微分项提供“阻尼”以防止输出快速变化。使用另一个控制系统类比 - Kp 项就像车辆悬架中的弹簧,其中 Kd 就像阻尼器/减震器。这又是一个位置
型控制系统,其中 PD 比 PI 更有意义。在您的情况下,I 项将保持对连续环境热量输入的输出补偿,但这是系统外部的并且不是连续的,固定积分项可能不合适。它还会对响应中固有的滞后做出反应,这可能是导致积分结束的原因。在响应滞后的系统上使用 PID 控制器无论如何都会出现问题。
另一点需要考虑的是你的更新率。快速更新速率需要更小的系数,可能比您正在使用的更小。在任何情况下,更新速率都不需要比系统带宽高很多倍,对于冷却水来说,系统带宽可能非常低(取决于流体的体积)。反应慢的系统的更新率太高将导致不适当的输出响应,包括积分饱和。比例响应是有意义的,但需要以较低的速率应用,以便可以观察到先前控制的效果。理想情况下,使用 PID 控制器,您可以对两个“方向”进行对称控制 - 在这种情况下是加热和冷却。但在您的情况下,冷却是您拥有的唯一控制,而加热是环境热量的一个功能。在这种情况下,您没有对称控制,PID 控制器可能不适合此应用。这里的“bang-bang”控制器可以在某个温度下打开珀耳帖,并在某个较低的温度下关闭(滞后)可能会更成功。
使用简单的开/关控制器,关闭时流体不会继续冷却,只会缓慢升温,使用足够精确和稳定的温度传感器,您可以将滞后设置得很低。系统不会受到高更新率的影响,但不能太慢。
这提出了另一个问题,你对
measurement