您当前的位置:五五电子网电子知识电器控制温度控制电路一种开关量控制的水浴恒温控制器设计方法 正文
一种开关量控制的水浴恒温控制器设计方法

一种开关量控制的水浴恒温控制器设计方法

点击数:7777 次   录入时间:03-04 11:52:16   整理:http://www.55dianzi.com   温度控制电路

    电加热水浴恒温控制具有升温单向性、大惯性、大滞后、时变性、依靠环境自然冷却降温的特点,难以用数学方法建立精确的模型[1]。传统的控制方法是温度低于设定值时,持续加热;高于设定值时,停止加热。这种方法容易使加热过程温度有很大的过冲,在其恒温过程中,温度波动也较大。

    本设计采用的温控方法为:温度较低时,持续加热;温度接近时,断续加热;温度高于设定值时,停止加热。本控制器设定参数具有掉电保持功能,下次开机不用重新设定,方便连续作业;除了数字显示当前温度外,更能显示温度曲线,使其变化趋势一目了然,具有传统数码管显示无法比拟的优点。温度传感器采用数字温度传感器,硬件设计简单,大大减小了由信号转换引起的误差。

    本控制器可当作“水浴锅”、“水温箱”、“煮沸消毒箱”的控制器使用,其温控效果可用于蒸馏、干燥、浓缩及恒温加热、化学药品、生物发酵制品、检查血清和生化实验、恒温培养等。

    1 控制器硬件组成

    如图1所示,控制器由实时时钟、数字温度传感器、单片机、TFT液晶屏、输出继电器、按键等部分组成。

    本控制器采用宏晶公司STC89C52RC型单片机作为核心控制器,其Flash程序存储器容量为8 KB,数据存储器RAM为512 B,内部具有2 KB容量的E2PROM,可用作参数设置时掉电保存参数用,这样就不需要设计外部存储器,精减了硬件电路设计。该芯片加密性强,抗干扰能力强,功耗低,满足本控制器设计要求。内部E2PROM读写的3个基本命令为字节读、字节编程、扇区擦除。同一个地址的数据可以反复读出,但要写入数据,必须先将其擦除,而数据擦除是按扇区(每个扇区512 B)进行的[2]。

6576

     数据显示部分采用的是1.8英寸TFT液晶屏,型号为GYTF018LB35B0M,由于没有自带汉字字库,所以需要自行取汉字字模,存入程序存储空间,通过函数调用实现字符显示。使用时需自行设定字符显示的大小,针对不同的显示要求,本系统使用了32×32、16×16、8×8三种大小字符显示效果。
 实时时钟芯片用于显示当前系统运行时间和控制温度均匀采样。本控制器采用DS1302作为时钟控制芯片。DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,采用SPI三线接口与CPU进行同步通信,可采用突发方式一次传送多个字节的数据。实时时钟提供秒、分、时、日、星期、月和年记录,且具有闰年补偿功能,工作电压宽达2.5 V~5.5 V,采用双电源供电(主电源与备用电源)。DS1302能实现数据与出现该数据的时间同时记录,因此广泛用于测量系统中。控制器的时钟电路如图2所示。

45

    2.1 初始化模块

    初始化模块由以下函数组成:(1)读取上一次存储在E2PROM中的两个设定值,即设定温度值,时间间隔值;(2)配置数字温度传感器18B20;(3)配置LCD,清屏LCD为黑色,并显示一些在整个控制过程中不变的字符和曲线,如“g”、“℃”等。本模块在程序开始运行后,只执行一次。77

    2.4 获取当前时钟模块

    通过函数Read_RTC(unsigned char *pdate_r),将DS1302当前时钟数据读入到date_r[7]数组中,调用方式为:Read_RTC(date_r)。其中date_r[7]数组中每位依次表示为秒、分、时、日、月、年、周,且均为BCD码。所以date_r[0]代表了当前的秒数,date_r[3]位表示了当前代表的天数。获取了当前的时钟信息后,通过函数date2string(unsigned char *pdate_dispstr)转换为相应的字符串,然后调用字符串显示函数在液晶屏上显示。本系统为了方便记录当前系统已运行的时间,需设置相应按键,用于时钟清零[4]。



www.55dianzi.com

    2.5 温度曲线显示模块

 温度曲线显示模块是本控制器编程的难点之一。本文选择的液晶屏点数为128×160,真正显示曲线部分如图6所示。由图6可知,可显示的横坐标点共121个点。若在while循环中,每次循环都在液晶屏上显示一个点,则121个横坐标表示的点只能覆盖很短的时间。若能实现每隔1 s读取一次温度值,则整个屏幕可以覆盖2 min内的数据,也就是说足可以显示2 min内的温度变化的趋势。本文实现的方法如下:
 cur_sec=date_r[0]; //读出当前的秒数,为BCD码
if (cur_sec!=last_sec)
//当前的秒数与上一次不相等,则过了1 s了
      {
      ……//此部分代码1 s执行一次
      last_sec=cur_sec;
      count++;//用于控制断续加热
      }

565

      画点函数与画直线函数原型为:

    void  LCD_draw_point(uchar x,uchar y,uint color);

    //画点函数

    void  LCD_draw_line(uchar xStart,uchar yStart,uchar xEnd,uchar yEnd, uint color)//画直线函数

    在曲线显示时,希望温度曲线始终在屏幕的中间部分显示,以全面反映温度的上下波动。而且画直线时,需要知道上一个温度点的纵坐标和当前温度点的纵坐标。本系统中,曲线显示部分中间那条标尺纵坐标为115,于是计算当前温度点的纵坐标和上一次温度点的纵坐标方法为:

    a=115+(TargetTEMSet-Temperature);

    //温度变化后的Y坐标

    b=115+(TargetTemSet-Temperature_last);

    //温度变化前的Y坐标

    其中,TargetTemSet为当前设定的温度值,Temperature为当前检测到的温度值,Temperature_last为上一秒检测到的温度值。假设设定温度TargetTemSet=200(即20.0℃),上一次温度Temperature_last=200,当前温度为Temperature=210,则变化后的温度点纵坐标a=105,温度变化前的温度点纵坐标b=115。由此可以画一条竖线,就可以达到设计要求。在使用画直线函数前,还需要将a、b限幅,即{a,b}?奂[75,155]。

    在本设计中,共画出了9条标尺,每个标尺间距为10个像素点,代表温度相差1℃。

    2.6 温度调节模块

    本控制器要求实现温度值与设定值相差大于3℃时,连续加热;小于3℃时,断续加热;大于设定值时,断开继电器;断续加热时,继电器交替通断。关键代码如下:

    if(Temperature<(TargetTemSet-30))

    //温度较低,直接加热

    {

    if (Temperature!=0)   RELAY=RelayOn;

    }

    else if(Temperature<TargetTemSet)

    //温度接近设定温度,断续加热

    {

    if (count>= TargetTimeInterval)

    //读出秒数,需加热时,加热几秒,停几秒

    { count=0;   RELAY=!RELAY;}

    }

    else   RELAY=RelayOff;//大于设定值, 断电

    3 恒温实验效果

    针对本设计进行相关的实验,实验原理图如图10所示。实验中,设定了3个温度档次,即30 ℃、35 ℃、40 ℃分时进行。

5675

      当设定为30℃时,通过实验发现加热过程温度过冲为0.3℃,恒温过程波动为±0.1℃,控制过程运行良好。

[1] [2]  下一页


本文关键字:开关  控制器  温度控制电路电器控制 - 温度控制电路

《一种开关量控制的水浴恒温控制器设计方法》相关文章>>>