简易测温计.docx
- 文档编号:25925338
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:23
- 大小:486.09KB
简易测温计.docx
《简易测温计.docx》由会员分享,可在线阅读,更多相关《简易测温计.docx(23页珍藏版)》请在冰豆网上搜索。
简易测温计
信息与电气工程学院
课程设计说明书
(2010/2011学年第二学期)
课程名称:
单片机课程设计
题目:
简易数字温度计
专业班级:
自动化0802
学生姓名:
舒敏
学号:
080410201
设计周数:
2周
设计成绩:
2011年06月18日
目录
一.课设目的...........................................................................................2
二.技术要求...........................................................................................2
2.1..................................................................................................3
2.2..................................................................................................4
2.3..................................................................................................5
三.总图设计方案...................................................................................6
3.1热敏电阻.................................................................................6
3.2数据通信技术.........................................................................6
四.系统各部分电路的选择和设计....................................................7
4.1系统工作原理.........................................................................7
4.2STC90C52AD单片机简介....................................................8
4.3STC90C52AD单片机引脚功能以及最小控制系统............9
4.4NTC非平衡桥和分压法数据采集系统...............................12
4.4.1分压法...........................................................................12
4.4.2非平衡电桥法...............................................................13
4.5七段数码管显示系统............................................................14
4.6PCB电路板...........................................................................15
五,系统软件设计...............................................................................15
5.1编程语言的选择...................................................................15
5.2主程序的设计.......................................................................16
5.3系统的测量温度主程序.......................................................17
5.4对于运用NTC做测温度系统的心得.................................20
六,课程设计总结...............................................................................20
七.参考资料以及元件清单...............................................................21
八.附件...............................................................................................22
一:
课设目的
用STC90C52AD单片机作为核心控制器,用NTC负温度系数热敏电阻设计一个简易的数字温度计,测量结果用三位数码管进行显示,结果精确到小数点后一位。
我们这里设计的简易数字温度计是一种很简单的温度测量装置,没有使用特别多的、复杂的元器件,只是一个单片机控制系统和NTC元件,它的特点是电路简单、制作方便、操作简单、性能可靠。
二:
技术要求
基于STC90C52AD单片机的最小系统设计,单电源5V供电,用单片机里自带的AD功能测出电压,通过进一步的数学运算算出测试环境的温度。
测量范围—50~100摄氏度内的温度,结果用LED数码管示。
<一>:
开发软件KeilC51uVision3简介
KeiluVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
KeilC51集成开发环境主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。
工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。
建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。
调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。
在工具栏下面,默认有三个窗口。
左边的工程窗口包含一个工程的目标(target)、组(group)和项目文件。
右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可在这里对源文件进行编辑、修改、粘贴等。
下边的为输出窗口,源文件编译之后的结果显示在输出窗口中,会出现通过或错误(包括错误类型及行号)的提示。
如果通过则会生成“HEX”格式的目标文件,用于仿真或烧录芯片。
基本环境如图2-1所示:
MCS-51单片机软件KeilC51开发过程为:
①建立一个工程项目,选择芯片,确定选项。
②建立汇编源文件或C源文件。
③用项目管理器生成各种应用文件。
④检查并修改源文件中的错误。
⑤编译连接通过后进行软件模拟仿真或硬件在线仿真。
<二>单片机程序烧写软件
图2-1KeilC51软件的运行界面
STC90C52AD系列单片机大部分具有在系统可编程特性,单片机在用户系统上即可现在烧录用户程序,而无需将单片机从已经生产好的产品上拆下,在用通用编程器进行烧写程序。
大部分STC90C50AD系列单片机在销售给用户之前已经在单片机系统内部固化啦ISP系统引导程序配合PC端得控制程序即可将用户的程序代码下载进单片机内部,故无需编程器烧写程序。
三:
总体设计方案
3.1热敏电阻
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
热敏电阻的外观如图3-1所示。
本系统用的是MF52系列NTC负温度系数热敏电阻。
3.2数据通信技术
目前,常用的微机和外设之间数据传输的串行总线有I2C总线、SPI总线等,其中,I2C总线采用同步串行双线(一根时钟线,一根数据线)方式,而SPI总线采用同步串行三线(时钟线,输入线,数据输入线)方式。
这两种总线需要至少两根或两根以上的信号线。
I2C是PHILIPS公司推出的一种串行总线。
它是目前使用较广泛的芯片间的串行扩展总线。
该总线用两条连线实现全双工同步数据传送。
它可以使具有I2C总线的单片机直接与具有I2C总线接口的各种扩展器件连接。
本次课程设计就采用这种通信方式。
美国达拉斯半导体公司推出了一项特有的单线技术。
该技术于上述总线不同,它采用单根信号线,即可传输时钟,又能传输数据,而且数据传输时是双向的,因而这种单线技术具有线路简单,硬件开销少,成本低廉,便于扩展的优点。
四:
系统各部分电路的选择和设计
<一>;系统的工作原理
本简易温度计系统的主要功能是测量温度,并显示温度测量结果,并附带了单片机和PC机之间通讯接口(烧写程序用的串口,与PC机实现通信实际也是经过串口来进行数据的通信)。
系统结构包括单片机最小控制系统部分、温度传感器(NTC热敏电阻非平衡桥电路或者分压电路的数据采集系统)、数码管显示电路、图4-1为系统的总体结构框图。
<二>:
STC90C52AD单片机简介
对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。
所以,我们选用51系列单片机STC90C52AD。
STC90C52AD是中国宏晶公司生产的低功耗,高性能8位单片机,片内含8KB的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了Flash程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位STC90C52AD单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。
该单片机还内部带有8路10位的AD模数转换电路,省去本系统运用AD采集数据二需要外接专门的AD转换芯片的麻烦,是得系统设计更为简单。
单片机STC90C52AD具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
STC90C52AD的主要特性如下:
①与MCS-51兼容;
②8K字节可编程闪烁存储器;
③三级程序存储器锁定;
④128×8位内部RAM;
⑤32根可编程I/O线;
⑥两个16位定时器/计数器;
⑦5个中断源;
⑧可编程串行通道;
⑨片内振荡器和时钟电路。
⑩8路10位的AD告诉转换
系统工作原理是:
电路在上电后,NTC的非平衡桥或者电阻分压电路采集信号(这个电压信号是和NTC的电阻息息相关的,二NTC的电阻又是温度的函数,故而电压值也是温度的函数),单片机在用AD采集得电压信号后,经过一系列的数学函数运算,即可将温度计算出来,从而把温度数据送到LED上显示。
完成整个简易温度计的设计。
<三>:
STC90C52AD单片机的引脚功能以及最小控制系统
图4.2单片机控制系统
单片机芯片STC90C52AD为40引脚双列直插式封装。
其各个引脚功能介绍如下,芯片STC90C52AD的引脚排列和逻辑符号如图4-2所示。
各引脚分别为:
①VCC:
供电电压
②GND:
接地
③P0口
P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。
当P1口的管脚写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
要是P0口输出高电平,必须外接上拉电阻。
④P1口
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P1口管脚写入”1”后,电位被内部上拉为高可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
另外P1口作为AD的模拟信号输入口,次功能需通过设置单片机的特殊功能寄存器来选择,如下所示四个寄存器:
sfrP1_ADC_EN=0X97;
sfrADC_CONTR=0XC5;
sfrADC_DATA=0XC6;
sfrADC_LOW2=0XC7;
⑤P2口
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流
当P2口被写”1”时,其管脚电位被内部上拉电阻拉高,且作为输入。
作为输入时P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址”1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
⑥P3口
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入”1”后,它们被内部上拉为高电平,并用作输入。
作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。
⑦RST:
复位输入端。
当振荡器复位时,要保持RST两个机器周期的高电平时间。
⑧PSEN
外部程序存储器的选通信号。
在由外部程序存储器取址期间,每个机器周期PSEN两次有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
⑨EA/VPP
当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)
⑩复位电路已经外部振荡电路的设计
单片机的复位电路如上图所示。
该复位电路采用手动复位与上电复位相结合的方式。
当按下按键S1时,VCC通过R8电阻给复位输入端口一个高电平,实现复位功能,即手动复位。
上电复位就是VCC通过电阻R2和电容C2构成回路,该回路是一个对电容C1充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。
外部晶振电路为单片机系统提供时钟。
<四>:
NTC热敏电阻的非平衡桥和分压数据采集电路
A:
分压法
如上图所示即为NTC的分压法,由于NTC的电阻值随着温度变化,将会是得NTC上的电压与温度成函数的关系,通过AD采集这个电压,即可通过数学运算侧得当时环境下的温度!
B:
非平衡电桥法
非平衡电桥的工作原理为:
上下桥壁对应电阻相等时,桥两端输出电压为零,当其中一个电阻换为NTC时,由于电阻不平衡导致有电压的输出,这个电压为差分电压,因为单片机的AD能采集到的电压信号为对地的电压信号,为了能使系统采集到电压,需先将这个差分电压信号经过一个不放大信号的减法电路,如上图所示,其输出电压即为对地电压,此电压就能被采集,之后就可经过一系列的数学运算算的环境的温度。
单电源运放LM358用作减法电路的运放!
!
<五>:
七段LED数码显示电路
显示电路中单片机STC90C52AD的P2口,通过总线驱动74LS245直接驱动8段数码管,完成字形码的输出(字形选择)。
而P0.5-P0.6(P0口要输出高电平必须外接上拉电阻)控制3位数码管的位选信号,这样在任一时刻,只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是我们常说的动态扫描电路。
<六>:
PCB电路板
上图为NTC信号采集电路和数码管的显示电路电路板
五:
系统软件设计
5.1编程语言选择
51的编程语言常用的有两种,一种是汇编语言,一种是C语言。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,C语言很好的结构性和模块化更容易阅读和维护,用C编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题这样就减少了开发和调试的时间,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。
5.2主程序的设计
5.3主要程序
#include
#include
#include
#defineuintunsignedint//宏定义
#defineucharunsignedchar
#defineulongunsignedlong
doubleZ1,Z2,Z3,X,result,voltage,resistance,temperature;
ulongi;
uintm;
sbitLED=P3^7;
sbitKey=P3^6;
doublecount_resistance();//子函数的声明
doublecount_voltage();
doublecount_temperature();
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=15;x>0;x--)
for(y=z;y>0;y--);
}
voiddisplay(ulongi)//数码管显示函数
{
uinta=0,b=0;
uchartable0[10]={0X3F,0X06,0X5B,0X4F,0X66,
0X6D,0X7D,0X07,0X7F,0X6F};//0~9段码
uchartable1[3]={0X01,0X02,0X04};//三个数码管的位码
uchartable2[3]={0,0,0};
table2[0]=i/100;
table2[1]=i%100/10;
table2[2]=i%10;
for(b=0;b<50;b++)
{
for(a=0;a<3;a++)
{
//P2=0x00;
P0=table1[a];
P2=table0[table2[a]];
if(m==1&&a==1)
P2=table0[table2[a]]+0X80;//是第二个数后面显示小数点
delay
(1);
if(m==2&&a==0)
P2=table0[table2[a]]+0X80;//是第一个数后面显示小数点
delay
(1);
if(m==3&&a==0)
P2=table0[table2[a]]+0X80;//是第一个数后面显示小数点
delay
(1);
}
}
LED=~LED;//灯闪烁,用来指示一直进来了显示函数,从而指示一直在测,在更新温度值
}
//ADC转换函数
doubleADC_transform()
{
uintAD_finished=0;//转换结束标志
doubleDATA=0;
P1=0X01;//P1.0口为AD转换用,先设置为1
P1_ADC_EN=0x01;//P1.0口作为AD使用,自动断开内部上拉
ADC_CONTR=0X02;//1次AD转换需要178个时钟,P1.0口作为AD的输入口
//清零转换结束标志位
ADC_DATA=0;//清零数据寄存器
delay
(1);//使输入电压达到稳定
ADC_CONTR=0X28;//开始转换
AD_finished=0;
while(AD_finished==0)
{
AD_finished=(ADC_CONTR&0X10);
}
ADC_CONTR&=0XF7;//令ADC_START=0,关闭AD
DATA=ADC_DATA*4+ADC_LOW2;
return(DATA);
}
//计算NTC分得的电压函数
doublecount_voltage()
{
result=ADC_transform();
voltage=result*5/1024;
Z1=voltage*100;
return(Z1);
}
//计算NTC电阻值函数
doublecount_resistance()
{
resistance=count_voltage()/10/(5-voltage);//用测的得电压求得要测温度
//下NTC热敏电阻的电阻值
Z2=resistance*100;//测试电阻值是不是正确
return(Z2);
}
//计算环境温度的函数
doublecount_temperature()
{
X=count_resistance()/0.047;
temperature=1/(log(X)/3950+1/25.0);
Z3=temperature*10;
//RT=RN*expB(1/T-1/Tn)NTC热敏电阻温度与电阻关系的经验公式
return(Z3);
}
//主函数
voidmain()
{
while
(1)
{
if(Key==0)
{
delay
(1);
while(Key);
m++;
}
if(m==0||m==4)//最开始上电后什么都不显示
P2=0X00;
if(m==1)//按一下按键后,显示温度值
display(count_temperature());
if(m==2)//按而下按键后,显示电压值
display(count_voltage());
if(m==3)//按三下按键后,显示电阻值
display(count_resistance());
if(m==4)//按四下按键,m值重新从0开始计数
m=0;
}
}
}
5.4对于用NTC测温度的心得
通过这个课程设计,学会了用单片机和NTC做数字温度计。
通过设计程序,运行测试后发现了NTC测量温度有一个巨大的弊端:
NTC热敏电阻温度与电阻关系
RT=RN*expB(1/T-1/Tn)
只是一个经验公式,测试后发现,NTC的电阻在不同温度下,其电阻值变化是很大的,AD采集到的电压也是变化很大的(通过单片机的采集,我调试的时候将电压值和NTC的电阻值我用数码管显示出来啦),说明NTC还是很敏感的,但是经过上面的那个公式进行计算环境温度值得时候发现,就算电阻值变化再大,得到的温度值都没有变化,开始以为是我软件写的不精确,经过一段时间的调试,以及运用计算器计算对结果进行比较,发现是那个经验公式在作怪,除非使用非常精确的算法,运用更精确的NTC电阻值与温度的函数关系,才能算出比较准确的温度值。
故而我得出结论,要想测出很准确的环境温度值,不能选用这个方法!
现在用的最多的是高精度数字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 测温