毕设帮助、开题指导、技术解答(有偿)见文未
目录
摘要
一、硬件方案
二、设计功能
三、成品实物图
四、原理图
五、PCB图
六、Proteus仿真
七、程序源码
资料包括:
摘要
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本PID算法温控系统所介绍的与传统的温度计相比,具有读数方便,测温范围广,控制准确,负载广泛,有LCD显示相应的工作方式,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机 STC89C52,测温传感器使用 DS18B20,用液晶1602显示数据,用继电器驱动负载,用PNP三极管驱动。
一、硬件方案
硬件构成:51单片机+最小系统+LCD1602液晶+按键+DS18B20温度传感器+加热棒+LED灯+继电器而成。
二、设计功能
1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机。
2、采用LCD 1602液晶显示当前温度值(带单位),以及温度阈值。
3、采用DS18B20温度传感器测温,防水型传感器的。
4、按键可以设置温度阈值,当温度低于设定的阈值时,相应的指示灯亮,同时相应的继电器吸合,继电器可以驱动负载加热棒加热。当温度高于设定的阈值时,相应的指示灯灭,同时相应的继电器断开,加热棒不加热。
5、两个按键:加键和减键。可设置温度阈值。
三、成品实物图
四、原理图
五、PCB图
六、Proteus仿真
七、程序源码
部分代码:
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error//比例
+ pp->Integral * pp->SumError //积分项
+ pp->Derivative * dError); // 微分项
}
/***********************************************************
温度比较处理子程序
***********************************************************/
void compare_temper(void)
{
unsigned char i;
if(set_temper>temper) //设置温度大于当前温度
{
ledred=0;
ledgreen=1;
if(set_temper-temper>1) //温度相差1度以上
{
high_time=100;
low_time=0;
}
else //设置温度不大于当前温度
{
for(i=0;i<10;i++)
{
get_temper();
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation
}
if (high_time<=100) high_time=(unsigned char)(rout/800);
else high_time=100;
low_time= (100-high_time);
}
}
else if(set_temper<=temper) //设置温度不大于当前温度
{
ledred=1;
ledgreen=0;
if(temper-set_temper>0) //温度相差0度以上
{
high_time=0;
low_time=100;
}
else
{
for(i=0;i<10;i++)
{
get_temper();
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation
}
if (high_time<100) high_time=(unsigned char)(rout/10000);
else high_time=0;
low_time= (100-high_time);
}
}
}
/*****************************************************
T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期
******************************************************/
void serve_T0() interrupt 1 using 1
{
if(++count<=(high_time)) output=0;
else if(count<=100)
{
output=1;
}
else count=0;
TH0=0x2f;
TL0=0x40;
}
/***********主函数**********/
void main(void)
{
unsigned char i;
init();//LCD初始化
TMOD=0x01;
TH0=0x2f;
TL0=0x40;
EA=1;
ET0=1;
TR0=1;
high_time=50;
low_time=50;
PIDInit ( &spid ); // Initialize Structure
spid.Proportion= 10; // Set PID Coefficients
spid.Integral = 8;
spid.Derivative =6;
spid.SetPoint =100; // Set PID Setpoint
set[0]=set_temper/10;
set[1]=set_temper%10;
wr_com(0x80+0x40+9); //显示设置温度
wr_data(table[set[0]]);
delay(1);
wr_com(0x80+0x40+10);
wr_data(table[set[1]]);
delay(1);
wr_com(0x80+0x40+14); //显示温度符号
wr_data(0xdf);
delay(1);
while(1)
{
keyscan(); //按键扫描
for(i=0;i<10;i++) //循环10次
{
dis_temp(get_temper()); //显示温度值
if((key0==0)||(key1==0)) break; //如果有按键退出显示循环
}
if((key0!=0)&&(key1!=0)) compare_temper(); //比较温度
}
}
资料包括:
需要完整的资料可以加入我的纷传圈子。文章来源:https://www.toymoban.com/news/detail-446498.html
纷传点击用微信打开即可,过程有点繁琐请见谅。文章来源地址https://www.toymoban.com/news/detail-446498.html
需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。
到了这里,关于9、基于51单片机PID算法温度控制系统设计(程序+Proteus仿真+原理图+PCB图+参考论文+开题报告+任务书等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!