PID 温度控制的实现(3)

时间:2025-07-07

ID 温度控制的实现

int dError,Error;

Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值

pp->SumError += Error; // 积分,历史偏差累加

dError = Error-pp->LastError; // 当前微分,偏差相减

pp->PrevError = pp->LastError; // 保存

pp->LastError = Error;

+ pp->Integral * pp->SumError // 积分项

- pp->Derivative * dError // 微分项

);

}

在实际运算时,由于水具有很大的热惯性,而且PID 运算中的I(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,相反D(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的控制效果,系统最终选择PD 控制方案,下面C 代码所示为PD 控制的实现过程:

float PIDCalc( PID *pp, int NextPoint )

{

int dError,Error;

Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值

dError = Error-pp->LastError; // 当前微分,偏差相减

pp->PrevError = pp->LastError; // 保存

pp->LastError = Error;

return (pp->Proportion * Error // 比例项

- pp->Derivative * dError // 微分项

);

}

温度控制实现

通过温度的PID 运算,产生结果fOut,该参数决定是否加热,加热时间是多长。该程序如下:

stPID.Proportion = 2; //设置PID 比例值

stPID.Integral = 0; //设置PID 积分值

stPID.Derivative = 5; //设置PID 微分值

fOut = PIDCalc ( &stPID,(int)(fT*10) ); //PID 计算

if(fOut<=0)

*P_IOA_Buffer &= 0xff7f; //温度高于设定值,关闭加热器

else

*P_IOA_Buffer |= 0x0080; //温度低于设定值,打开加热器

加热时间由主函数计算,由TimerB 中断控制。主程序中通过PIDCalc 函数得到fOut 参数,如果该参数大于“0”,则开启加热器。IRQ2_TMB 中断一直处于允许状态,每进入一次IRQ2_TMB 中断,fOut 参数减1,直到fOut = 0,停止加热。如果PIDCalc 计算结果比较大说明离目标温度相差较大,则加热时间比较长,如果计算结果比较小,说明离目标温度相差较小,加热时间相对较短。

PID 温度控制的实现(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219