基于STC89C51单片机智能测温仪表课程设计.docx
《基于STC89C51单片机智能测温仪表课程设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C51单片机智能测温仪表课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
基于STC89C51单片机智能测温仪表课程设计
太原理工大学
单片机原理及应用
智能测温仪表
学号:
07100537
专业:
自动化
班级:
0702
姓名:
王晓晖
摘要
温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控制参数之一,对温度的测量与控制在现代工业中也是运用的越来越广泛。
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。
它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本课程设计基于CU50传感器和STC89C51单片机的智能测温仪表。
智能测温仪表电路主要由STC89C51单片机、按钮、数码管、LED显示、串行通信接口、电源、ADC、E2PROM等电路组成,其以51单片机为核心控制部件,利用CU50阻值随温度变化的特点,将其和其他三个电阻构成非平衡电桥,因而,温度的变化可转化成电桥输出微弱电压信号的变化,电压信号经集成运放电路放大后送到A/D转换器,将模拟信号变换成数字信号。
单片机根据输入量和设定量进行运算,将结果送到数码管显示,完成对温度的测量。
主要介绍了温度的自动测量,包括温度传感器、单片机接口及其应用软件的设计,大体分为以下几大部分:
介绍了国内外温度检测技术和软件电路和硬件电路的设计,并且分析了温度检测技术的未来发展方向;根据实际使用要求设计了相应的单片机硬件系统,该系统能够实现数据采集、数据处理、温度值的在线显示以及时钟电路的时间显示对该温度仪表的未来发展进行了展望。
关键词:
温度测量多功能智能化单片机
一、国内外温度检测技术的发展动向
随着工业生产效率的不断提高,自动化水平与范围也不断扩大,因而对温度检测技术的要求也愈来愈高,一般可以归纳以下几方面。
(1)扩展检测范围。
现在工业上通用的温度检测范围为一200^30000C,而今后要求能测量超高温与超低温。
尤其是液化气体的极低温度检测更为迫切,如IOK以下的温度检测是当前重点研究课题。
(2)扩大测温对象。
温度检测技术将会由点测温发展到线、面,甚至立体的测量。
应用范围己经从工业领域延伸到环境保护、家用电器、汽车工业及航天工业领域。
(3)发展新型产品。
利用老的检测技术生产出适应于不同场合、不同工况要求的新型产品,以满足于用户需要。
同时利用新的检测技术制造出新的产品。
(4)适应特殊环境的测温。
在许多场合中的温度检测器有特殊要求,例如防爆、防硫、耐磨等性能要求;又如移动物体和高速旋转物体的测温、钢水的连续测温、火焰温度检测等。
(5)显示数字化。
温度仪表向数字化方向发展。
其最大优点是直观、无度数误差、分辨率高、测量误差小,因而有广阔的销售市场。
(6)标定自动化。
应用计算机技术,快速、准确、自动地标定温度检测器。
根据上述要求,国内外温度仪表制造商将向以下几方面发展。
(1)继续生产量大面广的传统温度检测元件,如:
热电偶、热电阻、热敏电阻等。
(2)加强新原理、新材料、新工艺的开发。
如近来己开发的炭化硅薄膜热敏电阻温度检测器,厚膜、薄膜铂电阻温度检测器,硅单晶热敏电阻温度检测器等。
(3)向智能化、集成化、适用化方向发展。
新产品不仅要具有检测功能,又要具有判断和指令等多功能,采用微机向智能化方向发展。
随着国内外工业的日益发展,温度检测技术也有了不断的进步,目前的温度检测使用的温度计种类繁多,应用范围也较广泛,大致包括以下几种方法:
(1)利用物体热胀冷缩原理制成的温度计。
(2)利用热电效应技术制成的温度检测元件。
利用此技术制成的温度检测元件主要是热电偶。
(3)利用热阻效应技术制成的温度计。
用此技术制成的温度计大致可分成以下几种:
电阻测温元件、导体测温元件、陶瓷热敏元件。
二、设计要求
实现8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警,蜂鸣器报警。
适配Cu50热电阻,测温范围为0℃~130℃。
采用比例控制、并用晶闸管脉宽调制驱动1000W电加热器(电源电压为AC220V),还可以输出与温度成正比的4~40mA电流远传到其他仪表。
三、设计原理
根据系统的设计要求,本方案采用单片机系统为核心,采用热电阻CU50作为温度传感器采集温度信号,经信号放大器放大后,送到A/D转换芯片,经单片机检测处理温度信号,通过存储器对温度数据进行存储,并通过8位数码管对温度进行显示,还可以通过功率驱动电路用单片机驱动具有交流220V电压的电阻性负载,如果需要输出与温度成正比的4~40mA电流,则需要D/A转换芯片将单片机处理的数字信号变成模拟信号。
原理设计方框图如下:
原理设计方框图
四、设计内容
主要由硬件电路和软件电路两部分,其中硬件电路由电源电路、主控芯片STC89C51的接口连接、数码LED显示电路、I2C接口存储器和蜂鸣器的电路连接、AD和DA转换电路等等。
软件设计主要包括主程序、报警程序、数据扫描程序和按键处理程序。
4.1硬件电路的设计
由题目的设计要求可知,本设计主要采用STC89C51单片机为主芯片,再加上电源电路、LED显示电路,AD和DA转换、蜂鸣器、4-20mA电流输出电路、功率输出电路、热电阻CU50信号调理电路组成。
4.1.1主控芯片STC89C51的接口连接
单片机采用11.059MHz的时钟,单片机的P0口作为I/O使用时,需要外接上拉电阻,在本系统中,上拉电阻的阻值为1KΩ
4.1.2电源电路
电路电源输入是220VAC输入,输出为为+12V和+5V电压。
4.1.3LED显示电路
为了节省I/O空间,本系统采用两个8D锁存器74HC373分时锁存段码和位码,锁存器74HC373的功能为:
OE是输出使能控制,OE=1时,输出高阻,OE=1时,输出等于锁存器输出;LE为锁存控制端,LE=1时,锁存器输出与输入相同,LE=0时,锁存器锁存输入信号。
两排各4个数码管显示,分别显示测量值与设定值。
数码LED显示电路
4.1.4AD转换器TLC1549的电路连接
在我们所测控的信号中均是连续变化的物理量,通常需要用计算机对这些信号进行处理,则需要将其转换成数字量,A/D转换器就是为了将连续变化的模拟量转换成计算机能接受的数字量。
(1)概述
TLC1549系列是美国德州仪器公司生产的具有串行控制、连续逐次逼近型的模数转换器,TLC1549能以串行方式送给,由于TLC1549采用CMOS工艺,内部具有自动采样保持、可按比例量程校准转换范围、抗噪声干扰功能,它采用两个差分基准电压高阻输入和一个三态输出构成三线接口,其中三态输出分别为片选(CS低电平有效),输入/输出时钟(I/OCLOCK),数据输出(DATAOUT)。
而且开关设计使在满刻度时总误差最大仅为±1LSB(4.8mV),因此可广泛应用于模拟量和数字量的转换电路。
(2)TLC1549的引脚功能及其详细参数
TLC1549在工作温度范围内的极限参数
∙电源电压范围:
-0.5V~6.5V;
∙125℃输入电压范围:
-0.3V~VCC+0.3V;
∙输出电压范围:
-0.3~VCC+0.3V;
∙正基准电压:
VCC+0.1V;
∙负基准电压:
-0.1V;
∙峰值输入电流:
+20mA;
∙峰值总输入电流:
±30mA;
∙工作温度范围:
TLC1549M为-55℃~125℃,TLC1549C为0℃~70℃,TLC1549I为-40℃~85℃。
引脚功能
∙REF+、REF-引脚:
正负参考电压引脚;
∙ANALOGIN:
模拟电压输入端;
∙I/OCLK:
时钟引脚;
∙DOUT:
数据输出引脚;
:
片选信号
(3)主要时序图
根据TLC1549的功能结构和工作时序,其工作过程可分为3个阶段:
模拟量采样、模拟量转换和数字量传输。
详细的时序图如下
由时序图可以知:
最大转换时间
,全部时钟数据
。
(4)TLC1549的接线
由于STC89C51不具有ADC,因此扩展了10位ADC芯片TLC1549,其每个ADC输出数字代表4mV,TLC1549与单片机的P1.0、P1.1、P1.2引脚连接,JADC连接器用于输入模拟信号。
TL431构成TLC1549的参考电压,电位器RPA1可以精确调整TLC1549的正参考电压REF+,参考电压REF+为4.096,负参考电压REF-接地线,模拟电压输入端接热电阻Cu50信号调理电路的输出电压。
如下所示:
4.1.5DA转换器TLC5615的电路连接
TLC5615是一个串行10位DAC芯片,性能比早期电流型输出的DAC要好。
只需要通过3根串行总线就可以完成10位数据的串行输入,易于和工业标准的微处理器或微控制器(单片机/DSP)进行接口,适用于数字失调与增益调整以及工业控制场合。
其内部框图如下:
(1)其主要特点如下:
·单5V电源工作·3线串行接口·高阻抗基准输入端(见上框图)
·DAC输出的最大电压为2倍基准输入电压·上电时内部自动复位
·微功耗,最大功耗为1.75Mw·转换速率快,更新率为1.21MHz
(2)主要引脚功能参数如下:
DIN:
串行数据输入端;DOUT:
用于级联时的串行数据输出端;
SCLK:
串行时钟输入端;AGND:
模拟地;REFIN:
参考电压输入端;
:
芯片选择端,低电平有效;OUT:
DAC模拟电压输出端;VDD:
正电源端。
(3)主要时序图
TLC5615的时序图
(4)STC89C51单片机与TLC5615之间的接线图
TLC5615采用+5V模拟电压作为参考电压,通过电位器RPD1可以精确调整参考电压,单片机的引脚P1.3、P1.4、和P1.5和TLC5615连接,JDAC连接器用于输出模拟信号,DAC输出电压范围可达0.25V~4.75V。
4.1.6I2C接口存储器24C02和蜂鸣器的电路连接
24C02系列E2PROM芯片地址的固定部分为1010,E2、E1、E0引脚接高、低电平后得到确定的3位编码,形成的7位编码即为该器件的地址码,由于这里只寻址1个24C02,三个地址输入脚都接地,所以该芯片的地址为1010000x,x为读写位。
24C02用于保存设定值,其串行数据引脚SDA接单片机的P3.6,时钟引脚SCL接单片机的P3.7。
蜂鸣器用于报警,三极管的基极接单片机的P3.2,高电平有效。
4.1.74-20mA电流输出电路
由于负载电阻与RS5在同一支路,忽略三极管基极产生的电流,则该电路的电路输出范围为0~24mA。
4~20mA电流输出电路
电路接收10位DAC芯片TLC5615输出的模拟信号,信号范围为0~4.6V。
若TLC5615输出电压为4.6V,由于RS2=2.32kΩ,因此流过RS2的电流IRS2=2mA;该电流流过RS3与电位器RPS1的串联电路,产生的压降1.2V,因此流过RS5的电流为
4.1.8功率输出电路
该电路采用光隔离过零型晶闸管驱动电路MOC3063Q驱动双向晶闸管BTA12,在驱动20A触点的接触器驱动2000W点加热器。
单片机输出低电平时,接触点闭合,使加热器接通220V电源,开始加热。
本系统采用单片机过零型晶闸管驱动电路,用单片机驱动具有交流220V电压的电阻性负载,这种情况,相当于单片机控制一个交流功率开关,控制负载得电与失电,特别是开关的接通时间在交流点过零瞬间,因此对电网冲击小,电磁波辐射小
4.1.9热电阻CU50信号调理电路
在本系统里,调理电路采用的是电桥法,调理电路如下图所示。
本电路采用TL431稳压电路向Cu50电桥供电,由于电桥只有连接Cu50电阻的桥臂电阻发生变化(50Ω~77.83Ω),因此属于有原理误差电桥电路。
为了减少Cu50电阻变化引起桥臂电流变化产生的误差,将电桥电阻RT2、RT3的阻值选择3kΩ。
在温度为0℃时,Cu50的阻值为50Ω,电桥通过RPT1调零后,电桥输出电压为0,假若TL431稳压值为2.5V,则流过Cu50的电流为
在温度为130℃时,Cu50阻值为77.83Ω,则Cu50的阻值变化了28.83Ω,假若忽略电阻改变引起的电流变化,则电桥的输出为
该信号采用LM258(UT2A)实现放大,由UT2A组成的差动放大器的放大倍数为18,则UT2A输出电压为
再由UT2AB组成的同向放大器放大8.2倍后,UT2B输出电压为
主要是LM258在5V电源时,最大输出电压为3.6V左右,调节RPT2,可实现满幅值调度。
若ADC采用4.096V电压作为参考电压,则ADC输出的每个数字代表
,对于3.3V的电压输入,ADC输出的数字为
,对于130℃的测温温度,每个ADC数字代表为
℃。
4.2软件电路的设计
进行微机测量控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个测量对象的实际需要设计应用程序。
因此,软件设计在微机测量控制系统设计中占重要地位。
对于本系统,软件设计更为重要。
软件设计主要是对温度进行采集、显示,通过按键操作,进行时间的设置与修改。
因此,软件是单片机运行的程序,程序通过单片机与单片机的引脚指挥各个硬件电路部分,进而控制各种各样的对象,实现对象控制的自动化与智能化。
软件处理的任务主要有AD转换、数据处理、数据显示、键盘输入、保存数据,报警等。
在单片机测量控制系统中,大体上可分为数据处理、过程控制两个基本类型。
数据处理包括:
数据的采集、数字滤波、标度变换、非线性校正、PID等各种控制算法、按键处理、数据扫描等等。
过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便达到测量控制目的。
4.2.1主程序
#defineuintunsignedint//宏定义
#defineucharunsignedchar
sbitAD_CLK=P1^0;//定义ADC的时钟引脚
sbitAD_DOUT=P1^1;//定义ADC的数据引脚
sbitAD_CS=P1^2;//定义ADC的片选引脚
uintreadadc(void)//读取ADC数据的函数
{
uinttemp=0;
uchari;
AD_CS=1;
_nop_();
AD_CS=0;//开始读出10位数据
for(i=0;i<10;i++)
{
AD_CLK=0;
temp=(temp<<1)|AD_DOUT;
AD_CLK=1;
_nop_();//两次转换间隔大于21us
}
AD_CS=1;
return(temp);//返回ADC结果
}
4.2.2读写程序
#defineuintunsignedint
#defineucharunsignedchar
#defineWDA0xa0//定义器件在总线中的地址读写为为0
#defineRDA0xa1//定义器件在总线中的地址读写为为1
sbitSDA=P3^6;//定义24c02的SDA信号
sbitSCL=P3^7;//定义24c02的SCL信号
voidstart()//启用总线,当SCL为高电平时,使SDA产生一个负跳变
{
SCL=0;//SCL为低电平
SDA=0;//SDA为低电平
SCL=1;//SCL为高电平
SDA=1;//SDA上升沿停止总线}
voidstop()//停用总线,当SCL为高电平时,使SDA产生一个正跳变
{
SDA=1;//SDA为高电平
SCL=1;//SCL为高电平
SDA=0;//SDA下降沿启动总线
SCL=0;//SCL返回低电平
}
voidnoack()//无应答信号
{
SDA=1;//SDA为高电平
SCL=1;//SCL为高电平
SCL=0;//在SCL下降沿,SDA=1,表示ack无效
}
bittestack()//检测ack信号
{
bitEB;
SDA=1;//SDA为高电平
SCL=1;//SCL为高电平
EB=SDA;//在SCL下降沿,SDA=0,表示返回ack有效
SCL=0;
return(EB);//返回测试位
}
write8bit(ucharinput)//写8个二进制位到24c02的函数
{
uchartemp1;
for(temp1=8;temp1!
=0;temp1--)//循环8次,写入8位
{
SDA=(bit)(input&0x80);//将输入数据的高位赋于SDA
SCL=1;
SCL=0;//使SCL出现下降沿,表明该位数据写入完毕
input=input<<1;//input数据左移1位,低位向高位移动
}
}
viodwrite24c02(ucharch1,ucharaddress1)//写入一个字节到24c02中字节地址
{
start();
write8bit(WDA);//发送器件的地址
testack();
write8bit(address1);//发送写入字节的地址
testack();
write8bit(ch1);//发送写入的数据
testack();
stop();
delayms(10);//延时10ms
}
ucharread8bit()//从24c02中读出8个数据位的函数
{
uchartemp2,rbyte=0;
for(temp2=8;temp2!
=0;temp2--)//循环8次,读出8位
{
SCL=1;
rbyte=rbyte<<1;//rbyte变量左移
rbyte=rbyte|((uchar)(SDA));
SCL=0;//使SCL出现下降沿,表明该位数据写入完毕
}
return(rbyte);//返回读到8位数据
}
ucharread24c02(ucharch2,ucharaddress2)//从24c02地址中读一个字节的函数
{
start();
write8bit(WDA);//发送器件的地址写
testack();
write8bit(address2);//发送读出字节的地址
testack();
start();//发送器件的地址读
write8bit(RAD);
testack();
ch2=read8bit();//读出8位数据
noack()//无应答信号
stop();
return(ch2);//返回读出的数据
}
4.2.3报警程序
#defineucharunsignedchar//宏定义#defineuintunsignedint//宏定义sbitRS=P1^0;//24c02定义I/O的硬件接口sbitRW=P1^1;//24c02定义I/O的硬件接口sbitE=P1^2;//24c02定义I/O的硬件接口
sbitkey_1=P1^3;//按键1定义I/O的硬件接口////Alarm_Value;//温度报警值+1度sbitkey_2=P1^4;//按键2定义I/O的硬件接口////Alarm_Value;//温度报警值-1度sbitkey_3=P1^5;//按键3定义I/O的硬件接口sbitkey_4=P1^6;//按键4定义I/O的硬件接口sbitAD590_2=P1^7;//A定义I/O的硬件接口,通道选择//C、D接地sbitkey_6=P3^7;//按键6定义I/O的硬件接口//控制温度报警标志位
sbitST=P3^0;//ST和ALE接在一起sbitOE=P3^1;sbitEOC=P3^2;sbitCLK=P3^3;sbitSPK=P3^4;//喇叭,蜂鸣器报警sbitLED1=P3^5;//LED报警sbitLED2=P3^6;
#defineDPDRP2//并行数据输出接口定义#defineDPDR_1P0//并行数据输入接口定义
uchartemp;//最终温度值
unsignedlongtemp2;//平均温度unsignedlongtemp1;//温度1,unsignedlongtemp2;//温度2,,
ucharAlarm_Value;//温度报警值bitAlarm_Value_bit;//温度报警标志位
ucharDispBuf[6];//6字节的显示缓冲区charchar_char_1[]={"Temperature:
"};//定义字符串voiddelay(uintz)//1ms延时{ucharx,x1;for(;z>0;z--){for(x=0;x<114;x++)}}
4.2.4数字滤波
数字滤波具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。
数字滤波在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。
数字滤波有低通、高通、带通、带阻和全通等类型。
它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。
主程序
#defineN//定义采样数
ucharlp()//滤波函数
{
intsum=0;
ucharcount;
for(count=0;count{
sum+=readadc();//获取ADC转换结果,并计算累加和
delay();
}
return(uchar)(sum/N);//求平均值
}
4.2.5标度变换
在智能仪表测量中,需要对外界的各种信号进行测量。
测量时,一般先用传感器吧外界信号转换成电信号,然后用AD转换器把模拟信号变成微处理器能接受的数字信号,往往要转换成人们所熟悉的工程值才有它的意义。
这是因为被测对象的各种数据的量纲与AD转换器的输入值是不一样的,故必须把它转换成带有量纲的数值后才能运算和显示这种变换便是标度变换。
本系统采用线性标度变换,数字量对应的工程量的线性标度变换公式为:
式中,Ax为实际测量值;
Ao为测量范围最小值;
Am为测量范围最大值;
Nx为实际测量所对应的数字量;
No为测量范围最小值所对应的数字量;
Nm为测量范围最大值所对应的数字量。
在本系统中,温度为0℃~130℃的热电阻对应的电阻值为50.00Ω~77.83Ω,经过放大电路输出点电压范围为0V~3.3V,而采用的ADC为10位的TLC1549,若用4.096V电压作为参考电压,则ADC输出的每个数字代表
对于3.3V的电压输入,ADC输出的数字为
对于热电阻的温度为130℃,其对应的电阻值为77.83Ω,每个ADC数字代表的电阻值为:
假设在某一时刻单片机系统10为ADC采样并经数字滤波后的数值量为
,则
,
,