#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.125int ki=2;//0.25int kd=3;//0.375int 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之间为什么会乱跳或者减除负值归零,如何调整麻烦指导下,谢谢了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>