我不理解PID控制器的组成部分。让我们假设来自维基百科的这个伪代码:
previous_error = 0
integral = 0
start:
error = setpoint - measured_value
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start
积分在开始时设置为零。然后在循环中它整合了错误随着时间的推移。当我对测量值或设定值进行(正)变化时,误差将变为正值,积分将“吃掉”随时间(从头开始)的值。但我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随时间积分的误差)并且仍然会对控制器的输出值有所贡献,但它不应该。
有人可以解释一下吗?
想想稳态下的输出......您希望measured_value是设定值,误差是零,输出是将过程保持稳定在测量值所需的任何值。 (在某些情况下可能为零,但输出可能并不总是需要为零 - 例如:您需要将加热器设置为标记6.5以将房间保持在72F。)
如果误差为零,则比例误差项对输出没有任何贡献。
如果进程处于稳定状态,那么error-previous_error为零,并且派生项没有贡献。
如果输出是使过程保持稳定状态的适当设置,则积分项必须是提供输出值的唯一项。它已经累积了适当的误差记忆,以测量单位乘以观测时间为单位,可以通过Ki项转换为输出单位,Ki项以outputUnits /(error * measurementTime)为单位。
作为恒温器示例,如果房间内电加热器旋钮上的输出为0-11单位,并且您正在测量房间中的度数F而不是每1分钟72F的设定值,那么积分总和你记录的DegreeFtooCold *分钟,Ki术语会将观察到的错误总和转换为表盘上的单位。
它非常精细并且预期积分在稳态下不为零。
根据您要控制的系统和传感器的质量,控制器和系统/工厂之间总会存在某种干扰。当存在这样的干扰时,控制器的积分部分不会变为零,而是反作用!这是由于积分将不断变化直到系统的输出等于参考(即积分值与扰动相反)的事实。
例如,参见 这一页 描述控制参数:a 稳态错误 当系统和输入具有特定字符时,积分将尝试反对,这导致更低的最终误差,但在某些情况下更多的过冲。
而且,传感器的精度/噪声可能对积分值的精度施加限制,积分值可能在零附近振荡。
让我们这样看:错误本身稳定到零是不够的。这是必须的 积分 变为零,这意味着测量值随时间的平均值与设定值匹配。
一个不好的例子是尝试从零到达100%的值,其中有一些Ki,Kp,Kd。
x = 0,60,80,90,98,99,100,100,100。
x的价值是多少?平均值为80.777。甚至不接近100。
稳态误差需要I项。查看Wikipedia上的示例图。
http://en.wikipedia.org/wiki/File:Change_with_Ki.png
您可以通过更改I术语的增益来查看图表中的更改。显然,由于积分饱和,Ki = 2是很高的,这是引起剧烈超调的原因。 Ki = .5看起来没问题,但是如果你想尽快达到一个稳定的值,你需要增加一点Ki。看看Ki = 1,它略微超调但仍然比Ki = .5更快地达到稳定。所以你必须决定这种权衡是否值得。
我认为这里的部分解释是,当积分部分超调时,比例部分将开始反对它。因此,第二次过冲将更小,第三次更小,等等。但如上所述,通常会有一些过程噪声导致误差为非零,控制器可能永远不会达到恒定输出,但输出的变化应该非常小。
在充分尊重的情况下,您有理由对PID定义提出质疑,因为相对于Intergral术语,它会使PID控制中的错误永久化。
错误可以说明如下:
1)即使没有错误,Intergral术语也会导致输出动作。
2)Intergral基于之前不再相关的错误。
如果控制器将输入与输出进行比较并通过负反馈并将误差驱动为零,则比例控制会产生0错误。
正确的PID术语:
D项:将变化(微分)添加到稳态INPUT以在求和点中组合。
I term:将变化(微分)添加到稳态OUTPUT的负(负反馈),以便在求和点中进行组合。
当整合(围绕)负面反馈时,整合就是差异化
输出连接到求和点,具有非常高的游戏和负极性(反转)。
P term:是所需的OUTPUT除以所需的INPUT,或者通过OUTPUT输入求和结的信号的比率除以
INPUT通过信号馈送求和结。
D term,Differentiation加快输出对输入的响应,使输出更快地接近正确的值。
当接近正确/期望值时,积分会减慢输出响应。