AD592温度检测设计方案
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、系统性能设计要求
AD592 是ADI 新推出的一种电流输出式模拟集成温度传感器。它被分为三档:AD592A ,AD592B 和AD592C。
1、主要特点如下:
(1) 测温精度高。在单电源供电时, 测量精度最高可达±013℃(典型值)。测量范围- 25~ 105℃。重复性误差和长期稳定性均小于±011℃。
(2) 是两端集成温度传感器, 外围电路简单。在常温测量领域中, 可取代电热调节器、电阻式温度检测器、热电偶和PN 结等传统的温度传感器。电流温度系数仍为1uA/K。
(3) 输出阻抗高, 互换性很强。
(4) 电压范围4~ 30V。即使供电不稳定或者在反向电压高达20V 时, 也不会损坏芯片。
2、技术性能描述
工作电源: +4V-+30V
测温范围: -25℃-+105℃
分辩率: 0.1℃
测量精度: ±0.3-±2.5℃
线性度: 0.15℃ max(0℃-+70℃)
输出接口: 模拟信号,
封装特性: 不锈钢管密封,防水、防腐蚀
二、硬件电路设计
1、电源电路设计 +5V +12V -12V。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图1
2、AD592处理电路
图2
3、单片机主电路
图3
4、数码管显示电路
图4
5、矩阵键盘
图5
6、状态指示灯
图6
三、软件方案(C语言程序)
#include"reg51.h"
sbit CS="P2"^7;
sbit LED1=P3^3;
sbit LED2=P3^4;
sbit LED3=P3^5;
unsigned char t,s,flag,temp;
unsigned char code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
void Init();
void delay_10ms();
void keyscan(void);
void display(void);
void show();
//-----------------------------------------------------------------
void main()
{
Init();
while(1)
{ keyscan();
display();
show();
}
}
//----------------------------------------------------------------
void Init()
{
EA=1;
EX0=1;
IT0=1;
}
//-----------------------------------------------------------------
void INT_0(void) interrupt 0 using 1
{
CS=1;
RD=0;
t=P0;
}
//----------------------------------------------------------------
void delay_10ms()
{
#pragma asm
MOV R4,#20
D1: MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
#pragma endasm
}
//----------------------------------------------------------------
void keyscan(void)
{
P1=0xfe;
if((P1&0xf0)!=0xf0)
{
delay_10ms();
if((P1&0xf0)!=0xf0)
{
flag=1;
P1=0xfe;
switch(P1)
{
case 0xee : temp="0"; break;
case 0xde : temp="1"; break;
case 0xbe : temp="2"; break;
case 0x7e : temp="3"; break;
}
while((P1&0xf0)!=0xf0) ;
}
}
P1=0xfd;
if((P1&0xf0)!=0xf0)
{
delay_10ms();
if((P1&0xf0)!=0xf0)
{
flag=1;
P1=0xfd;
switch(P1)
{
case 0xed : temp="4"; break;
case 0xdd : temp="5"; break;
case 0xbd : temp="6"; break;
case 0x7d : temp="7"; break;
}
while((P1&0xf0)!=0xf0) ;
}
}
P1=0xfb;
if((P1&0xf0)!=0xf0)
{
delay_10ms();
if((P1&0xf0)!=0xf0)
{
flag=1;
P1=0xfb;
switch(P1)
{
case 0xeb : temp="8"; break;
case 0xdb : temp="9"; break;
case 0xbb : temp="10"; break;
case 0x7b : temp="11"; break;
}
while((P1&0xf0)!=0xf0) ;
}
}
P1=0xf7;
if((P1&0xf0)!=0xf0)
{
delay_10ms();
if((P1&0xf0)!=0xf0)
{
flag=1;
P1=0xf7;
switch(P1)
{
case 0xe7 : temp="12"; break;
case 0xd7 : temp="13"; break;
case 0xb7 : temp="14"; break;
case 0x77 : temp="15"; break;
}
while((P1&0xf0)!=0xf0) ;
}
}
}
//----------------------------------------------------------------
void display(void)
{
WR=0;
CS=1; //启动温度转换
P2=0xfe; //显示实测温度值
P0=seg[t%10];
delay_10ms();
delay_10ms();
P2=0xff;
P2=0xfd;
P0=seg[t/10%10];
delay_10ms();
delay_10ms();
P2=0xff;
if(flag==1) //读取键盘设定值
{
s=s*10+temp;
flag=0;
}
P2=0xfb; //显示键盘设定值
P0=seg[s%10];
delay_10ms();
delay_10ms();
P2=0xff;
P2=0xf7;
P0=seg[s/10%10];
delay_10ms();
delay_10ms();
P2=0xff;
}
//---------------------------------------------------------------------
void show()
{
if(s>30)
{ LED1=0; LED2=1; LED3=1; }
else
{
if(s<10)
{ LED1=1; LED2=0; LED3=1; }
else
{ LED3=0; LED2=1; LED3=1; }
}
}
用户1600645 2010-11-3 13:04
用户1596946 2010-3-15 15:55
用户118554 2008-12-29 01:34