如何将PID控制器调整为非线性过程


9

我有一个非线性的热过程(非线性辐射随着温度的升高而越来越多),我想将其调整为PID控制器。我想尽可能精确地控制温度。

我已计划将温度范围划分为N个伪线性范围(待定义),并针对这些温度范围中的每个温度范围:使用较小的温度步长拟合一阶模型,并计算PID参数以适合该模型。PID参数将根据过程的温度自动切换*。

我的问题如下:以70°C检查点为例。P瓦已经在流动以达到该温度。我将注入dP瓦特,将温度提高1°C。然后,我记下时间常数,稳态增益将为1 / dP°C / W。[请您花点时间考虑这是否对吗?]最后,我将PID调整到该工厂,以获取该温度范围的参数,然后继续进行其他操作。

现在,假设过程达到70°C。加载新参数并重置积分计数器。误差可能是1°C,但是所需的功率远远超过达到21°C的功率,因此可以确定控制器所需的功率低于P瓦。这意味着温度在积分项要求P瓦特之前将下降很多,只有这样,dP额外的瓦特才最终使过程达到71°C(并且肯定会过冲)。与dP相比,P越大,效果越差。

似乎加热器应该以控制器输出的总和以及保持在当前“参考温度”(例如70°C)所需的功率来驱动。但是现成的控制器不提供这种功能,因此必须有另一种方法。

我想念什么?正确的方法是什么?

*:有效地获得调度


1
PID控制器通常用于线性系统。它足够强大,可以控制某些非线性系统以及一些“几乎线性”的操作点。如果不是这种情况,可以使用不同的技术来使受控工厂线性化(查找“反馈线性化”或引入一些内部回路)
Eugene Sh。

谢谢你的评论。那就是我要达到的目的:在“几乎线性”的温度范围内使用PID控制器。我已经看过那些关键字,但是运气不佳。
user42875

1
除了训练多个模型之外,您还可以在将输入值传递给PID控制器之前通过“线性化”功能输入输入值,然后根据该值进行训练吗?
尼克·约翰逊

1
您的方法对我来说还可以。您将根据温度调整增益和时间常数。您必须考虑交叉点会发生什么。您是否构建了无法正常工作的产品?控制回路可以隐藏很多非线性。也许您会没事就没事。
乔治·赫罗德

为什么辐射是非线性的?如果炉子泄漏温度,则功率损耗为线性Q = mc * delta_T。如果您的系统只是泄漏,那么几乎所有的常数都会保留下来,如停滞时间,上升时间,只是增益降低。您可以使Kp变量Kp(T_actual)成为Kp_initial和Kp_final的线性函数。
MarkoBuršič2015年

Answers:


11

如何将PID控制器调整为非线性过程?

你不知道 您对过程进行线性化,然后让PID控制器对线性值进行处理。

通过“线性化流程”,我并不是要真正使流程本身线性化。由于物理原因,通常无法做到这一点。但是,可以在PID控制器的输出和过程输入之间放置非线性的东西,以便PID输出从PID控制器的角度线性控制过程。

这样的线性化器不需要非常精确,因为它位于反馈回路内。目的是使整个控制动态范围内的增益大致恒定。一种简单而通用的方法是基于分段线性表的函数。16或32段通常足以满足非高度非线性过程的要求。

我遇到的最坏的例子是通过改变阴极灯丝的驱动强度来控制通过电子管的电流。阴极温度对电子束电流的函数是高度非线性的,并且控制阴极灯丝电流的系统也有些非线性。在这种情况下,很难预测整个混乱情况,因此我在生产过程中使用了校准程序,逐步遍及灯丝驱动控制值,测量了每个的束电流,然后从中计算出32段查找表。它工作得非常好,我们能够在整个范围内调整束电流PID控制器以获得良好的响应。

如果在过程前没有线性化功能,则必须调整PID控制器以在过程的最高增量增益点处保持稳定性。然后,这导致在其他点的行为非常衰减。

添加

