9、基于51单片机PID算法温度控制系统设计(程序+Proteus仿真+原理图+PCB源文件+参考论文+开题报告+任务书等)

毕设帮助、开题指导、技术解答(有偿)见文未

目录

摘要

一、硬件方案

二、设计功能

三、成品实物图

四、原理图 

五、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(); 	//比较温度
	}
}

 资料包括:

需要完整的资料可以加入我的纷传圈子。

纷传点击用微信打开即可,过程有点繁琐请见谅。

需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。

  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ENGLISH_HHZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值