基于AT89S52单片机的温度控制系统
扫描二维码
随时随地手机看文章
0 引 言
在激光倍频晶体温度匹配中,有时需要很高的工作温度。晶体升温过程中,温度过快变化会导致晶体出现破裂,因此在开机过程中需要操作人员不断手动控制激光器晶体的温度。为了避免这样繁锁的工作,我们以单片机AT89S52为核心制作了一套自动控制升降温系统,有效的保证了晶体温度在安全的速率下变化。由于热敏电阻的非线性关系,一般的控温仪正常控温范围有限。在对热敏电阻和恒流源的特性进行分析后,将恒流源做了适当的改进,扩展了控温仪的控制范围,使其在较宽的温度范围内也具有较高的精度。
1 硬件系统设计
控制系统电路的核心器件是Atmel公司生产的AT89S52单片机。它是一种低功耗、低电压、高性能的8位单片机,片内带有一个8KB的flash可编程、可擦除、只读存储器;它采用的工艺是Atmel公司的高密度非易失存储器技术,而且其输出引脚和指令系统都与MCS-51兼容。价格低廉、性能可靠、抗干扰能力强。因此广泛应用于工业控制和嵌入式系统中。
图1为该系统的结构框图,为了节省成本和体积,我们采用多路选择开关CD4051和模数转换器AD7705协同工作组成多路数据采集系统。
CD4051是NS公司生产的数控模拟开关,可控制最大输入范围约为士15V左右的模拟电压,由输入的3位地址码决定八个通道中哪一个通道开通;选通通道具有非常低的输入阻抗,约为80Ω,关闭的通道具有很低的漏电流,每一路约为10pA左右,处于工作状态时功耗大约为1μW,是一款性能十分优良的数控模拟开关。AD7705是一款16位串行模数转换芯片,功耗非常低,在3V供电电压和1MHz的主频下,消耗功率小于1mW,供电电流小于8μA,转换精度高,可达±0.003%,无误码。MAX541是由美信公司生产的串行输入数模转换器件,无需校准,功耗不超过l.5mW。AT24C02是Atmel公司生产的EEPROM器件,存储容量256字节,可擦写次数达100万次,主要用来存储设定温度。PCF8574由Philips公司生产,它可将I2C串行输入的数据转换为8路并行输出,用于器件的I/O口扩展。本系统中,将其8位输出口直接连接在LCD12864的8位数据输入口中。LCD12864是点阵型液晶,驱动方便,经编码后显示内容多样化。系统的输入模块采用中断扫描的4×4矩阵键盘,相比定时扫描方式,提高了MCU的使用效率。
2 系统流程图
图2为系统的流程图,上电后先对系统进行初始化,然后进入while(1)循环语句,此循环体中包含两个while语句,分别为while(state)和while(!state)。程序根据位变量state的值选择进入温度设定状态还是系统运行状态。在初始化的过程中将state的值设为1,因此刚开机系统进入运行状态。运行状态下,系统不断通过CD4051和AD7705联合采集热敏电阻两端的电压值,然后与设定电压值对比,并通过MAX541定时输出自动升温电压值,让系统严格地在规定时间内升到指定温度。在循环的过程中还需要不断地判断bit变量kd的值,此变量为全局变量,由键盘中断程序置1,同时键盘中断程序还返回按键扫描值key,该值用来确定按下哪一个键。显然从流程图中可以看出,当kd为0时,程序跳过按键程序模块,当kd为1时程序先判断key值,然后运行相对应的按键功能程序。我们将某一键设为状态切换键,当按下此键时执行程序state=!state,这样就实现了状态的切换。在进入设定状态后,MAX541的输出停止改变。同时光标不断闪烁,提示使用者输入温度设定值。光标闪烁程序和MAX541定时改变输出值的程序都是采用定时器中断来实现的。因为两种功能处于不同的状态,同时为了避免中断过多造成系统不稳定,通过利用state变量的值和if语句,有效地将两种功能用一个定时器来实现。进入定时中断程序后,当state值为1时,即系统处于运行状态时,执行定时改变MAX541输出值的功能。当state的值为0时,即系统处于设定状态时,执行光标闪烁的功能。
3 温控仪的恒流源改进
3.1 热敏电阻
3.1.1 NTC热敏电阻温度特性方程
NTC热敏电阻温度特性方程用下列经验公式描述:
式中:RT为T时的热敏电阻阻值,RT0为T0时热敏电阻阻值,从上述表达式可以看出电阻的变化与温度的变化成指数关系,温度升高,阻值迅速降低,灵敏度高是热敏电阻测温的主要优点。
3.1.2 NTC热敏电阻的热电特性
热敏电阻自身温度变化1℃时,其电阻值的相对变化定义为热敏电阻的热温度系数,由热敏电阻的经验公式可以推出热温度系数a为:
从上式可以看出NTC热敏电阻的温度系数为负,且与温度变化有关,温度越低,温度系数越高,灵敏度越高;反之则灵敏度越低。
3.1. 3 线性插值法简介
热敏电阻的主要优点是:温度系数大、灵敏度高、适合于高精度测量。但其缺点是存在非线性,为了提高显示的准确度,需要对热敏电阻进行线性插值法处理。该方法根据精度要求对温度特性曲线进行分段,分段越多,线性化的近似精度越高,分段后用若干折线段逼近曲线,折点的坐标值存入表中,测量时要先用折半查找法判断出被测温度对应的热敏电阻属于哪一折线段,然后根据相应折线的斜率进行线性插值从而求出被测温度。下面用图示的方法说明线性插值法:
图3中k为折点的序号,Tt为根据插值法算出的温度值,Tact为相应的阻值对应的实际温度值。显然当分段越多,即Rk和Rk+1间的间距越小时,Tt和Tact之间的间距越小,实测值与计算值之间的误差越小。
根据图3可知温度表达式的通式为:
式中:Vt为采集到的热敏电阻两端的电压值,It由所选用的恒流源决定。
3.2 恒流源
从热敏电阻的特性可知,在高温时,变化相同的温度引起的阻值变化较小,即温度系数较小,传统的解决方法是加大恒流源的电流。由于温度较低时热敏电阻的阻值变大,加在热敏电阻两端的电压也变大,当此电压超出运算放大器正常工作电压时,此时恒流源将不能正常工作。显然低温时恒流源工作电流不能太大,高温时又要求恒流源工作电流不能太小。为了克服这对矛盾,我们将恒流源分为两档,分别为10μA和100μA。利用单片机控制继电器可以实现两档恒流源的自动切换。当温度为100℃以下时使用10μA的恒流源,当温度为100℃以上时使用100μA的恒流源。这样就相当于提高了高温时的灵敏度,从而可以提高温度采集的精度,该方法既扩大了控温仪的控温范围,又保证了测量精度。
图4为改进后的恒流源电路图。基准采用的是LM285系列1.2V的稳压管,两端接有滤波电容。NPN三极管的型号为9013。热敏电阻是采用Wavelength公司生产的型号是MODEL TCS651的100K(25℃)热敏电阻,性能优良。继电器两端接有续流二极管用来避免电流关断过程中对三极管造成损坏,同时降低了对系统的干扰。IN输入端由单片机的I/O口控制,当IN端为高电平时,三极管导通,电流由100μA切换到10μA。控温模块从OUT端采集热敏电阻两端的电压,其两端接有滤波电容。
编程过程中,我们将0℃~180℃对应的热敏电阻阻值放入数组中。模数转换器AD7705将采集到的电压信号转化为数字变量。单片机可以实现热敏电阻阻值的插值算法。对热敏电阻阻值进行查表计算,从而可以算出当前的实际温度。
4 结束语
将温度控制系统和恒流源与我所自行研制的PID模块相连。上电后系统的升降温运行良好。依据不同晶体的特性要求,采用相应的温度变化速率。保证了晶体工作环境的安全,有效地延长了晶体的寿命。