您更新的问题中没有任何内容说明为什么上述方法仍然不是一个好主意并且不适用。您说您正在使用模拟控制器。我的第一个反应是“ 1980年代早已过去,不要那样做。” 但是,PID控制器和工厂线性化器可以是独立的。

显然,工厂输入是功率,输出是温度。在一系列功率水平下测量典型的稳态温度。由此可以计算将线性化的“功率”转换为实际工厂功率输入的函数。模拟PID控制器可能会输出与功率成比例的电压。您所要做的就是在与该电压对应的位置插入一个黑盒,该电压对实际功率电平进行线性测量。

通常,您将使用具有内置A / D的微控制器来执行此操作。在点之间进行此表查找和线性插值是微不足道的。然后以最终转换为电压的方式输出结果。由于与微控制器相比,该工厂的运行速度较慢,因此就像过滤和缓冲PWM输出一样容易。或者,您可以直接驱动D / A,尽管在这种情况下听起来好像没有必要。

与控制器的1980年代主题保持一致,您可以使用A / D,内存和D / A来实现这种复古感。

无论哪种情况,PID控制器现在都可以有效地控制线性设备,并且应该可以将其调整为良好的性能。

在一个位置上对工厂输入进行分段线性变换比在输出范围内调整PID控制器内的3个值更容易。后者是一个难题,而前者则直接解决了这个问题。测量线性化函数的数据比确定各个点的P,I和D增益要容易得多。即使这样做了,您仍然会遇到短暂的问题,因为正确的收益不会立即应用到这种情况。再次,“收益调度”是一个难题。


非常有趣,感谢您介绍linearisator方法。我使用的是直接连接到继电器的硬件控制器,因此不幸的是我必须进行增益调度。我的识别方法正确吗?感觉并非如此。
user42875

我已经编辑了我的问题以澄清我的问题,尤其是最后两段。(仍然+1)
user42875 2015年

我问过控制器的制造商,是否可以在输出之前插入一个带有线性插值的查找表-如果可以做到,那么我肯定会选择该选项,即使那意味着我不得不忘记基于传递函数等的常用调优工具。很优雅 如果没有,我将不得不进行非常繁琐的增益调度,但是显然我的方法没有什么问题,这就是我要检查的问题。
user42875 2015年

2

请记住,在对模型进行线性化时,实际上是在假设非线性模型y = f(x)替换为y = A *(x-x0)+B。请注意,x0是线性化点。当介绍x的范围时,最终会有多个A,B和x0。无论哪种方式,控制器的输入都将是相对于当前线性化点的误差。但是,您仍然会偏移输入信号(带有B),因此即使相对于当前线性化点的误差为0,您仍将继续执行信号。

在您的示例中,即使误差为0度(在70度设定点),控制器仍将输出大于0的功率。


谢谢。我认为您正在尝试某些事情,但我不太了解。总而言之,我使用的是基本的PID控制器(类似模拟),我可以根据温度的变化更改P,I,D项。我知道,一旦稳定在70°C,即使误差为零,功率也不会为零。这是让我担心的定居点:我基本上是将控制器的温度降到70°C,并且由于温度为t = 0s,积分项需要花费一些时间,所以我会有一个严重的下垂。几乎听起来我的方法是错误的。
user42875

(控制器在开始时只需要很少的功率,低于保持在70°C所需的功率)
user42875 2015年

我已经编辑了我的问题以澄清-特别是最后两段。
user42875

如果没有有关过程的更多详细信息,很难给出建议,但是听起来您的系统在70度左右相当不稳定,并且在该温度附近,大多数控制是由于晶内补偿(PID中的I)引起的?
2015年

70°C只是一个例子,我可能要调整6个不同的温度范围。粗略地说,我是通过加热外表面来控制热水瓶内部的温度的。
user42875

2

一种使用PID控制器进行非线性控制的方法(在行业中广泛使用)称为“增益调度”。

非线性控制问题被分解为一系列线性足够的区域,并且每个区域都使用适当的参数。


这就是我想要达到的目标,正如我的问题所读(“ PID参数将根据过程的温度自动切换*”“ *:有效地进行增益调度”。)
user42875 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.