PID帕尔帖温度控制

问题描述 投票:0回答:1

早上好, 我正在开发使用珀耳帖元件的 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;
}
c embedded temperature pid-controller
1个回答
0
投票

当您说“振荡”时,您的意思是它不再受到控制,还是只是在设定点附近打开和关闭,就像您期望保持设定点一样?

Ki 项通常仅适用于需要输出来维持设定点的系统。例如,电机速度控制器需要连续的非零输出来维持运动,而position控制器则不需要。

从这个意义上说,温度控制器类似于或位置控制器,外部影响(环境热量)将使系统偏离设定点,Kp 项将增加以应用输出来纠正它。

为了防止比例控制器振荡,您可以添加 Kd(微分)项而不是 Ki。微分项提供“阻尼”以防止输出快速变化。使用另一个控制系统类比 - Kp 项就像车辆悬架中的弹簧,其中 Kd 就像阻尼器/减震器。这又是一个位置

型控制系统,其中 PD 比 PI 更有意义。

在您的情况下,I 项将保持对连续环境热量输入的输出补偿,但这是系统外部的并且不是连续的,固定积分项可能不合适。它还会对响应中固有的滞后做出反应,这可能是导致积分结束的原因。在响应滞后的系统上使用 PID 控制器无论如何都会出现问题。

另一点需要考虑的是你的更新率。快速更新速率需要更小的系数,可能比您正在使用的更小。在任何情况下,更新速率都不需要比系统带宽高很多倍,对于冷却水来说,系统带宽可能非常低(取决于流体的体积)。反应慢的系统的更新率太高将导致不适当的输出响应,包括积分饱和。比例响应是有意义的,但需要以较低的速率应用,以便可以观察到先前控制的效果。

理想情况下,使用 PID 控制器,您可以对两个“方向”进行对称控制 - 在这种情况下是加热和冷却。但在您的情况下,冷却是您拥有的唯一控制,而加热是环境热量的一个功能。在这种情况下,您没有对称控制,PID 控制器可能不适合此应用。这里的“bang-bang”控制器可以在某个温度下打开珀耳帖,并在某个较低的温度下关闭(滞后)可能会更成功。

使用简单的开/关控制器,关闭时流体不会继续冷却,只会缓慢升温,使用足够精确和稳定的温度传感器,您可以将滞后设置得很低。系统不会受到高更新率的影响,但不能太慢。

这提出了另一个问题,你对

measurement

只字不提——它的精度或噪音。您的控制器可能对测量噪声而不是流体温度做出反应。

© www.soinside.com 2019 - 2024. All rights reserved.