1884 基于单片机的PID恒温控制系统设计【毕设课设】

摘要

本文介绍了一种基于51单片机的PID恒温控制系统设计。该系统通过DS18B20温度采集芯片实时监测环境温度,并采用PID算法控制PWM信号的输出,以驱动继电器吸合,进而控制电机进行加热操作。在达到目标温度前后,系统通过不同的控制策略实现快速加热和精确保温,确保温度在设定范围内稳定波动。

关键词:51单片机;PID算法;PWM驱动;DS18B20;恒温控制

一、引言

恒温控制在许多领域都具有重要的应用价值,如实验室设备、工业生产过程以及家居环境等。传统的恒温控制方法往往存在精度低、响应速度慢等问题。因此,设计一种基于单片机的PID恒温控制系统,实现温度的精确控制和快速响应,具有重要的实际意义。

二、系统总体设计

本系统以51单片机作为主控芯片,通过DS18B20温度采集芯片实时获取环境温度,并将温度数据输入到PID算法中进行处理。PID算法根据设定温度与实际温度的差值,计算出相应的PWM占空比,从而控制继电器的吸合程度,进而调节电机的加热功率。当温度达到设定阈值时,系统采用不同的控制策略,以实现快速加热和精确保温。

三、硬件设计

1. 51单片机

作为系统的核心控制器,51单片机负责接收温度数据、执行PID算法、输出PWM信号以及控制继电器吸合等操作。

2. DS18B20温度采集芯片

DS18B20是一种高精度数字温度传感器,能够实时采集环境温度数据,并将其转换为数字信号输出给单片机。

3. PWM驱动电路

通过单片机输出的PWM信号,驱动继电器吸合,从而控制电机的加热功率。PWM信号的占空比由PID算法计算得出。

4. 继电器与电机

继电器负责将PWM信号转换为电机的控制信号,电机则根据控制信号进行加热操作。

四、软件设计

1. 温度采集与处理

系统通过DS18B20芯片实时采集环境温度,并将温度数据转换为单片机可识别的格式。然后,将实际温度与设定温度进行比较,根据差值计算PID输出。

2. PID算法实现

PID算法根据设定温度与实际温度的差值,通过比例、积分和微分三个环节的组合,计算出PWM占空比。不同的温度差代表不同大小的PID输出,即不同大小的PWM占空比。

3. 控制策略

在到达(目标温度-5摄氏度)前,电机全速运行进行加热操作。当温度进入设定温度的上下5℃范围内时,PID算法开始起作用,通过调整PWM占空比实现精确控温。若温度超过设定阈值,则停止加热,采用自然冷却的方式实现过温保护。

五、系统测试与验证

通过搭建实际测试环境,对系统的恒温控制性能进行测试。测试结果表明,系统能够快速响应温度变化,实现温度的精确控制和稳定波动。同时,系统在过温时能够自动停止加热,保护设备安全。

六、结论

本文设计了一种基于51单片机的PID恒温控制系统,通过DS18B20温度采集芯片和PID算法实现温度的精确控制和快速响应。系统具有结构简单、操作方便、控制精度高等特点,适用于各种需要恒温控制的场合。未来可以进一步优化PID算法和硬件设计,提高系统的性能和稳定性。

#include <REGX51.H>

unsigned char m,n,p;  			//温度的十位 个位 小数
unsigned char test_temp;		//温度检定标志
unsigned char key_set_flag;		//按键设定进入标志
unsigned char flag=1;			//按键保持标志
unsigned char Change_step=1,e;	//温度设置步进
unsigned char T0_H = 0,T0_L = 0,T1_H=0,T1_L=0;//PWM
int Real_temp;		//实际温度值
int Set_temp;		//设置温度
int Disp_temp;		//显示温度
int last_error;		//上次误差
float I_term;		//前面温差和
bit	key_hold;
int PID_MAX;
unsigned int out,PWMT,counter,kk,outp,dz;
int time;	//脉冲触发时刻

sbit DQ=P2^4;	//定义DS18b20的管脚

sbit RS = P2^0;   //定义液晶屏定义端口 
sbit RW = P2^1;	  //定义液晶屏定义端口 
sbit EN = P2^2;	  //定义液晶屏定义端口 

sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit PWM=P2^7;	//PWM控制脚
sbit led1=P3^5;
sbit led2=P3^6;
sbit led3=P3^7;
sbit beep=P1^3;

#define Kp 5	//比例系数 
#define Ki 0    //积分系数
#define Kd 1	//微分系数

#define RS_CLR RS=0 
#define RS_SET RS=1

#define RW_CLR RW=0 
#define RW_SET RW=1

#define EN_CLR EN=0
#define EN_SET EN=1

unsigned char aa[]={'S','e','t','u','p',':',' ',' ',' ',' ','.',' ',' ',' ',' ',' '};	   //Distance
unsigned char bb[]={'C','u','r','r','t',':',' ',' ',' ',' ','.',' ',' ',' ',' ',' '};	


void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);
void LCD_init();			//LCD初始化
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,大致延时长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 	while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
  	while(t--) 		//大致延时1mS
 	{
     	DelayUs2x(245);
	 	DelayUs2x(245);
 	}
}

部分代码

资料下载地址:

https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值