2020-01-14 18:54发布
yaodongliang 发表于 2012-7-8 17:08 楼主,你好,最近也在调PID,以前没接触过,有几个问题想请教下你。 我的系统目的是控制气缸里面的压力稳定 ...
最多设置5个标签!
不用客气,大家一起讨论吧,首先我要说明的是我没有做过压力控制系统,其次也没有实际通过经典的方式(即PID参数整定的方式)做过PID控制系统,但是我文中提及的预测式负反馈控制方法我是实际用过的,使用软件仿真的结果也和实际情况接近,故此我对PID控制的研究都只是建立在软件仿真的基础上的。其次理论的东西其实是相通的,所以我就从理论上对你的压力控制系统提一些看法(文中的假设条件是控制周期等于采样周期):
1)首先你要对你的压力控制系统的建立过程有一个清楚的认识,也即那些是被控量,哪些是输入量,哪些则是控制系统的环境因素,被控量稳定过程是如何建立起来的;
2)其次要注意对于一般内部相位延迟不是太厉害的系统,通常引入的反馈都是负反馈,如果反馈量弄成正反馈控制系统就调不出来了;
3)因为我最近对位置式PID的增量形式研究比较多一些,就从位置式PID的增量形式的控制上对你的系统提一些看法,希望对你有帮助;
a) 首先针对输入输出建立一个大致的范围,例如:需要控制的压力范围为0-100Pa,采用手工方式找到该范围对应的电流控制范围是5-100mA,假设对应的D/A输入为100-2000;
b) 估计一个大致的控制系统内部延时,如100mS;
c) 计算PID=Kp*E[n]+0.1Kp*(E[n]-E[n-1]); 注: E[n]为第n个采样周期时得到的设定压力-当前压力,而不是当前压力减去设定压力,0.1即预估的内部延时,Kp取值使得E[n]取最大值时计算得到的PID为pwmmax的3~5%左右;
d) 如果PID>0 而且(pwmpointer+PID)<=pwmmax) 那么 pwmpointer:=pwmpointer+PID;
如果PID<0 而且(pwmpointer+PID>=0) 那么 pwmpointer:=pwmpointer+PID; (计算控制量对应的值)
e) 如果pwmpointer<0 则 pwmpointer:=0;
如果pwmpointer>pwmmax 则 pwmpointer:=pwmmax;(pwmmax越大,分辨率越高,控制越精细)
f) DAout[n]:=pwmpointer*(MaxDA-MinDA)/pwmmax+MinDA; (MinDA即a)中的100,MaxDA即a)中的2000)
g) 每一个控制周期重复c)-f)的动作,得到一个控制系统的响应,评估该响应情况;
h) 根据评估结果调整Kp值和预估的内部延时(开始时内部延时可稍微估大一些,这样容易建立一个稳定的系统,建立后再逐步减小内部延时值,得到一个尽可能最快速响应的系统,另外开始时Kp值应该小一些,逐步加大到系统不稳定为止,将临界值*0.7~0.8即为理想的Kp值,然后再调整内部延时预估值)
最后,根据你所说的先调比例部分无法稳定的情况看,你应该是用的增量式PID,而不是位置式PID的增量形式,请注意区分,如果对概念不熟,可以用PID温控仿真软件仿真看看各种PID控制下各个参数在调整中所起的作用 (增量式PID的公式是 PID=KP*E[n] +KI*Sum(E[n]) +KD*(E[n]-E[n-1]),其中Sum()为积分 )。
一周热门 更多>