温度测量仪课设1.docx
《温度测量仪课设1.docx》由会员分享,可在线阅读,更多相关《温度测量仪课设1.docx(30页珍藏版)》请在冰点文库上搜索。
温度测量仪课设1
《过程控制系统》课程设计
设计题目:
智能化温度测量仪设计
学生:
专业:
测控技术与仪器
班级学号:
50810
指导教师:
宋爱娟
设计时间:
2011.6.28-2011.7.9
东北大学秦皇岛分校自动化工程系
《过程控制系统》课程设计任务书
专业测控技术与仪器班级50810姓名葛旸
设计题目:
智能化温度测量仪设计
一、设计实验条件
过程控制系统实验室实验系统
二、设计任务
1、温度传感器采用AD590,单片机为核心温度控制系统。
系统主要由温度传感器,单片机控制系统、锅炉温度对象、执行器(查找资料自己选择)等组成.
2、写出温度测量过程,绘制温度测量仪组成框图
3、
(1)系统硬件电路设计
单片机采用89S52;共阴极数码管,A/D采用ADL7315。
(2)编制温度测量程序:
软件采用模块化程序结构设计,由温度采集程序、
温度校准程序与测量程序三部分组成。
三、设计说明书的内容
1、设计题目与设计任务(设计任务书)
2、前言(绪论)(设计的目的、意义等)
3、主体设计部分
4、参考文献
5、结束语
四、设计时间与设计时间安排
1、设计时间:
2周
2、设计时间安排:
熟悉实验设备、实验、收集资料:
4天
设计计算、绘制技术图纸:
4天
编写课程设计说明书:
5天
答辩:
1天
目录
前言3
一、总体设计思想4
二、智能化流量测量仪硬件设计4
2.1单片机控制模块5
2.2数据采集模块6
2.3A/D转换模块7
2.4数码管显示模块8
2.5键盘输入模块8
2.6上下限报警及继电器控制模块11
2.7串口通讯模块11
三、智能化温度测量仪软件设计12
四、总结17
五、结束语17
六、参考文献18
七、附图附表19
前言
【摘要】:
本文主要介绍了温度的自动测量和简单控制,包括温度传感器、单片机接口及其应用软件的设计,根据实际使用要求设计了相应的单片机硬件系统,该系统能够实现数据采集、数据处理、温度值实时显示(LED)、实时控制(继电器)、超限报警(声光报警)和与远程计算机通讯,另外还加入了防止系统跑飞的看门狗软件设计。
简略介绍了该仪表的软件部分;对该温度仪表的未来发展进行了展望。
【关键词】:
温度测量智能化单片机
温度测量是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。
因此,能够确保快速、准确地测量温度的技术及其装置普遍受到各国的重视。
近年来,利用智能化数字式温度传感器以实现温度信息的在线检测已成为温度检测技术的一种发展趋势。
智能化温度测量仪是以8051单片机和温度检测元件AD590相结合的温度测量系统。
本系统的数学模型合理,测量方法容易实现。
实际仪器采用抗干扰、低零漂、低温漂的电子元件,性能稳定。
该系统具有性能可靠、测温准确、结构简单、造价低廉等特点,并兼具线路简捷、使用灵活、抗干扰性好、可移植性强等优点。
仪表系统设计实现的目标任务
根据实际测量要求,该温度测量系统应具有的功能:
(1)自动检测温度并用LED显示;
(2)键盘实现测温、设温、控温等功能切换;
(3)A/D转换,温度以℃为单位;
(4)温度测量和控制范围:
0~99℃;
(5)温度控制精度:
±1℃;
(6)要求能够和上位机进行通讯或实现数据存储;
(7)要求仪表工作稳定、可靠、控制实时准确。
一、总体设计思想
将集成温度传感器AD590(0℃时为0.2732mA)因温度变化,导致电流变化(0.001mA/℃),经运放转换为电压变化输入ADC0808,输入电压Vin(0~5V之间)经过A/D转换之后,其值由8052处理,最后将其显示在两个七段数码管上。
加入键盘实现设定温度上下限和控制温度值,以及仪表的功能转换。
该仪表系统主要包括七个模块,分别是:
单片机控制模块、信号采集模块、A/D转换模块、LED显示模块、键盘扫描模块、串口通讯模块、上下限报警和继电器控制模块,如有需要还可以加入数据存储模块。
系统结构框图及工作原理
图1系统结构框图
工作原理:
通过传感器AD590采集现场温度,根据测得温度与设定温度的差值,控制继电器,进而决定加热棒或其他加热装置的通断,实现温度控制。
仪表与计算机之间通过RS232进行通讯。
仪表有两种数据输入方式,一是通过键盘,二是通过计算机通信传输信息。
数码管显示测得温度和设定温度。
二、智能化温度测量仪硬件设计
传感器采用美国ANALOGDEVICES公司的单片集成两端感温电流源,A/D转换器采用ADC0808,单片机采用AT89C52,显示采用共阴极数码管,按键部分采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。
2.1单片机控制模块
因本系统要求实时显示检测值,涉及到一些计算及BCD转化的处理,同时考虑到功耗等问题,综合考虑后选择AT89C52作为本系统的中央控制器。
2.2.1AT89C52的简介
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可
反复擦写的Flash只读程序存储器(FPEROM—FlashProgrammableandErasable
ReadOnlyMemory)和256bytes的随机存取数据存储器(RAM),器件采用
ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,
片内置通用8位中央处理器和Flash存储单元,AT89C52单片机为很多嵌入式控
制系统提供了一种灵活性高且价廉的方案,在电子行业中有着广泛的应用。
2.2.2单片机接线
图2单片机接线图
如图2所示,晶振电路和复位电路。
其中P0口用于数码管的显示。
P1口用于传感器的数据采集。
P2.0、P2.1、P2.2、P2.3用于键盘扫描。
P3.0、P3.1用于串口通讯。
P3.6、P3.7连接数码管显示位选。
P3.2、P3.3、P3.4作为ADC0808的控制端。
2.2传感器检测,数据采集模块
图3转换电路
AD590是美国模拟器件公司生产的单片集成两端感温电流源。
它的主要特性如下:
a、流过器件的电流(mA)等于器件所处环境的热力学温度(开尔文)度数,即:
Ir/T=1mA/K
式中:
Ir—流过器件(AD590)的电流,单位为mA;T—热力学温度,单位为K。
b、AD590的测温范围为-55℃~+150℃。
c、AD590的电源电压范围为4V~30V。
电源电压可在4V~6V范围变化,电流
变化1mA,相当于温度变化1K。
AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。
d、输出电阻为710M。
e、精度高。
AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。
仪表使用测温范围0~99℃,通过三次运放将测温范围内电压输出转化为0~5V,便于检测处理。
【注】由于条件有限,在仿真过程中,用滑动变阻器以及直流电压表仿真模拟量,从而代替温度采集的模拟量。
如下图所示。
而实际的数据采集电路在后面有介绍。
图41~5V电压代替传感器信号
2.3A/D转换模块
采用ADC0808进行A/D转换
图5A/D转换电路
2.4数码管显示模块
图6数码管显示电路
2.5键盘扫描模块
图7键盘扫描电路
温度测量要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
为了进一步节省单片机I/O口资源,我们在设计中使用了MM74C922芯片。
MM74C922是一款4*4键盘扫描IC,它可检测到与之相连的4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。
其引脚图下图所示:
图8MM94C22硬件图
MM74C922引脚说明:
(1)Y1~Y4(脚1~脚4):
44键盘第一列至第四。
(2)X1~X4(脚11、10、8、7):
44键盘第一行至第四行。
(3)DOA~DOD(DataoutA~D,脚14~17):
按键之BCD码输出,其中DOA为LSB,DOD为MSB。
(4)VCC(脚18):
电源脚,+3V~+15V。
ab126计算公式大全
(5)GND(脚9):
接地管脚。
新艺图库
(6)OSC(Oscillator,脚5):
键盘扫描电路之频率所需外加电容的连引脚。
(7)KBM(KeyboardMask,脚6):
内部消除开关弹跳电路所外加电容的引脚。
(8)OE(OutputEnable,脚13):
芯片致能脚,接低电位可使芯片致能。
(9)DA(DataAvailable,脚12):
数据有效输出脚。
任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。
MM74C922对各按键的响应如下表所示:
表1MM74C922对各按键的响应表
如上图7所示,在本设计中,温度测量输入键盘的4条行线、列线分别连接到MM74C922的X1-X4、Y1-Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚经过一个非门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的键的值。
2.6上下限报警和继电器控制模块
图9报警电路和执行器电路
2.7串口通讯模块
图10串口通讯电路
三、智能化温度测量仪软件设计
3.1主要设计思路
现实生活中人们熟知的温度测量仪,其功能主要如下:
1.键盘输入;
2.给定温度测量显示;
3.上下限温度测量报警。
针对上述功能,温度测量仪软件程序要完成以下模块的设计:
1.键盘输入检测模块;
2.LED显示模块;
3.上下限报警及继电器控制模块。
3.2主程序流程图如下所示
图11程序流程图
3.3分块程序设计
3.3.1读键盘状态,读键值程序
//读键盘状态
ucharkbvalue(void)
{uchari;
BAOJING=1;
P2=0x0f;
i=P2&0x0f;
returni;
}
//读键值
uintkbdata(void)
{
uchark;
k=kbvalue();
if(k<10)
returnk;
}
3.3.2键盘扫描模块程序
voidKB(void)
{
uchari,c;
i=kbvalue();
if(i==10)//给定控制温度
{
while
(1)
{
i=kbvalue();
while(i==15)
{i=kbvalue;
}
ge=kbdata();
c=ge;
delayms(5000);
i=kbvalue();
while(i==15)
{i=kbvalue;
}
shi=kbdata();
GEIDING=shi*10+c;
temp1=GEIDING;
xian1();
i=kbvalue();
if(i==11)
break;
}
if(i==11)
{
while
(1)
{
xian1();
i=kbvalue();
if(i!
=11)
break;
}
}
}
if(i==14)//上限温度
{
while
(1)
{
i=kbvalue();
while(i==15)
{i=kbvalue;
}
ge=kbdata();
c=ge;
delayms(5000);
i=kbvalue();
while(i==15)
{i=kbvalue;
}
shi=kbdata();
HIGH=shi*10+c;
temp1=HIGH;
xian1();
i=kbvalue();
if(i==11)
break;
}
if(i==11)
{
while
(1)
{
xian1();
i=kbvalue();
if(i!
=11)
break;
}
}
}
if(i==12)//开始测温
{
while
(1)
{
ad();
xianshi();
i=kbvalue();
if(i==13)
break;
}
if(i==13)//停止测温
{
while
(1)
{
temp0=0;
xianshi();
i=kbvalue();
if(i!
=13)
break;
}
}
}
}
3.3.3AD转换模块程序设计
voidad()
{
START=0;
OE=0;
START=1;
START=0;
if(EOC==0)
{P1=0xff;
OE=1;
delayms(100);
temp0=P1;
OE=0;
}
}
3.3.4显示报警模块程序设计
voidxianshi()
{
P0=0;
temp=temp0*1.00/255*99;
if(temp>GEIDING)
jiare=0;
else
jiare=1;
if(temp>HIGH)
baojing=1;
else
baojing=0;
GE=0;
SHI=1;
P0=table[temp%10];
delayms(10);
GE=1;
SHI=0;
P0=table[temp/10];
}
//显示子程序1
voidxian1()
{
uchara,b;
a=temp1%10;
b=temp1/10;
P0=0;
GE=0;
SHI=1;
P0=table[a];
delayms(10);
GE=1;
SHI=0;
P0=table[b];
}
3.4看门狗的设置
看门狗是恢复系统的正常运行及有效的监视管理器。
硬件看门狗是利用了一个定时器,来监控主程序的运行,常用的WDT芯MAX813,5045,IMP813等。
52系列有专门的看门狗定时器,对系统频率进行分频计数,溢出时,将引起复位。
即软件看门狗。
考虑系统各功能模块及其循环次数,系统设置"看门狗"定时器T0定时30ms(T0的初值为65536-30000=35536)。
主控程序的每次循环都将刷新T0的初值。
如程序进入"死循环"而T0的初值在30ms内未被刷新,这时"看门狗"定时器T0将溢出并申请中断。
T0对应的中断向量地址(000BH)写入"无条件转移"命令,把计算机拖回整个程序的第一行,对单片机复位。
四、总结
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
五、结束语
本设计所研制的多功能智能化温度测量仪是单片机控制的智能化仪表,它的主要特点如下:
1、该仪表适用于0~99℃温度范围的测量可以进行温度的实时显示和控制。
2、该仪表选用了集成温度传感器AD590作为测温元件,该元件体积小,精度高重要的是它的价格低廉。
这样该仪表的成本就低,可以大规模生产。
3、该仪器可以多路测量,还具有报警功能和与上位机通信功能并且使用方便。
4、元器件型号与规格经仔细挑选和计算,抗干扰能力强。
5、可以在原有硬件电路上进行扩展,实现更多的功能,如:
温度值打印,时钟显示,数据存储等。
任何产品都有一个不断改进和完善的过程,只有在调试和使用过程中,才能知道产品实际存在的问题。
六、参考文献
[1]马淑华,王凤文,张美金.单片机原理与接口技术.北京邮电大学出版社.2007
[2]王迎旭.单片机原理与应用[J].北京.机械工业出版社.2004
[3]吴金戌.8051单片机实践与用.清华大学出版社.2001
[4]张义和,陈敌北.例说8051.人民邮电出版社.2010
[5]求是科技.单片机典型模块设计实例导航.人民邮电出版社.2004
[6]谢宜仁.单片机硬件接口电路与工程实践.电子工业出版社.
[7]彭伟.单片机C语言程序设计实训100例--基于8051+Proteus仿真
[8]李萍.51单片机C语言及汇编语言实用程序设计.中国电力出版社
[9]谢亮,谢晖.例说51单片机(C语言版).人民邮电出版社.
[10]刘同法.单片机C语言编程基础与实践.北京航空航天大学出版社.2009
[11]楼然苗,李光飞,胡佳文,李良儿.51系列单片机原理及设计实例.2010
七、附录
附录1
图12系统结构图
附录2
系统源程序:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharshi,ge,j=0,k;
uinttemp0,temp,temp1,GEIDING,HIGH,LOW;
sbitbaojing=P2^4;
sbitjiare=P2^5;
sbitSTART=P3^2;
sbitEOC=P3^3;
sbitOE=P3^4;
sbitGE=P3^7;
sbitSHI=P3^6;
sbitBAOJING=P3^5;
//延时程序
voiddelayms(uintms)//延时毫秒@12M,ms最大值255精确度高
{
while(ms--);
}
//共阴数码管段码表
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//AD转换
voidad()
{
START=0;
OE=0;
START=1;
START=0;
if(EOC==0)
{P1=0xff;
OE=1;
delayms(100);
temp0=P1;
OE=0;
}
}
//显示报警子程序
voidxianshi()
{
P0=0;
temp=temp0*1.00/255*99;
if(temp>GEIDING)
jiare=0;
else
jiare=1;
if(temp>HIGH)
baojing=1;
else
baojing=0;
GE=0;
SHI=1;
P0=table[temp%10];
delayms(10);
GE=1;
SHI=0;
P0=table[temp/10];
}
//显示子程序1
voidxian1()
{
uchara,b;
a=temp1%10;
b=temp1/10;
P0=0;
GE=0;
SHI=1;
P0=table[a];
delayms(10);
GE=1;
SHI=0;
P0=table[b];
}
//读键盘状态
ucharkbvalue(void)
{uchari;
BAOJING=1;
P2=0x0f;
i=P2&0x0f;
returni;
}
//读键值
uintkbdata(void)
{
uchark;
k=kbvalue();
if(k<10)
returnk;
}
//键盘扫描
voidKB(void)
{
uchari,c;
i=kbvalue();
if(i==10)//给定控制温度
{
while
(1)
{
i=kbvalue();
while(i==15)
{i=kbvalue;
}
ge=kbdata();
c=ge;
delayms(5000);
i=kbvalue();
while(i==15)
{i=kbvalue;
}
shi=kbdata();
GEIDING=shi*10+c;
temp1=GEIDING;
xian1();
i=kbvalue();
if(i==11)
break;
}
if(i==11)
{
while
(1)
{
xian1();
i=kbvalue();
if(i!
=11)
break;
}
}
}
if(i==14)//上限温度
{
while
(1)
{
i=kbvalue();
while(i==15)
{i=kbvalue;
}
ge=kbdata();
c=ge;
delayms(5000);
i=kbvalue();
while(i==15)
{i=kbvalue;
}
shi=kbdata();
HIGH=shi*10+c;
temp1=HIGH;
xian1();
i=kbvalue();
if(i==11)
break;
}
if(i==11)
{
while
(1)
{
xian1();
i=kbvalue();
if(i!
=11)
break;
}
}
}
if(i==12)//开始测温
{
while
(1)
{
ad();
xianshi();