温度传感器设计方案
温度传感器的设计方案
一、设计思路:
(1)信号源——温度传感器(接触式的和非接触式)
(2)显示器件——LED(用模拟电路)和LCD(用单片机)
(3)放大电路——三极管放大(但有非线性失真,元件相对比较独立,
属于电流放大,有CC、CE、CB三种类型,其中CC适合前后级的匹配电路,CE适合中级电路,CB适合电压特殊情况放大。);场效应管(属于电压型放大器件,有结型、耗尽型、增强型,一般匹配信号源内阻比较大的。);集成运算放大器(反相比例放大和同相比例放大,应用于信号源内阻比较大的。);功率放大器(适合于功率消耗比较大的,有甲类、乙类、甲乙类、丙类、OTL、OCL、BTL等)。
(4)电源电路——并联型电源供电(用一个稳压二极管,适合于要求
比较低的场合,元件比较小少,功耗低。);串联型电源供电(由一个三极管当做调整管,用来调整输出电压,功耗比较高,用的元件比较多。);开关管电源供电;(使三极管工作在开关的状态,功耗较低)。
(5)接口电路——A/D或D/A转换。
二、设计方案:从具体的一些情况考虑得设计出两个方案:
方案一: (1)用LCD显示器。
(2)用DS18B20温度传感器。
(3)硬件设备用51或52类型的单片机。 (4)软件用C语言编程。
(5)从实际的考虑用集成稳压的5V电源供电。
方案二:(1)用LED显示器。
(2)温度传感器LM35
(3)从整体考虑,会用集成运放。
(4)会用12V的三端集成稳压电源供电。
(5)A/D接口电路(会用到ICL7107 A\D转换器)。
方案一: 温度传感器设计的具体方案
1 设计目的
1.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 2.通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术。 3.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 4.通过电路设计和程序开发的过程,使学生了解开发单片机应用系统的全过程。
5.掌握单片机系统设计的总体思路和方法,熟悉温度传感器的工作原理。
2 设计任务与要求
(1)采用采用AT89S52单片机和DS18B20温度传感器通信,控制温度的采集过程和进行数据通信;
(2)提供DS18B20的使用外围电路、温度显示LCD电路以及DS18B20和单片机的通信接口电路;
(3)利用LCD液晶显示器显示工作状态,DS18B20温度传感器内置温度上下限; (4)编写C52程序,完成单片机对温度数据的采集过程以及与DS18B20数据传输过程的控制。
(5)用USB接口完成程序的烧录。
3 课题验收标准
1)按照设计要求,画出系统硬件电路原理图。 2)此项要求从下任选其一:
① 完成硬件电路的电路板设计、器件采购、焊接和调试工作。 ② 在现有的单片机实验系统上完成硬件电路接线。
3) 完成该课题的程序设计,提交程序设计框图及程序清单。 4) 完成硬件与软件综合调试,实现预定功能。 5) 通过验收,提交课程设计报告。
4 程序流程图
5 设计程序 c程序如下: #include
#define uchar unsigned char #define uint unsigned int
sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2;
unsigned char code str1[]={"temperature: "}; unsigned char code str2[]={" "};
uchar data disdata[5]; uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的) {unsigned int i,j; for(i=0;i
void wr_com(unsigned char com)//写指令// { delay1ms(1); RS=0; RW=0; EN=0; P2=com;
delay1ms(1); EN=1;
delay1ms(1); EN=0; }
void wr_dat(unsigned char dat)//写数据// { delay1ms(1);; RS=1; RW=0; EN=0; P2=dat;
delay1ms(1); EN=1;
delay1ms(1); EN=0; }
void lcd_init()//初始化设置// {delay1ms(15);
wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); }
void display(unsigned char *p)//显示// {
while(*p!='\0') {
wr_dat(*p); p++;
delay1ms(1); } }
init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); }
/******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒 {
while(i--); }
void ds1820rst()/*ds1820复位*/ { unsigned char x=0;
DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); }
uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--)
{ DQ = 0; //给脉冲信号 dat>>=1;
DQ = 1; //给脉冲信号 if(DQ)
dat|=0x80;
delay_18B20(10); }
return(dat); }
void ds1820wr(uchar wdata)/*写数据*/ {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0;
DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }
read_temp()/*读取温度值并转换*/ {uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue
tvalue=tvalue|a;
if(tvalue
{tvalue=~tvalue+1; tflag=1; }
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); }
/*******************************************************************/ void ds1820disp()//温度值显示 { uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号 else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30)
{disdata[1]=0x20;//如果百位为0,十位为0也不显示 } }
wr_com(0xc0);
wr_dat(flagdat);//显示符号位 wr_com(0xc1);
wr_dat(disdata[0]);//显示百位 wr_com(0xc2);
wr_dat(disdata[1]);//显示十位 wr_com(0xc3);
wr_dat(disdata[2]);//显示个位 wr_com(0xc4);
wr_dat(0x2e);//显示小数点 wr_com(0xc5);
wr_dat(disdata[3]);//显示小数位 }
/********************主程序***********************************/ void main()
{ init_play();//初始化显示 while(1)
{read_temp();//读取温度 ds1820disp();//显示 } }
6 仿真电路图
7 所需的元器件
AT89C52(一个微机)实物图和引脚图
DS18B20(一个温度传感器)集成引脚图、三脚图 和封装形式
LCD1602(一片液晶显示器)
因为需要的电容容量比较小,所以用两个22pF的瓷片电容,一个12M的石英晶振,一个10K的十脚排阻。
8接线说明
独特的单总线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C
9、程序的烧录
将我们的C 程序生成hex文件,再用USB接口或ISP进行数据传送,再进行烧录。
10、电源部分
如图所示:用三端集成稳压7805构成。
元件清单
方案二:
1电路的设计
数字温度计电路原理系统方框图,如图2.1.
图2.1 电路原理方框图
通过温度传感器LM35采集到温度信号,经过整形电路送到A/D转换器,然后通过译码器驱动数码管显示温度。ICL7107集A/D转换和译码器于一体,可
以直接驱动数码管,省去了译码器的接线,使电路精简了不少,而且成本也不是很高。ICL7107只需要很少的外部元件就可以精确测量0到200mv电压,LM35本身就可以将温度线性转换成电压输出。综上所述,采用LM35采集信号,用ICL7107驱动数码管实现信号的显示。
(1)感温器件
它通过LM35对温度进行采集,通过温度与电压近乎线性关系,以此来确定输出电压和相应的电流,不同的温度对应不同的电压值,故我们可以通过电压电流值经过放大进入到A/D转换器和译码器,再由数码管表示出来。
图2.1传感器电路原理图
(2)集成运算放大电路
(3)部分A/D转换
ICL7107是高性能、低功耗的三位半A\D转换器,同时包含有七段译码器、显示驱动器、参考源和时钟系统。ICL7107可直接驱动共阳极LED数码管。ICL7107将高精度、通用性和真正的低成本很好的结合在一起,它有低于10uV的自动校零功能,零漂小于1uV/℃,低于10pA的输入电流,极性转换误差小于一个字。真正的差动输入和差动参考源在各种系统中都很有用。在用于测量负载
单元、压力规管和其它桥式传感器时会有更突出的特点。
ICL7107转化器原理图如图2.4所示。其中计数器对反向积分过程的时钟脉冲进行计数。控制逻辑包括分频器、译码器、相位驱动器、控制器和锁存器。
驱动器是将译码器输出对应于共阳极数码管七段笔画的逻辑电平变成驱动相应笔画的方波。
图2.4 ICL7107转化器原理图
图2.6 ICL7107管脚排列
ICL7107是集A/D转换和译码器为一体的芯片,而且这芯片能够驱动三个数
码管工作而不需要更多的译码器,这给我们连接电路或者分析电路提供了一定的方便。ICL7107芯片的管脚比较多,每一个管脚所代表的功能也各不相同,能够组成各种电路,比如说有积分电路。这要求我们在接电路时要小心,不能出现错误。
(4)共阳极数码管
(5) 数码管显示
数码管可以分为共阳极与共阴极两种,共阴极是把所有LED的阳极连接到共同接点com,而每一LED的阴极分别为a,b,c,d,e,f,g及sp(小数点),它的内部结构图如图2.7所示。
图2.7 共阳极数码管内部结构
在本次设计当中,由于ICL7107的特点,它只能驱动共阳极数码管,故我们要选用共阳极七段数码管。在连接数码管时,我们要注意数码管各个管脚所对应的字母,不能接错或接漏,而且在管脚之前要接上电阻,以免烧坏芯片和数码管。
2 调试与总结
我们要通过调试电路来发现设计电路的相关内容。
(1)按照电路图对相关元件进行连接,其中注意芯片各管脚的作用以及该如何进行接线。
(2)当上步骤完成后,接通电源,观察LED和LCD是否亮,若不亮时,
要对电路电源进行检测,看是否线路接触不良或者电路短路。
(3)完成之后,观察数码管是否显示数值,然后改变温度传感器的温度值,观察显示器是否随着温度变化而变化。
(4)若数码管数值与温度值相差太大,则要检查信号采集电路中各元件值是否对
设计电路总图
元件清单
2.2 设计总结
本项目,设计出两个方案,分别采用DS18B20、LM35两种传感器、A/D转换器、译码器和数码管。通过温度传感器LM35采集到温度信号,经过整形电路送到A/D转换器,然后通过译码器驱动数码管显示温度。在这次设计当中,初步了解了AD转换器的工作原理以及数码管的连接方法。
在这个设计中,信号采集电路比较重要,要对电路中各个元件数值进行精确的计算,防止电路输出变化太大,对测量不利。