基于LM35的温度测量系统.docx
《基于LM35的温度测量系统.docx》由会员分享,可在线阅读,更多相关《基于LM35的温度测量系统.docx(10页珍藏版)》请在冰豆网上搜索。
基于LM35的温度测量系统
温度检测系统
本文介绍了一种温度传感器选用LM35、单片机选用AT89s52的温度测量系统。
该系统的温度测量范围为0~100℃,可以精确到0.1,可适用于工业场合及日常生活中。
关键词:
温度测量;范围1~100;精确0.1;
ThistextintroducesakindoftemperaturewhichconsistsofLM35andAT89s52.Thearrangementofthissystermisabout0~100℃,whichcan0.1.readItissuitabletobeusedinindurstriesandpeople’slife.
一系统设计
1.1设计指标
1.1.1基本部分----------------------------------------------------3
1.1.2发挥部分---------------------------------------------------3
二 单元电路设计
2.1系统结构-------------------------------------------------------------4
2.2温度传感器lm35电路设计------------------------------------4
2.3lm741信号放大电路设计----------------------------------------5
2.4A/D0809电路设计-----------------------------------------------6
2.5单片机系统设计--------------------------------------------------7
三 程序c语言―――――――――――8
四 总结与感想―――――――――13
一系统设计
1.1设计任务
设计一个温度检测装置,系统结构框图如下:
主控器能对温度进行检测和实时显示温度。
具体设计制作任务是:
1设计制作温度检测器
2 设计制作主控器
1.2、设计要求
基本要求
① 检测的温度范围:
0℃~99℃
② 检测分辨率
0.1℃
③ 温度检测元件不能使用专用的具有数字输出的产品(如DS18B20)。
1.3 发挥部分
① 能够设置上下限温度范围和超限报警功能。
② 提高温度检测器的测温范围和检测精度。
③ 语音播报温度。
④ 特色及创新。
二 单元电路设计
2.1系统结构
本测温系统由温度传感器电路、信号放大电路、A/D转换电路、单片机系统、温度显示系统构成。
其基本工作原理:
温度传感器电路将测量到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经放大后输出至A/D转换电路,把电压信号转换成数字量送给单片机系统,单片机系统根据显示需要对数字量进行处理,再送温度显示系统进行显示。
2.2温度传感器电路
温度传感器采用的是LM35,他具有很高的工作精度和较宽的线性工作范围,他的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。
LM35的输出电压与摄氏温度的线形关系可用下面公式表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。
其电源供应模式有单电源与正负双电源两种,其接法如图3与图4所示。
正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。
本系统采用的是单电源模式。
2.3lm741信号放大电路
由于温度传感器LM35输出的电压范围为0~0.99V,虽然该电压范围在A/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行A/D转换则会导致转换成的数字量太小、精度低。
系统中选用通用型放大器lm741对LM35输出的电压信号进行幅度放大,还可对其进行阻抗匹配、波形变换、噪声抑制等处理。
系统采取同相输入,电压放大倍数为5倍,电路图如图5所示。
2.4A/D0809转换电路
A/D转换电路选用8位AD转换器ADC0809。
ADC0809是CMOS单片型逐次逼近式A/D转换器,可处理8路模拟量输入,且有三态输出能力。
图5中运算放大器的输出电压V,送入ADC0809的模拟通道IN0。
单片机AT89C52控制ADC0809的开始转换、延时等待A/D转换结束以及读出转换好的8位数字量至单片机进行处理。
2.5单片机系统
三 程序c语言
3.1系统软件设计以及分析
系统的软件部分用c语言编程,
#include
unsignedcharcodedispbitcode[]={0xFE,0xFD,0xFB,0XF7};
unsignedcharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharled[4];
unsignedchardispcount=0;
unsignedchargetdata;
unsignedinttemp;
unsignedchari;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitclk=P3^3;
voidmain(void)
{
ST=0;//赋初值
OE=0;//赋初值
EA=1;
TMOD=0x12;
TH0=0x216;
TL0=0x216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;//为高低电平给值
TR1=1;
TR0=1;
ET0=1; //启动定时器0
ET1=1;//启动定时器1
ST=1;//与之前的ST=0形成正脉冲,启动数模转换
ST=0;
while
(1)
{
unsignedintj=3000;
while(j--);//延时
if(EOC==1)//转换结束信号输出查询,说明转换结束
{
OE=1;//由低电平变高电平,允许输出数据
getdata=P1;//三态门打开,读出数据
OE=0;//赋初值
temp=getdata*100;
temp=temp/51;//temp*(5/255),恢复原始电压值
temp=temp*10;//本是*1000,但是由于超出了整形变量的值,所以这样处理
//即分两次乘,防止溢出
temp=temp/3;//原先用模拟的办法在外部放大3倍,所以现在除3
if(temp%10==6)//根据我在显示的统计规律,当第4位的变化规律是0、3、6
{temp=1645;//当为0、3时,整数部分显示准确
temp=temp+10;//当为6时,整数部分显示差1,所以我用程序弥补了不足
led[0]=temp/1000;//取千位
led[1]=temp%1000/100;//取百位
led[2]=temp%1000%100/10;//取十位
led[3]=temp%10;//取个位
ST=1;//启动数模转换
ST=0;
for(dispcount=0;dispcount<4;dispcount++)
{
P0=dispcode[led[dispcount]];//他段选赋给P1端口
P2=dispbitcode[dispcount];//赋P2位选
}
}
}
}
}
voidt0(void)interrupt1
{clk=~clk;}
voidt1(void)interrupt3
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P2=P2|0X0F;//消去余晖
if(dispcount==3)
{
P0=~0x39;
}
dispcount++;//数据自加
if(dispcount==4)
{
dispcount=0;//赋初值
}
}
3.2单片机内部数据处理模块
系统通过ADC0809转换的数字量是与实际温度成正比的数字量,但系统最后显示的是实际温度值,因此需要对数据进行处理再通过8255输出到LED显示。
设所测温度值为T,A/D转换后的数字量为X,则有:
VOUT=0.01V/℃×T℃
VOUT为LM35的输出电压,即运放μA741的输入电压,μA741的输出电压用V1表示。
因为μA741的放大倍数为5,则有:
V1=5×VOUT=0.05×T
根据系统设置,温度传感器输出电压0~5V对应于转换后的数字量0~255,则有:
0.05T/5=X/255
可以近似写为:
0.05T/5=X/256
这样除以256可通过把被除数右移8位来实现,编程较简单。
由此可以得出X和T的关系:
T=100×X/256
四 总结与感想
该测温系统经过多次测试,工作稳定可靠,体积小、集成度高、灵敏度高、响应时间短、抗干扰能力强等特点。
此外该系统成本低廉,器件均为常规元件,有很高的工程价值。
如稍加改动,该系统可以很方便地扩展为集温度测量、控制为一体的产品,具有一定工程应用价值。
如对该系统进一步扩展,还可以实现利用USB协议标准与PC机进行数据通信,能够把监测到的温度值保存到PC机中
在这里,我要非常感谢师兄的帮助,因为你们不厌其烦地指导,我学到了很多,更学会了在困难面前不要轻易放弃,虽然这次做得不是很成功,但我已经很努力地去做了,并且坚持到现在,所以即便我被淘汰了,我也没有什么太大的遗憾。
师兄们,谢谢!