麻烦帮忙看下51做的PID调节,为什么反馈回来的有问题
#include <REG51.H>
#include <intrins.h>
int uk=50;
int ck=0;
int r=300;
int ek=0;
int ek1=0;
int ek2=0;
int uk1=0;
int kp=1;//0.125
int ki=2;//0.25
int kd=3;//0.375
int duk=0;
int contr_PID(void)
{
int uk_tmp=0;
ek=r-ck;
if (0<=uk<=100)
{
duk=kp*(ek-ek1)>>3+ki*ek>>3+ kd*(ek-2*ek1+ek2)>>3;
uk_tmp=uk1+duk;
ek2=ek1;
uk1=uk_tmp;
ek1=ek;
if(0<=uk_tmp<=100)
{
uk=uk_tmp;
}
}
else{
if(uk>100){uk=100;}
if(uk<0){uk=0;}
}
return(uk);
}
这里的反馈uk应该在0到100之间为什么会乱跳或者减除负值归零,如何调整麻烦指导下,谢谢了。
我这里没有加入反馈环节,所以只要能发出矩形波就行了,但用了示波器看没有波形,麻烦指导一下,才开始学习,感谢