在具有延迟的系统中调整pid

时间:2014-10-22 13:12:17

标签: delay temperature pid-controller

我需要在具有相当大延迟的系统中调整PI(D)增益。这是一种常见的温度控制器,但温度探头远离加热器。一些进一步的信息:

  • 探头的响应从加热器的任何变化延迟约10秒

  • 温度采样@ 1 Hz,分辨率为0.01°C

  • 加热器是PWM控制器,周期为1 Hz,带有10位PWM

  • 目标是将振荡维持在±0.05°C

  • 以下

目前我正在使用控制器作为PI。我无法避免振荡。增益越高,振荡越小且越快。仍然太高(约±0.15°C)。 降低P和I增益会导致非常长而深的振荡。

我认为这是由于延迟造成的。 解决时间不是问题,可能需要它所需的所有时间。

我对如何让系统运作感到困惑。让我们考虑只使用I.当探头达到目标值并且I输出开始减小时,温度将上升一段时间。我不能使用导数项,因为变化太慢而且dError非常接近于零(如果我将dGain设置为一个巨大的值,则噪声太大)。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

通常对于大延迟,您有两种选择:降低系统的收益,或者,如果您拥有自己控制的工厂的型号,请使用Smith Predictior

我首先对系统进行建模(使用输入中的开环步骤)来量化工厂的延迟和时间常数,然后检查温度采样和PWM速率是否正常。

请注意,如果您的PWM频率与工厂动态相比太小,由于慢速PWM, 持续振荡。您只需使用PWM的常量输入(没有控制器,开环)就可以检查它。

编辑:没看到问题已经解决,但我会留在这里作为参考。

答案 1 :(得分:4)

尝试P-only。仅比例振荡的速度有多快?如果你不能将Kp调到足够小以免振荡,那么你的系统的加热器就会过度。

如果系统的死区时间大约为10s,则积分项的时间常数(T_i)应为死区时间的3.3倍,使用Ziegler Nichols开环PI规则({{3 }} :),然后积分项应为Ki = Kp / T_i。因此,在死区时间= 10秒时,Ki应为Kp / 33或更慢。

如果你得到的是积分振荡,那么积分的上升和下降速度比过程响应的速度快,而且应该更小。

另外 - 想想不同术语的单位。它可能不是导致您的问题的延迟,而是测量和控制系统的分辨率。如果您正在使用1/1024分辨率PWM驱动(例如)100W加热器,则每个PWM计数的分辨率为0.1W,而您尝试根据0.01C温度差进行调整。在小于Kp = 100 PWMcount / degree(或10W /度)时,您在PWM中没有足够的分辨率来响应0.01C误差进行更改。在Kp = 10PWM / C时,您可能需要0.10C的更改才能实现PWM功率的实际变化。你能用更高分辨率的PWM吗?

另一方面,如果你想在0.01C的30℃范围内操作系统,我认为你至少需要一个15位PWM才能在受控系统中获得10倍的分辨率。只有10位PWM,您只能获得大约1C的总范围,而控制的分辨率是测量的10倍。