0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STC89C52单片机的智能水温控制系统设计

CHANBAEK 来源:电子应用学习馆 作者: 一只会飞的大鱼儿 2023-03-31 14:45 次阅读

1.概述

本设计为基于STC89C52单片机智能水温控制系统,控制对象以500mL陶瓷水箱为容器,并使用PID控制算法来调整水箱中500ml纯净水的温度。 水温可以在一定范围内人为设定,并能实现在下限温度到上限温度之间对每个点温度的控制。

截图20230301181746.png

主要的功能为:

1.可以通过键盘自由设定上限温度和下限温度,通过12864液晶显示,显示的最小区分为1度

2.可以通过DS18B20温度传感器测量水温并通过12864液晶显示水的实际温度,最小区分为0.1度

3.系统应具有在水温下限到水温上限全量程内的加热功能(当水温低于水温下限时开始加热,水温低于水温上限时自动断电停止加热)

4.使用PID控制算法,调节温度

5.存储设定的参数到EEEPROM中,并记录升温曲线(程序中使用DS1302,精确设定时间间隔,使用EEPROM记录升温曲线)

6.可以记录3组参数以及对应的3组升温曲线(每组250个温度数据)

2.硬件设计

本次设计的硬件电路是由STC89C52单片机为控制核心,通过DS18B20温度传感器采集的温度,传送给单片机进行PID计算,将结果作为PWM的占空比来驱动加热棒; 同时,通过LCD12864显示屏、按键和DS1302时钟芯片,可实现温度值的显示和目标温度的设置。 整体硬件框图如图所示:

在这里插入图片描述

(1)12V转5V稳压电路

由于系统的供电电源采用了4节18650锂电池供电,需要使用LM2596-ADJ芯片进行稳压,转换成12V电压,作为加热棒的加热电源,并通过LM7805-5.0稳压芯片转换为5V电压,作为单片机和其他功能电路的工作电压。 稳压芯片的电路可根据芯片技术手册中的参考电路来搭建,其电路图如图:

在这里插入图片描述

(2)按键电路

本次设置了4个控制按键,分别为设置键、增加键、减少键和OK键,通过这四个按键,可以根据用户的需求来调整相应的参数。

在这里插入图片描述

(3) DS1302时钟电路

DS1302时钟电路可以为系统提供实时年、月、日、星期、时、分、秒。

在这里插入图片描述

(4)加热控制电路

加热电路主要三极管及功率MOS管搭建而成的,3个三极管为MOS管的提供可靠的控制电平。 如图所示,当单片机引脚为高电平时,三极管T3导通,T2导通,T1截止,从而MOS管的G极接地,MOS管截止; 相反,当单片机引脚为低电平时,三极管T3截止,T2截止,T1导通,从而MOS管的G极接电源,MOS管导通,加热棒加热。

在这里插入图片描述

其他电路都相对简单,就不一一解释了。

(5)总体硬件电路图

在这里插入图片描述

3.软件设计

系统软件所需实现的功能主要为:

1.按键输入与设置

2.显示屏界面显示

3.PID算法调节

4.时钟读取及显示

由于代码较多,这里仅列出PID及主函数部分代码

注:PID算法的难点在于需要根据 具体的环境调试出性能较的PID参数,因此程序用在其他环境上需要调整PID参数。

(1) PID算法调节函数

int16 Proportion  = 64;  // 比例常数 Proportional Const   
int16 Integral    = 0;  // 积分常数 Integral Const   
int16 Derivative  = 54;  // 微分常数 Derivative Const   
float LastError;      // Error[-1]   
float PrevError;      // Error[-2]   
float SumError;        // Sums of Errors

float Now_temp;
float Target_temp;
float Temp_Out;


float PID_Calc(float NextPoint ,float SetPoint)
{
  float D_Error,Error;
  float II;
  Error = SetPoint-NextPoint;      //偏差
  SumError+=Error;          // 积分
  D_Error =LastError-PrevError;    // 当前微分
  PrevError =  LastError;
  LastError =  Error;
  II = Integral*SumError/10000.0;    //积分缩小10000倍
  if(II>30)       //积分饱和限制
  {
    II=30;  
  }
  return (Proportion*Error+II+Derivative*D_Error);
}


void Control_Temp(void)
{
  Now_temp = Temp_numbe;
  Target_temp =  Set_temp;
  if(Now_temp>High_temp)
  {
    PWM_duty = 0;  
  }
  else
  {
    Temp_Out = PID_Calc(Now_temp,Target_temp);  
    if(Temp_Out >= 100)   Temp_Out = 100;
    else if(Temp_Out <=0)  Temp_Out = 0;
    //不同的温度设置不同的比例补偿热量损失
    //Temp_Out = Temp_Out+Target_temp/80.0*20;     
    PWM_duty = (int)Temp_Out;
  }
}

(2)主函数

