我试图正确理解PI控制器的积分项,因此我通过此代码模拟了一个虚拟PI控制器
e =[10 7 8 5 6 3 4 1 2 1];
kp = 0.4;
ki = 1.35;
Ts = 0.5;
I =0;
for i =1:10
P = kp*e(i);
I = I +e(i)*Ts;
output(i)= P+(ki*(I));
end
现在我在想什么,如果将ki与I项相集成或者最后应该乘以
e =[10 7 8 5 6 3 4 1 2 1];
kp = 0.4;
ki = 1.35;
Ts = 0.5;
I =0;
for i =1:10
P = kp*e(i);
I = I +e(i)*Ts*ki;
output(i)= P+I;
end
令我惊讶的是,它们都具有相同的输出,这第二个代码应该有不同吗,因为我在第二个代码中将错误乘以ki来保存错误的乘数,我在这里不真正了解一些基本知识吗?我知道我在空转过程中犯了一些错误,有人可以指出吗?
答案 0 :(得分:0)
两个版本的代码中输出的I项对我来说都是等效的:
I_output k = ki *Σ j = 1 k (e j * Ts)=Σ< sub> j = 1 k (e j * Ts * ki)
但是如果我错了,请纠正我。
答案 1 :(得分:0)
实际上,您在做同一件事是他们两个,因此他们是相同的。
'5.0000 8.5000 12.5000 15.0000 18.0000 19.5000 21.5000 22.0000 23.0000 23.5000'这是第一种情况下的向量I,在将其与P相加之前先与ki相乘。
现在,在第二种情况下,您已经将ki与每个Ts相乘,因此I的每个值都像以前一样包含ki的乘法。如果您查看I'6.7500 11.4750 16.8750 20.2500 24.3000 26.3250 29.0250 29.7000 31.0500 31.7250'的较新值,您会理解它们都是相同的。
如果使用'I =(I + e(i)* Ts)* ki;',结果将有所不同。因为现在您每次都将ki乘以整个I。