0

我正在尝试按照http://en.wikipedia.org/wiki/PID_controller实现一个 PID 控制器

我尝试控制的机制如下: 1. 我有一个可以控制的输入变量。典型值为 0.5...10。2. 我有一个每天测量的输出值。我的输出目标大致在相同的范围内。

这两个变量具有很强的相关性——当工艺参数上升时,输出通常会上升,但噪音很大。

我在这里关注实现:http: //code.activestate.com/recipes/577231-discrete-pid-controller/

现在 PID 似乎与误差项相关,而不是与测量的输出水平相关。所以我的猜测是我不应该将它原样用于过程变量,而是作为对当前值的一些修正?那应该如何工作?

例如,如果我们取 Kp=1,Ki=Kd=0,过程(输入)变量为 4,当前输出级别为 3,我的目标值为 2,我得到以下结果:

错误 = 2-3 = -1 PID = -1

那么我应该将过程变量设置为-1吗?还是 4-1=3?

4

1 回答 1

0

您需要考虑 PID 控制器纠正操作变量 (MV) 的错误,并且您需要使用 I 项来获得目标稳态结果。I 项是 PID 如何保留和应用系统先前行为的记忆。

如果您认为控制器的输出是 MV 的变化,它更像是一个“速度形式”PID,并且先前错误和行为的记忆在先前的 MV 设置中集成和累积。

从您的示例中,似乎操纵值 -1 是不可行的,并且您希望控制器建议像 3 这样的值以获得 2 的过程输出 (PV)。对于 PID 控制器来说,使用“The过程(输入)变量是 4,...”(在我的术语中是 MV)Ki 必须是非零的,如果系统处于稳态,无论在积分(sum_e=sum(e))中累积的内容都会正好等于 4/Ki,所以:

Kp= Ki = 1 ; Kd =0 
error = SV - PV = 2 - 3 = -1
sum_e = sum_e + error = 4/Ki -1


MV = PID =  -1(Kp) + (4/Ki -1)Ki  = -1Kp + 4 - 1*Ki = -1 +4 -1 = 2  

如果你使用比 1 更慢的 Ki,它会更平滑噪声并且不会这么快地调整 MV:

Ki = 0.1 ; 
MV = PID =  -1(Kp) + (4/Ki -1)Ki  = -1Kp + 4 - 1*Ki = -1 +4 -0.1 = 2.9  

在目标的稳态 (PV = SV),sum_e * Ki 应该产生稳态 MV:

PV = SV 
error =  SV - PV = 0
Kp * error = 0 
MV = 3 = PID = 0 * Kp + Ki * sum_e

理解 PID 控制器的一个好方法是将单位放在所有内容上,并将 Kp、Ki、Kd 视为过程误差、累积误差*时间单位和误差/时间单位变化率到受控变量的转换,并且受控系统将控制器的操纵变量转换为输出单位。

于 2015-05-15T17:47:41.880 回答