57、基于51单片机PID算法水温控制系统设计

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

目录

摘要

一、硬件方案

二、设计功能

三、实物图

四、原理图

五、PCB图

六、Proteus仿真

七、程序

八、资料包括 


目录

摘要

一、硬件方案

二、设计功能

三、实物图

四、原理图

五、PCB图

六、Proteus仿真

七、程序

部分代码

八、资料包括 


摘要

主要实现:实时温度测量及显示,超出温度范围相应的继电器工作,继电器可以驱动相应的加热或制冷负载,上下限温度可通过按键设定等功能。

本数字温度报警器是基于51单片机及温度传感器DS18B20来设计的,温度测量范围0到99.9摄氏度,精度为0.1摄氏度,可见测量温度的范围广,精度高的特点。可设置上下限温度,默认上限温度为38℃、默认下限温度为5℃(通过程序可以更改上下限初始值)。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。将下限报警值调为0时为关闭下限报警功能。

关键词:PID,单片机,水温

一、硬件方案

硬件构成: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(); 	//比较温度
	}
}

八、资料包括 

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

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冠一电子设计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值