• 原创美文
  • 经典文章
  • 情感美文
  • 伤感文章
  • 散文
  • 美文随笔
  • 感人文章
  • 人生哲理
  • 学生美文
  • 民族文化
  • 说说大全
  • 网名大全
  • 范文大全
  • 当前位置: 佩佩美文网 > 原创美文 > 正文

    智能化水温控制系统

    时间:2020-03-02 04:12:45来源:佩佩美文网 本文已影响 佩佩美文网手机站

    水温控制系统

    摘要

    现如今,人们的生活越来越强调智能化以及低碳化,无论是智能化还是低碳化,生活在人们都希望自己的电器越来越智能,即能按照人们的意愿,低功耗的实现功能。水温控制作为人们生活以及工业的重要组成部分,能否实现智能化以及低功耗化十分重要。水温控制系统以STC89C51作为核心的温度控制系统,将DS18B20作为温度感应器,可直接反馈数字量的温度信息并可以调节精度;
    以继电器以及螺旋加热管作为加热模块;
    以发光二级管以及蜂鸣器作为声光告警装置;
    以数码管作为温度显示模块。程序上利用PID调节算法,多次调节其中参数,使得温度控制更加精确。该系统具有简单、成本低、质量安全可靠的特点。相信无论是在生活还是生产中都会有不错的应用前景。

    关键词 智能化 温度控制 STC89C51 DS18B20 PID调节算法

    一.任务以及要求

    设计并制作一个水温自动控制系统,水温可以在一定范围内由人工设定,可以实现自动报警功能。

    1.基本内容如下: 

    (1)温度设定范围为:40~90℃,最小区分度为 1℃,标定温度≤1℃。 

    (2)环境温度降低时温度控制的静态误差≤1℃。 

    (3)用10进制数码管显示水的实际温度。 

    2.发挥要求:

    (1)温度控制范围扩大,最小区分度减小。

    (2)温度控制的静态误差≤0.2℃。

     (3)特色与创新。

    二.方案设计及其论证

    水温的控制,必须先精确地获取温度,所以温度传感器的选择就非常重要。通常,温度所测量的是模拟量,模拟量的转换涉及到A/D的转换。温度传感器把温度传送给处理器核心,处理器核心经过分析,判断是否满足处理的条件,进行相关的处理。可实现的动作包括以下几项:达到设定温度,进行声光报警;
    温度低,进行加热处理。其中温度的设定就要利用到键盘。声光报警就需要用到发光二级管以及蜂鸣器。经以上分析,可以将温度控制系统分为以下几个模块:

    1.温度传感器

    温度传感器应具有精度足够高、处理速度足够快、体积小等特点。采用DS18B20温度传感器。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;
    温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出远端引入。此器件具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求。 更重要的是采用该温度传感器后不用采用A/D转换。节省了大量的工作量。

    2.键盘显示

    按键主要涉及到温度的调节以及模式的转换。显示部分主要涉及到水温的实时显示,以及功能模式的显示。按任务功能需求采用独立键盘,并且利用MCU对键盘进行扫描。这种方案既能很好的控制键盘及显示,又为MCU大大的减少了程序的复杂性,而且具有体积小,简单易做的特点。显示部分按照任务要求采用4位数码管设计,来显示水温以及工作模式等。也具有简单、可靠的特点。

    3.CPU核心

    CPU主要控制水温以及其他模块的协调工作。是该水温控制系统的核心。根据对方案的分析,采用简单易用的STC89C52单片机,其内部有4KB单元的程序存储器,不需外部扩展程序存储器,而且它的I/O口也足够本次设计的要求。具有简单方便、成本低以及可靠的特点。

    经以上分析,只要合理设计电路以及正确编写程序,以上几个模块在MCU以及程序的调节下能协调工作,共同完成水温的控制,从而达到任务要求。

    三.理论分析与计算

    各个模块要在MCU的调节下合理有序的工作,那么系统必须采用合理高效的控制系统。这就要涉及到过程控制,过程控制指对生产过程的某一或某些物理参数进行的自动控制。过程控制可分为:模拟控制系统、微机过程控制系统以及数字控制系统DDC。模拟控制系统中被控量的值由传感器或变送器来检测,这个值与给定值进行比较,得到偏差,模拟调节器依一定控制规律使操作变量变化,以使偏差趋近于零,其输出通过执行器作用于过程。微机过程控制系统以微型计算机作为控制器。控制规律的实现,是通过软件来完成的。改变控制规律,只要改变相应的程序即可。

    现如今在生产以及实践中运用最多的是DDC(Direct Digital Congtrol)系统:

                   图3-1   DDC系统构成框图

    DDC(Direct Digital Congtrol)系统是计算机用于过程控制的最典型的一种系统。微型计算机通过过程输入通道对一个或多个物理量进行检测,并根据确定的控制规律(算法)进行计算,通过输出通道直接去控制执行机构,使各被控量达到预定的要求。由于计算机的决策直接作用于过程,故称为直接数字控制。

    其中控制规律即为PID调节,本系统中为软件实现。涉及到的理论计算如下:

    1.模拟PID控制规律的离散化

      表一.模拟PID控制规律的数字化公式

    模拟形式

    离散化形式

    2.数字PID控制器的差分方程

    式中                  为比例项

                      为积分项

               为微分项

    四.系统设计方案

    1.工作模式

    本着智能化以及按照题目要求,将系统设计有以下两个个工作模式:A.测定水温以及显示水温;
    B.设定水温并保温;
    其中A为默认工作状态,即开机工作状态,工作内容为实时测量水温并在数码管上显示。B为设定温度并保温。由用户设定一定的温度,系统自动工作,加热到设定温度后声光报警,声光报警装置可独立开关,如果不切断电源或切换模式,系统将自动竟然保温模式。其中温度的设定有键盘控制。不管在那种工作模式,一旦复位键按下,将回到默认工作模式。在B工作模式下并且显示实际水温时,按下加键可以显示用户设定温度。根据以上的分析总结如下:

    2.电路设计

    根据以上的分析,可以将整个系统分为以下几个部分:单片机最小系统,测温电路,功率电路,交流过零检测电路,显示电路,系统框图如下

    (1)89C52最小系统

    最小系统采用将C52MCU以及独立键盘、数码管集成在一块板上的工作方式。 其中P0口接数码管。其他包括复位电路、独立键盘、晶振电路。其电路如下图5-1所示: 

    图5-1 最小系统

    (2)18B20测温电路

    测温电路是使用DS18b20数字式温度传感器,它无需其他的外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单。它能够达到0.5℃的固有分辨率,使用读取温度的暂存寄存器的方法还能达到0.2℃以上的精度。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD,共用地线GND。外部供电方式(VDD接+5V,且数据传输总线接4.7k的上拉电阻,其接口电路如图5-2所示:

    图5-2 控制电路

    (3)功率电路

    功率电路主要是继电器模块,包括三极管以及电阻组成控制部分,与MCU进行通信。PNP管的导通控制着继电器的常闭触点的接通与否。继电器常闭触点连接着外部加热电路。其中继电器的电感部分连接着二极管,起着引流保护PNP管的作用。其电路如下图6-1:

    图6-1 功率电路

    (4)声光报警电路

    声光报警电路采用蜂鸣器以及二极管串联的形式,通过PNP三极管控制电路通断。利用P3.7来与MCU通信。如下图6-2:

    图6-2 声光报警电路

    (5)红外接收装置

    该部分为创新部分,采用红外接收装置来接受红外遥控器的信号,这样就可以通过无线方式进行信息的传递。通过遥控器可以设定温度,切换工作模式等。工作原理为红外遥控器产生红外信号,红外接收头接收到红外信号后,其内部电路把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。最终将数字信号传输到MCU,MCU做出相应的反应。其电路如下图7-1:

    图7-1 红外接收装置

    五.软件设计说明

    (1)总流程

    本系统是采用查询方式来显示和控制温度的。其中加入了红外以及键盘等的其他控制器件语句。总流程图如下图7-2:

    图 7-2 总流程图

    (2)工作时序

    工作时序由初始化模块、测温、显示等模块组成。具体工作时序如下图8-1:

    图 8-1 工作时序

    (3)主要程序

    1.主函数如下:

    #include 

    #include 

    unsigned char choice;

    unsigned char key_down;

    #include"DS18B20.H"

    #include"PID.H"

    #include"XIANSHI.H"

    #include"KEYSCAN.H"

    #include"INFRARED.H"

    void main()

    {

     unsigned int tmp;

     unsigned char counter=0;

     P2 |= 0x07;   //初始化按键

     PIDBEGIN();    //初始化PID

     init_infrared(); //初始化红外

     ReadTemperature(); //预读一次温度

     hello(); //显示HELLO,屏蔽85°C

     while(1)//检测红外线

    {  

    if(IrOK==1&&Im[0]==0x00) 

       proc_infrared();

       if(counter-- == 0)

    {

    tmp = ReadTemperature(); 

    counter = 20;

    }

    key_scan();//扫描键盘

    proc_key();//刷新显示缓存

    if(choice==0)

    update_disbuf(tmp);

    else

    update_disbuf(set_tmpbuf);

    if(pid_on)

    compare_temper(); 

    else

    {

    high_time=0;

    low_time=100;

    }   

    }

    2. PID算法温度控制程序

    #ifndef _PID_H__

    #define _PID_H__

    #include 

    #include 

    #include 

    struct PID { 

    unsigned int SetPoint; // 设定目标 Desired Value 

    unsigned int Proportion; // 比例常数 Proportional Const 

    unsigned int Integral; // 积分常数 Integral Const 

    unsigned int Derivative; // 微分常数 Derivative Const 

    unsigned int LastError; // Error[-1] 

    unsigned int PrevError; // Error[-2] 

    unsigned int SumError; // Sums of Errors 

    struct PID spid; // PID Control Structure 

    unsigned int rout; // PID Response (Output) 

    unsigned int rin; // PID Feedback (Input) 

    sbit output=P3^4; 

    unsigned char high_time,low_time,count=0;//占空比调节参数 

    unsigned char set_temper=33; 

    void PIDInit (struct PID *pp) 

    memset ( pp,0,sizeof(struct PID)); 

    unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) 

    unsigned int dError,Error; 

    Error = pp->SetPoint - NextPoint; // 偏差 

    pp->SumError += Error; // 积分 

    dError = pp->LastError - pp->PrevError; // 当前微分 

    pp->PrevError = pp->LastError; 

    pp->LastError = Error; 

    return (pp->Proportion * Error//比例 

    + pp->Integral * pp->SumError //积分项 

    + pp->Derivative * dError); // 微分项 

    /*********************************************************** 

    温度比较处理子程序 

    ***********************************************************/ 

    compare_temper() 

    unsigned char i; //EA=0;

    if(set_temper>temper) 

    if(set_temper-temper>2) 

    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/1600); 

    else 

    high_time=100; 

    low_time= (100-high_time); 

    } } 

    else if(set_temper<=temper) 

    if(temper-set_temper>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/20000); 

    else 

    high_time=0; 

    low_time= (100-high_time);

    //EA=1; 

    } } } 

    /***************************************************** 

    T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期 

    ******************************************************/ 

    void serve_T0() interrupt 1 using 1 

    {  

    if(++count<=(high_time)) 

    output=1; 

    else if(count<=100) 

    output=0; 

    else 

    count=0; 

    TH0=0x2f; 

    TL0=0xe0; 

    }

    void PIDBEGIN() 

    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 

    #endif

    3.DS18B20子程序

     #ifndef __DS18B20_H__

    #define __DS18B20_H__

    sbit DQ = P3^5;   //定义通信端口 

    unsigned int s;

    unsigned char temper;

    //晶振22MHz  

    void delay_18B20(unsigned int i)

    {

      while(i--);

    }

    //初始化函数

    Init_DS18B20(void) 

    {

     unsigned char x=0;

     DQ = 1;          //DQ复位

     delay_18B20(4);  //稍做延时

     DQ = 0;          //单片机将DQ拉低

     delay_18B20(100); //精确延时 大于 480us

     DQ = 1;          //拉高总线

     delay_18B20(40);  

    }

    //读一个字节  

    ReadOneChar(void)

    {

    unsigned char i=0;

    unsigned char dat = 0;

    for (i=8;i>0;i--)

     {

      DQ = 0; // 给脉冲信号

      dat>>=1;

      DQ = 1; // 给脉冲信号

      if(DQ)

      dat|=0x80;

      delay_18B20(10);

     }

      return(dat);

    }  

    WriteOneChar(unsigned char dat)//写一个字节

    {

     unsigned char i=0;

     for (i=8; i>0; i--)

     {

      DQ = 0;

      DQ = dat&0x01;

      delay_18B20(10);

      DQ = 1;

      dat>>=1;

     }

    }

    ReadTemperature(void)//读取温度

    {

    unsigned char a=0;

    unsigned char b=0;

    unsigned int t=0;

    //EA = 0;  

    Init_DS18B20();

    WriteOneChar(0xCC); //跳过读序号列号的操作

    WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

    a=ReadOneChar();

    b=ReadOneChar();

    Init_DS18B20();//启动下一次温度转换

    WriteOneChar(0xCC); // 跳过读序号列号的操作

    WriteOneChar(0x44); // 启动温度转换

     t=(b*256+a)*25;

     b=(b<<4)&0x7f;

     s=(unsigned int)(a&0x1f); 

         s=(s*100)/16;

     a=a>>4;

     temper=a|b;

     return(t>>2);

    }

    #endif

    六.测试方法与数据

    测量方式:接上系统的加热装置,装入25.06摄氏度室温的水,通过键盘或者红外遥控器设定控温温度。记录调节时间、超调温度、稳态温度波动幅度等。

    测量条件:环境温度26.5℃(附:加热电炉功率600W)。

    测量结果:如表二所示。在此仅以数值的方式给出测量结果。调节时间按温度进入设定温度±0.5℃范围时计算。

    表二 测量结果数据

    设定温度/℃

    35

    45

    65

    75

    调节时间/min

    1.15

    1.12

    1.58

    1.06

    超调温度/℃

    35.06

    45.12

    64.87

    74.87

    稳态误差/℃

    0.06

    0.12

    0.13

    0.13

    六.测试结果分析

    由测试结果和上表数据得出:

    (1)温度设定范围为30~95℃(在40~90范围内),最小区分度达到0. 01℃(小于1℃)以上,标定温度值也符合设计要求。 

    (2)由于采用了PID控制,在环境温度降低时温度控制的静态误差小于0.5℃(精度高于设计要求)。 

    (3)用数码管来显示水的实际温度和设定温度值,显示很稳定。 

    (4 )采用了PID控制,当设定温度突变(由40℃提高到60℃)时,经过多次调试知道,当P=10;
    I=8;
    D=6时系统具有最小的调节时间和超调量。 

    (5)当温度稳定时,温度控制的静态误差≤0.5℃。

    (6)创新部分为添加了红外遥控装置。可代替键盘部分功能,且能更方便的调节温度等。

    (7)经过多次测试和改进,该系统各方面参数都达到和超过设计参数,完成了既定目标。

    参考文献:

    [1] 李桢、赵宏权,《PID调节概念及基本原理》[J],《科技信息(科学教研)》,07,29期

    [2]郭天祥,《51单片机C语言教程》[M],北京:电子工业出版社,2009

    • 智能化水温控制系统 相关文章: