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

标签 delay temperature pid-controller

我需要在一个延迟很大的系统中调整PI(D)的增益。这是一个常见的温度 Controller ,但温度探头距离加热器较远。一些进一步的信息:

  • 加热器响应上的任何变化,探头的响应都会延迟约10秒
  • 温度以1 Hz采样,分辨率为0.01°C
  • 加热器是PWM Controller ,周期为1 Hz,具有10位PWM
  • 目标是将振荡保持在±0.05°C以下

  • 目前,我正在使用 Controller 作为PI。我无法避免振荡。增益越高,振荡越小且速度越快。仍然太高(约±0.15°C)。
    减小P和I增益会导致很长很深的振荡。

    我认为这是由于延迟。
    稳定时间不是问题,它可能需要花费所有时间。

    我对如何使系统工作感到困惑。让我们考虑仅使用I。当探头达到目标值并且I输出开始降低时,温度将再次升高。我不能使用导数项,因为变化太慢并且dError非常接近于零(如果将dGain设置为一个很大的值,则会产生过多的噪声)。

    任何想法?

    最佳答案

    尝试仅P。仅比例振荡的速度有多快?如果您无法将Kp调得足够小而没有振荡,则说明您的加热器功率过大。

    如果系统的死区时间约为10s,则使用Ziegler Nichols开环PI规则(https://controls.engin.umich.edu/wiki/index.php/PIDTuningClassical#Ziegler-Nichols_Open-Loop_Tuning_Method_or_Process_Reaction_Method:),积分项的时间常数(T_i)应为死区的3.3倍,然后积分项应为Ki = Kp/T_i。因此,死区时间= 10s时,Ki应该为Kp/33或更慢。

    如果您正在获得仅积分振荡,那么积分的上下摆动速度将比过程响应快,并且它应该更小。

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

    换句话说,如果要在0.01C的30C范围内运行系统,我想您至少需要一个15位PWM,其分辨率是受控系统的10倍。仅用10位PWM,在控制下以10倍于测量分辨率的分辨率,您只能得到大约1C的总量程。

    关于delay - 在具有延迟的系统中调整pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26508261/

    相关文章:

    javascript - Web Audio API 延迟反馈导致 Chrome 崩溃

    java - 从包含 3 个 float 的传感器中解析字符串

    c - PID在arduino中的实现

    java - 为什么 Java doClick() 在调用 doClick(pressTime) 时使用 68 毫秒?

    php - 如何阻止影响我整个 PHP 代码的 PHP sleep()?

    Arduino 温度传感器倒计时

    c++ - 平衡机器人PID整定

    c - 为 Teensy Atmega 32u4 实现 PI 控制

    arduino - 延迟的缺点

    python - 在 python 中访问 CPU 温度