int e ,e1 ,e2 ; float uk ,uk1 ,duk ;//pid输出值 float Kp=7,Ki=2,Kd=2; int out=0;void PIDControl() //pid偏差计算 { e=50-humi_value; duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/30; uk=uk1+duk; out=(int)uk; //输出为占空比 if(out>180) { out=180; } else if(out<0) { out=0; } uk1=uk; //变量值移位 e2=e1; e1=e; angle=out;void timer3()interrupt 3 //产生PWM { TL1 = (65536-10)%256; //设置定时初值 TH1 = (65536-10)/256; //设置定时初值 cnt++; if(cnt==200){cnt=0;PIDControl();} if(cnt<angle+1)OUTA=1; else OUTA=0; }
时间: 2023-06-14 13:04:15 浏览: 138
嵌入式C / C ++ Web服务器-C/C++开发
这段代码是一个简单的PID控制器,用于控制湿度传感器的输出。其中,e表示当前湿度与目标湿度的误差,Kp、Ki和Kd是PID控制器的三个参数,uk表示当前控制器的输出值,out表示最终的控制输出值,angle表示PWM波的占空比。
在timer3中,每个计时器中断,会进行PID控制,并且根据控制器的输出值,调整PWM波的占空比,从而控制湿度传感器的输出。
阅读全文