void main(void)
{
  int16 temp;             //温度缓存值
  System_Init();      //系统初始化
  while (1)
  {
    LED2 = 0;
    Ds1302_time();
    real_time = readtime[12]*10+readtime[13];      //从1302中读取秒值
    real_time = real_time%temp_cycle;  
    Temp_numbe = Temp_collect();               //采集温度
    if(temp_save_flag == 1 && start_warm_flag == 1)                //按下了存储按键
    {
      if((real_time == start_time)&&(real_time- last_real_time!=0)) //每隔10S记录一次时间
      {
        temp = (int16)(Temp_numbe*100+0.5);      //将温度值增大100倍,保留两位小数
        Write_DATA_EEPROM(temp,Write_add,time);    //将温度写入EEPROM中保存
        time++;
        if(time >= 250)                //最多记录250组的值
        {
          time = 250;
        }
      }

    }
    last_real_time = real_time;
    if(start_warm_flag == 1)
    {
      Control_Temp();                    //温度控制函数
    }
    else
    {
      PWM_duty = 0;
    }
    //上限报警
    if(Temp_numbe > High_temp)  LED0 = 0;    
    else LED0 = 1;
    //下限报警
    if(Temp_numbe < Low_temp) LED1 = 0;
    else   LED1 = 1;
    Init_LCD12864_Set();                //LCD12864液晶显示数据的标识
    LCD12864_Show_DATA();                  //LCD12864液晶显示数据
    UART_Send_temp();                  //将采集温度并通过串口发送到上位机
    //Uart_Send_time();                  //将DS1302的时间发送给电脑
    UART_Send_PWM();                  //将控制加热棒的PEM占空比实时发送监控
    UART_SendData('
');

  }      
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6043

    文章

    44617

    浏览量

    638026
  • 控制系统
    +关注

    关注

    41

    文章

    6657

    浏览量

    110832
  • STC89C52
    +关注

    关注

    41

    文章

    330

    浏览量

    82211
  • 稳压电路
    +关注

    关注

    28

    文章

    385

    浏览量

    56699
  • 按键电路
    +关注

    关注

    1

    文章

    35

    浏览量

    21815
收藏 人收藏

    评论

    相关推荐

    基于STC89C52智能全自动洗衣控制系统设计

    的稳定性、降低制造成本以及更方便的操作,设计了一种基于STC89C52单片机的全自动洗衣控制系统。该控制系统由蓝牙部分、红外热释部分、LC
    发表于 09-10 07:05

    怎样去设计一个基于STC89C52单片机智能水温控制系统

    1.概述本设计为基于STC89C52单片机智能水温控制系统控制对象以500mL陶瓷水箱为容器,并使用PID
    发表于 12-07 11:37

    基于单片机STC89C52的摇摇棒

    基于单片机STC89C52的摇摇棒设计,有电路图和源程序
    发表于 11-23 14:38 28次下载

    基于STC89C52单片机的交通灯控制系统设计

    基于STC89C52单片机的交通灯控制系统设计 论文类
    发表于 12-14 15:44 168次下载

    基于STC89C52单片机控制的温度控制系统课程设计

    基于STC89C52单片机控制的温度控制系统
    发表于 01-06 17:00 152次下载

    单片机STC89C52程序

    单片机STC89C52源程序。
    发表于 01-11 18:16 112次下载

    基于STC89C52单片机智能交通灯控系统设计

    基于STC89C52单片机智能交通灯控系统设计
    发表于 02-22 11:37 107次下载

    基于STC89C52单片机智能窗帘控制系统

    基于STC89C52单片机智能窗帘控制,但没有程序图和连线图。
    发表于 04-28 18:02 31次下载

    STC89C52单片机介绍

    STC89C52单片机介绍。
    发表于 05-20 13:55 257次下载

    基于单片机STC89c52 GSM的智能家居报警系统设计

    基于单片机STC89c52 GSM的智能家居报警系统设计,分享给大家。
    发表于 05-05 08:40 81次下载

    基于STC89C52单片机控制系统设计

    本文主要介绍了基于STC89C52单片机控制系统设计。
    发表于 06-24 08:00 112次下载
    基于<b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>的<b class='flag-5'>控制系统</b>设计

    基于STC89C52单片机智能小车设计

    基于STC89C52单片机智能小车设计方法介绍。
    发表于 05-28 10:57 103次下载

    基于单片机STC89C52控制智能小车简介

    基于单片机STC89C52控制智能小车简介(单片机原理图)-该文档为基于单片机
    发表于 07-22 14:21 68次下载
    基于<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52</b><b class='flag-5'>控制</b>的<b class='flag-5'>智能</b>小车简介

    基于PID算法的水箱温度控制系统

    1. 概述本设计为基于STC89C52单片机智能水温控制系统控制对象以500mL陶瓷水箱为容器,并使用PID
    发表于 11-24 20:51 25次下载
    基于PID算法的水箱温度<b class='flag-5'>控制系统</b>

    基于STC89C52单片机温控风扇系统设计

    本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统选用STC89C52单片机作为控制
    发表于 07-25 17:37 1908次阅读
    基于<b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>的<b class='flag-5'>温控</b>风扇<b class='flag-5'>系统</b>设计