void PID_ys()
{
if(temp<settemp)
{
if(settemp-temp>10)
{
hightime=100;
}
else
{
e1=settemp-temp;
duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
uk=uk+duk;
if(uk>100)
{
uk=100;
}
else if(uk<-100)
{
uk=-100;
}
if(uk<0)
{
hightime=-uk;
}
else
{
hightime=uk;
}
e3=e2;
e2=e1;
}
}
if(temp>=settemp)
{
if(temp-settemp>1)
{
hightime=0;
}
else
{
e1=settemp-temp;
duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
uk=uk+duk;
if(uk>100)
{
uk=100;
}
else if(uk<-100)
{
uk=-100;
}
if(uk<0)
{
hightime=100-(-uk);
}
else
{
hightime=100-uk;
}
e3=e2;
e2=e1;
}
}
}
我是这样算的。别人的方法。但是我发现<35度时。运算出来的占空比。始终是100.有没有什么其它算法呢
|