|
楼主 |
发表于 2016-7-13 12:40:33
|
显示全部楼层
兄弟,谢谢你,你回复的信息说到了一个电子上,就是想维持50度,但是我检测到实际50度及以上时,已经让pwm等于0了,等散热完了,温度降到50度以下,再启动加热,已经来不及了……
请看我的PID程序如下所示:
我的这个PID程序,我在当PID函数返回负数,或者实际温度高于目标温度的时候,就关断pwm,我这是不是错误的思路?
- int pid(int NextPoint)
- {
- u16 err,err1,err2;
- u16 returndata;
- float add=0;
- //¼ÆËãÎó²î
- sPID.err=sPID.SetPoint-NextPoint;
- err=(u16)sPID.err;
- err1=(int)sPID.err1;
- err2=(int)sPID.err2;
- //¼ÆËãÔöÁ¿
- add=sPID.kP*(sPID.err-sPID.err1)+sPID.kI*sPID.err +sPID.kD*(sPID.err-2*sPID.err1+sPID.err2);
- //¼ÓÉÏÔöÁ¿
- sPID.CtrlValue=sPID.CtrlValue+add;
- if(sPID.CtrlValue>MaxPwm)
- sPID.CtrlValue=100;
- if(sPID.CtrlValue<0)
- {
- sPID.CtrlValue=0.0;
- }
-
- if(temp_now>=eeprom_temp && sPID.CtrlValue>0)
- {
- sPID.CtrlValue=0.0;
- }
- //±£´æÎó²î
- sPID.err2=sPID.err1;
- sPID.err1=sPID.err;
- returndata=(u16)sPID.CtrlValue;
- return returndata;
- }
复制代码 |
|