AT89C51温度传感器设计.docx
- 文档编号:3325219
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:27
- 大小:752.09KB
AT89C51温度传感器设计.docx
《AT89C51温度传感器设计.docx》由会员分享,可在线阅读,更多相关《AT89C51温度传感器设计.docx(27页珍藏版)》请在冰豆网上搜索。
AT89C51温度传感器设计
电子系统综合设计报告
:
学号:
专业:
日期:
2011-4-13
理工大学紫金学院电光系
摘要
本次课程设计目的是设计一个简易温度控制仪,可以在四联数码管上显示测得的温度。
主要分四部份电路:
OP07放大电路,AD转换电路,单片机部分电路,数码管显示电路。
设计文氏电桥电路,得到温度与电压的关系,通过控制电阻值改变温度。
利用单片机将现在温度与预设温度进行比较,将比较结果在LED数码管上显示,同时实现现在温度与预设温度之间的切换。
关键词放大电路转换电路控制电路显示
1引言
电子系统设计要求注重可行性、性能、可靠性、成本、功耗、使用方便和易维护性等。
总体方案的设计与选择:
由技术指标将系统功能分解为:
若干子系统,形成若干单元功能模块。
单元电路的设计与选择:
尽量采用熟悉的电路,注重开发利用新电路、新器件。
要求电路简单,工作可靠,经济实用。
1.1系统设计
1.1.1设计思路
本次实验基于P89L51RD2FN的温控仪设计采用Pt100温度传感器。
1.1.2总体方案设计
热敏电阻测温调理电路
设计要求
1.采用Pt100温度传感器,测温围-20℃--100℃;
2.系统可设定温度值;
3.设定温度值与测量温度值可实时显示;
4.控温精度:
±0.5℃。
2单元模块设计
2.1各单元模块功能介绍及电路设计
2.1.1温度传感器电路的设计
实现温度T和电阻R的对应关系。
电桥中R1=R2=R3=200Ω=R,R4为温度传感器,温度变化,导致电桥的一个桥臂上的电阻也就是R4的阻值变化。
2.1.2信号调理电路的设计
实现将温度T和电阻R的对应关系转化为温度T和电压V的对应关系。
利用电桥的原理,R4的阻值变化使电桥两点的电位差改变,此两点作为运算放大器的两个输入。
2.1.3A/D采集电路的设计
实现启动、等待、采集数据。
信号调理电路的输出接0809的IN0。
0809的ALE的START连接,单片机的P2.7和WR或非后接0809的START,P2.7和RD或非后接0809的OE。
START脉冲来,A/D转换开始,以EOC作为转换完成的标志使用的是等待方式,所以EOC未连接。
2.1.4单片机电路
最小系统。
2.1.5键盘及显示电路的设计
实现键盘数据输入和温度显示。
利用四联数码管显示三位的温度值和一个‘C’代表显示的是温度。
两个键盘按键调整预设温度的高低。
2.1.6输出控制电路的设计
I/O驱动、继电器、指示灯、负载。
测得的温度值高于预设温度,红灯亮,低于则绿灯亮:
接两个发光二极管。
2.2元器件的选择
1.P89L51RD2FN
2.AD0809
3.OP07A
4.MAX232
5.驱动器ULN2003
6.四联数码管MT0546AR
7.继电器HRS2H-S-DC5V-N
8.发光二极管(红、绿色)
9.三极管9012(PNP)、9013(NPN)
11.面包板、连接线、插头座
12.周立功单片机实验箱
13.电阻200Ω×3用于电桥,10kΩ×2,20kΩ×2用于减法器
2.3特殊器件的介绍
2.3.1OP07A
OP07引脚图
OP07A的特点:
超低偏移:
150μV最大。
低输入偏置电流:
1.8nA。
低失调电压漂移:
0.5μV/℃。
超稳定,时间:
2μV/month最大
高电源电压围:
±3V至±22V
2.3.2ADC0809
1.主要特性
1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs。
4)单个+5V电源供。
5)模拟输入电压围0~+5V,不需零点和满刻度校准。
6)工作温度围为-40~+85摄氏度。
7)低功耗,约15mW。
2.部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,部结构如图13.22所示,它由8路模拟
开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近,寄存器、三态输出锁
存器等其它一些电路组成。
因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各
种微处理器相连,也可单独工作。
输入输出与TTL兼容。
IN0~IN7:
8路模拟电压输入端,用与输入被转换的模拟电压。
D0~D7:
A/D转换后的数据输出端,
与单片机的P0口相接。
A、B、C:
模拟通道地址选择端,A为低位,C为高位。
3.A/D转换完成数据的输送
A/D转换后得到的是数字量的模拟量,这些数据应传诵给单片机进行处理。
数据串的关键是如何确定A/D转换完成。
因为只有确定数据转换完成后,才进行传送。
为此可采用以下三种方式:
定时传送方式
对于一种A时子程序。
A/D转换启动后,就调动这个子程序,延迟时间一到,转换肯定已经完成了。
接着,就可以进行数据传送A/D转换来说,转换时间作为一项技术指标是已知的和固定的。
查询方式
A/D转换芯片表明有转换完成的状态信号,例如ADC0809的E端,因此可以通过查询方式用软件测试EOC的状态,即可知道转换是否完成,若完成,则接着进行数据传送。
中断方式
中断方式ADC0809与8031的中断方式接口电路只需将0809的EOC端经过一非门连接到8031的INTl端即可。
采用中断方式可大大节省CPU的时间,当转换结束时,EOC发出一个脉冲向单片机提出中断请求,单片机响应中断请求,由外部中断1的中断服务程序读A/D结果,并启动0809的下一次转换,外部中断1采用边沿触发方式。
2.3.3ULN2003
ULN200A电路具有以下特点:
1电流增益高(大于1000);
2带负载能力强(输出电流大于500mA);
3温度围宽(-40~85℃);
4工作电压高(大于50V)。
2.3.4四联数码管(共阴)
四联数码管引脚图
2.4各单元模块的联接
2.4.1模块连接
共6个模块。
模块1:
信号调理电路:
电桥+减法器
模块2:
A/D转换器ADC0809
模块3:
单片机89C51或P89L51RD2FN
P0:
AD数据采集;
P1:
数码管段选信号(a,b,c,d,e,f,g);
P2.7:
A/D的OE;
P3.4~P3.5:
指示灯1,指示灯2;
P2.0~P2.3:
数码管位选信号(1,2,3,4);
INT0:
键+;
INT1:
键-。
模块4:
键盘输入:
连接单片机的两个外部中断。
模块5:
共阴四联数码管:
位选P2.0~P2.3,段选P1。
模块6:
控制输出:
接两个指示灯。
3软件设计
3.1开发工具及设计平台
3.1.1Proteus特点
1.Proteus软件提供数千种元器件和多达30多个元件库。
2.在Proteus软件中,理论上同一种仪器可以在一个电路中随意的调用。
3.除了现实存在的仪器外,Proteus还可以以图形的方式实时地显示线路上变化的信号。
4.虚拟仪器仪表具有理想的参数指标,可减少仪器对测量结果的影响。
5.Proteus提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
3.1.2Keil特点
1.全功能的源代码编辑器;
2.器件库用来配置开发工具设置;
3.项目管理器用来创建和维护用户的项目;
4.集成的MAKE工具可以汇编、编译和连接用户嵌入式应用;
5.所有开发工具的设置都是对话框形式的;
6.真正的源代码级的对CPU和外围器件的调试器;
7.高级GDI(AGDI)接口用来在目标硬件上进行软件调试以及和Monitor-51进行通信。
3.1.3部分按键
设定温度与实际温度间的切换数据的显示
3.1.4C代码编写
#include
#include"absacc.h"
bitflag;//采样标志
unsignedcharcountor;//定时器定时的循环标志
unsignedcharg,s,b,i;
unsignedcharQ=3,p=0;//设置预设温度
unsignedcharm,n;
sbitP34=P3^4;
sbitP35=P3^5;
sbitP30=P3^0;//为蜂鸣器提供一定频率的方波
voidDisplaySecond(unsignedchars,b);//数码管显示函数的声明
voiddelay(void);//延时函数的声明
floata,result=0,result1=0,T;
/*数码管动态显示*/
unsignedcharTab[]={
0x3F,//"0"
0x06,//"1"
0x5B,//"2"
0x4F,//"3"
0x66,//"4"
0x6D,//"5"
0x7D,//"6"
0x07,//"7"
0x7F,//"8"
0x6F,//"9"
0x39,//"C"
};
/*定时器T0定时*/
voidt0_ser()interrupt1using1
{TL0=0xF0;
TH0=0xD8;
P30=!
P30;//蜂鸣器产生的方波
countor++;
if(countor==10)//循环10次达到定时0.1秒
{countor=0;flag=1;}//定时时间到,置采样标志为1,进行采样
}
/*采样函数*/
voidsamp()
{
unsignedintc;
XBYTE[0x7FF8]=0;//进行一个写操作,启动A/D转换
delay();
a=XBYTE[0x7FF8];//将A/D转换的结果保存为变量a
result=a*5/256;//将A/D转换结果换算成十进制数
if(result>0.524&&result<1.940)
{T=10.3*result+9.35;}
elseif(result>1.940&&result<3.720)
{T=16.99*result-4.68;}
elseif(result>3.720&&result<4.302)
{T=37.60*result-80.86;}//把电压转换为温度
c=T;
g=c/100;//显示温度的百位
s=c/10;//显示温度的十位
b=c%10;//温度的个位
m=Q*10+p;//预设温度
n=s*10+b;//实际温度
if(n>m)
{P35=1;P34=0;}
else{P35=0;P34=1;}//当实际温度大于预设温度时,红灯亮,反之绿灯亮
}
/*外部中断0,预设温度加一*/
voidint0_ser()interrupt0using0
{
delay();
if(INT0==0)
{p++;
if(p==10)
{Q++;p=0;}
}
for(i=0;i<50;i++)
DisplaySecond(Q,p);
}
/*外部中断1,预设温度减一*/
voidint1_ser()interrupt2using2
{
delay();
if(INT1==0)
{p--;
if(p==0)
{Q--;p=9;}
}
for(i=0;i<50;i++)
DisplaySecond(Q,p);
}
voidmain()
{TMOD=0x01;//定时器工作方式
TL0=0xF0;
TH0=0xD8;//定时器初值
ET0=1;//定时器中断开放
EA=1;//总允许
TR0=1;//启动定时器T0
EX1=1;//外部中断1开放
EX0=1;//外部中断0开放
PX0=1;//外部中断0优先级置高
PX1=1;//外部中断1优先级置高
IT0=1;//外部中断0为边沿触发方式
IT1=1;//外部中断1为边沿触发方式
while
(1)
{if(flag)
{flag=0;samp();}//采样标准为1时,调用采样函数进行采样
DisplaySecond(s,b);
}
}
//延时函数
voiddelay(void)
{
unsignedintj;
for(j=0;j<100;j++);
}
//数码管动态显示函数
voidDisplaySecond(unsignedchars,b)
{
P2=0xf1;//数码管1亮
P1=Tab1[g];//显示温度的百位
delay();
P2=0xf0;
P2=0xf2;//数码管2亮
P1=Tab1[s];//显示温度的十位
delay();
P2=0xf0;
P2=0xf4;//数码管3亮
P1=Tab1[b];//显示温度的十位
delay();
P2=0xf0;
P2=0xf8;//数码管4亮
P1=0x39;//显示C
delay();
P2=0xf0;
}
4系统测试
4.1温度与电阻的关系:
4.2温度与电压的关系:
4.3温度分段与电压的拟合曲线:
(11℃到24℃)
4.4温度分段与电压的拟合曲线:
(25℃到35℃)
4.5温度分段与电压的拟合曲线:
(36℃到48℃)
4.6温度分段与电压的拟合曲线:
(49℃到64℃)
4.7温度分段与电压的拟合曲线:
(65℃到80℃)
5小结和体会+
这次的电子系统综合设计在理论上不仅用到了单片机的知识,还用到了模电的知识。
然而理论必须联系实际。
在这次的元器件的选择上不仅考虑了其适用功能,还要考虑元件的适用环境。
就像ULN2003APG是用来驱动四位共连数码管的位选与段选的:
因为单片机出来的电流太小,就算能驱动数码管,但数码管的亮度会比较低。
实践总是能帮助理论知识的学习。
通过这次系统设计,我理解了一些以前在理论课上没有注意到的问题:
1.A/D转换中XBYTE[0x7ff8]=0,这句程序是用来给单片机的WR口提供信号,再通过或非门后将信号传给ADC0809的START端,用来启动A/D转换;
2.在单片机与A/D转换的连接方法上有了更多的了解。
三种连接方式:
中断方式、查询方式、延时等待。
其中,中断方式为EOC接非门;查询方式为EOC接到单片机的任一接口,不断查询if(EOC==1);延时等待为EOC悬空,估计A/D转换的时间。
3.对一些管脚的认识更加深刻:
OE=“1”时,读取信号;在平时OE为低电平;
4.继电器的连接与功能问题;
通过这次系统设计,知道了许多设计系统的方法,熟悉了系统设计的一般步骤。
在搭建电路后的原件选择上考虑的方面更加广了。
设计程序时的思路也比以前更加宽了。
在这次的设计中可以是预置温度的显示更加人性化。
在按键按一次后就显示预置温度,接着再按则开始加减预置温度;在调节预置温度时不要显示当前温度;等调节好后,再显示当前温度。
6参考文献
[1]胡宴如,耿燕.模拟电子技术基础.:
高等教育,2004.213-216.
[2]闫玉德,龙,俞虹.单片机微型计算机原理与设计.中国电力,2010.112-154,197-199,.
[3]朱蕴璞.传感器原理与应用.国防工业.
[4]黄锦安.电路.:
机械工业,2007.
附录:
系统原理图:
软件仿真图:
信号调理电路
控制电路图
AD采集电路与单片机电路
数码管显示图
系统连接图
代码
#include
#include"absacc.h"
bitflag;//采样标志
unsignedcharcountor;//定时器定时的循环标志
unsignedcharg,s,b,i;
unsignedcharQ=3,p=0;//设置预设温度
unsignedcharm,n;
sbitP34=P3^4;
sbitP35=P3^5;
sbitP30=P3^0;//为蜂鸣器提供一定频率的方波
voidDisplaySecond(unsignedchars,b);//数码管显示函数的声明
voiddelay(void);//延时函数的声明
floata,result=0,result1=0,T;
/*数码管动态显示*/
unsignedcharTab1[]={
0x3F,//"0"
0x06,//"1"
0x5B,//"2"
0x4F,//"3"
0x66,//"4"
0x6D,//"5"
0x7D,//"6"
0x07,//"7"
0x7F,//"8"
0x6F,//"9"
0x77,//"A"
0x7C,//"B"
0x39,//"C"
0x5E,//"D"
0x79,//"E"
0x71,//"F"
};
/*定时器T0定时*/
voidt0_ser()interrupt1using1
{TL0=0xF0;
TH0=0xD8;
P30=!
P30;//蜂鸣器产生的方波
countor++;
if(countor==10)//循环10次达到定时0.1秒
{countor=0;flag=1;}//定时时间到,置采样标志为1,进行采样
}
/*采样函数*/
voidsamp()
{
unsignedintc;
XBYTE[0x7FF8]=0;//进行一个写操作,启动A/D转换
delay();
a=XBYTE[0x7FF8];//将A/D转换的结果保存为变量a
result=a*5/256;//将A/D转换结果换算成十进制数
if(result>0.524&&result<1.940)
{T=10.3*result+9.35;}
elseif(result>1.940&&result<3.720)
{T=16.99*result-4.68;}
elseif(result>3.720&&result<4.302)
{T=37.60*result-80.86;}//把电压转换为温度
c=T;
g=c/100;//显示温度的百位
s=c/10;//显示温度的十位
b=c%10;//温度的个位
m=Q*10+p;//预设温度
n=s*10+b;//实际温度
if(n>m)
{P35=1;P34=0;}
else{P35=0;P34=1;}//当实际温度大于预设温度时,红灯亮,反之绿灯亮
}
/*外部中断0,预设温度加一*/
voidint0_ser()interrupt0using0
{
delay();
if(INT0==0)
{p++;
if(p==10)
{Q++;p=0;}
}
for(i=0;i<50;i++)
DisplaySecond(Q,p);
}
/*外部中断1,预设温度减一*/
voidint1_ser()interrupt2using2
{
delay();
if(INT1==0)
{p--;
if(p==0)
{Q--;p=9;}
}
for(i=0;i<50;i++)
DisplaySecond(Q,p);
}
voidmain()
{TMOD=0x01;//定时器工作方式
TL0=0xF0;
TH0=0xD8;//定时器初值
ET0=1;//定时器中断开放
EA=1;//总允许
TR0=1;//启动定时器T0
EX1=1;//外部中断1开放
EX0=1;//外部中断0开放
PX0=1;//外部中断0优先级置高
PX1=1;//外部中断1优先级置高
IT0=1;//外部中断0为边沿触发方式
IT1=1;//外部中断1为边沿触发方式
while
(1)
{if(flag)
{flag=0;samp();}//采样标准为1时,调用采样函数进行采样
DisplaySecond(s,b);
}
}
//延时函数
voiddelay(void)
{
unsignedintj;
for(j=0;j<100;j++);
}
//数码管动态显示函数
voidDisplaySecond(unsignedchars,b)
{
P2=0xf1;//数码管1亮
P1=Tab1[g];//显示温度的百位
delay();
P2=0xf0;
P2=0xf2;//数码管2亮
P1=Tab1[s];//显示温度的十位
delay();
P2=0xf0;
P2=0xf4;//数码管3亮
P1=Tab1[b];//显示温度的十位
delay();
P2=0xf0;
P2=0xf8;//数码管4亮
P1=0x39;//显示C
delay();
P2=0xf0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89C51 温度传感器 设计