小弟最近研究模糊PID控制,有几个疑问
首先说明:
e = 设定值 - 测量值
ec = 现在的e - 前一个e
模糊规则后的修正值:_Kp,_Ki,_Kd
初始PID参数 Kp,Ki,Kd
e,ec,_Kp,_Ki,_Kd的隶属度函数都是三角形隶属函数
e,ec的论域为[-6~6],_Kp,_Ki,_Kd的论域为[-3~3],分别模糊化为{NB,NM,NS,ZO,PS,PM,PB}
Ke,Kec为e和ec的模糊化因子
KPU,KIU,KDU分别是Kp,Ki,Kd的解模糊因子
我的程序说明思路
第一步,将e*Ke和ec*Kec代入隶属函数,求出最高的隶属度和对应的隶属值(如:e*Ke的隶属值为NM,隶属度为0.8,ec*Kec的隶属值为PM,隶属度为0.7)
第二步,将NM和PM带入模糊规则表(规则表详见图片),求出对应的_Kp,_Ki,_Kd的值
第三步,Kp = Kp+ KPU*_Kp*0.7,Ki = Ki+ KIU*_Ki*0.7,Kd = Kd+ KDU*_Kd*0.7(式中0.7为第一步求出的较低的那个隶属度)
第四步,拿着得到的PID参数去算输出量
问题:
问题1:请问大神们我以上的思路是不是正确?
问题2:Kp = Kp+ KPU*_Kp*0.7这个式子右边的Kp需要累加么,还是一直用初始参数(累加的意思是:设KPU*_Kp*0.7=1,Kp初始为2,那么累加的话第一次,Kp = 2+1=3;第二次Kp= 3+1,以此类推),如果不累加的话我发现一旦控温平稳后,由于e和ec的隶属值求出来为ZO,导致_Kp,_Ki,导致Kp,Ki的值都是初始设置的值,这样如果我初始设置偏差的话就会对系统造成一定的影响吧。。
问题3:如何确定Ke,Kec,KPU,KIU,KDU,我现在是自己估计个范围如e范围[-1000~1000],而论域为[-6~6],那么Ke定为0.006,具体[-1000~1000]这个范围有什么方法确定嘛
问题4:网上很多说解解模糊需要重心法,而我现在_Kp,_Ki,_Kd就一个参数,怎么使用重心法?
我自己按照以上程序试了下PID控制,有很严重的冲温,大概到2摄氏度左右,然后下来震荡,到后来虽然控住了,感觉这样不行啊,我以前用手动调PID参数的方法,直接上去就能稳住,最多超个0.几
求大神们指点迷津