
1)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;(2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。(3)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。
何苦这样做!最好的办法就是用自己编程,用增量式的PID做首先根据你设定的流量,通过公式算出一个大概的频率,以这个频率为做t=0时刻PID的输出!因为一般泵的流量和电机的转速是成正比的你可以先做个测试,比如强制把电机频率直接调到50HZ,观察泵的流量,假设此时泵的流量为Q,那么当你需要设定流量为q的时候,大概所需要的频率为50q/Q当系统启动时,以此值做为增量式PID的t=0时刻的输出值,在此基础上做PID运算,超调非常小,稳定时间也会很短的调节的过程可以先把积分系数(注意是积分系数,而不是积分时间)调为零,慢慢增大P系数,当有点超振荡时再慢慢加积分系数不难的上帝保佑你!呵呵
uint ZKB; //定义占空比初始值
float zkc;
int kkk;
uint kp=4; //定义PID初始值
float ki=017;
uint kd=16;
uint uc=5000;
float ek;
float u_k;
float uk;
float uk1=0;
float ek1=0;
float ek2=0;
uchar click=0; //中断次数计数器变量
uint zhouqi=0;
void deal(uint t) //加热控制函数
{ TR0=1;
if(zhouqi==1) //进行PID算法,求新的占空比
{
zhouqi=0;
ek=wendu_c-t; //计算偏差
u_k=kp(ek-ek1)+kiek+kd(ek-2ek1+ek2); //计算增量
uk=uk1+u_k;
zkc=100uk/uc;
if (zkc>=95)
zkc=95;
kkk=(int)zkc ;
}
if(t>=wendu_c) //大于设定值
shuchu=0; //输出高电平
else //小于设定值
{
ZKB=(int)zkc; //调整新的脉宽定时,即新的占空比
if (click<=ZKB) // 判断脉宽定时周期是否到?当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整
shuchu=1;
else
shuchu=0 ;
}
}
以上就是关于PID控制 位置式和增量式 怎样选择全部的内容,包括:PID控制 位置式和增量式 怎样选择、求助,关于PID调节的响应速度、请教单片机PWM控制加热器用增量式PID,三个参数的选择等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)