资源描述
温度控制系统,简介:,本设计是采用AD590温度传感器进行温度采集,测试温度范围位0100摄氏度,经ADC0804由模拟信号转为数字信号,经单片机对温度进行处理,并采用了四位数码管进行带两位小数点的显示。该设计包括恒流补偿电路,ADC0804模数转化、单片机及显示模块组成。 设计框图如下:,恒流补偿 电 路,AD590基本知识,恒流补偿电路是由AD590及运算放大器组成的电流转换为电压的电路。,AD590的主要特性如下:流过器件的电流(mA)等于器件所处环境的热力学温度,AD590的测温范围为-55到+150。AD590的电源电压范围为4V-30V。电源电压可在4V-6V范围变化,电流变化1mA,相当于温度变化1K。AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。输出电阻为710MW。,AD590温度与电流的关系如右表所示,可知AD590的输出电流I=(273+T)A(T为摄氏温度),因为测量电压较方便所以这里应把电流转化为电压再经AD转换。所以需一电流转化为电压的恒流补偿电路。,为了使温度与电压的关系成过原点的线性关系,变换电路采用了恒流补偿电路恒流由稳压管组成电流为273uA从而实现电压平移。最终输出电压U0= 50(i- 273)/1000,或uo=T/20。那么AD转换输出的数字量就和摄氏温度成线形比例关系。,模数转换电路,电路采用的是AD0804进行AD转换。ADC0804 为 8 位模/数转换电路,分辨率为1/28,其转换结果与模拟输入电压的关系写为 。(Vref=5V) (1)、复位中断触发信号 一般情况下,启动A/D转换前应该复位这个信号,等待新转换后的数据再由ADC0804输出数据,这样才可以读到新的转换结果,时序图如图A所示。 (2)、启动ADC0804的A/D转换 ADC0804在片选信号为低电平时启动A/D转换,时序图如图B所示 。,原理分析,(3)读取转换结果,在A/D转换结束以后,ADC0804的 引脚将给出一个低脉冲,如果把这个引脚直接连接到单片机的外部中断引脚P3.2或P3.3,这个低脉冲将引起单片机中断,单片机可以在中断处理程序中读取ADC0804的转换结果。,ADC0804与单片机接口设计电路,单片机处理及显示,此模块是对模数转换输出的数字信号进行处理,转换为温度,用四位共阴数码管带两位小数点显示。模块由STC单片机,74HC573锁存器及四位数码管组成。,概述,单片机及显示电路如图所示,图中P1口作为数码管的段码控制。P2口低四位作为数码显示的位选信号P2-0控制最低位,P2_1控制小数点后一位,P2_2控制各位,P23控制最高位十位。P0口是接收AD转换输出的数据。74hc573作为锁存输出。,分析,总结,通过这次的小制作,我发现在现实设计中还需要注意很多的细节,包括程序设计和硬件设计都要我们小心仔细,一个地方出错就可能会整个系统失效。在硬件设计时,由于电路的虚焊和漏焊,在调试过程中引来很大的麻烦.在调试程序时,我发现数码管不显示,原因是写错了一条指令while(int0=1)写成了while(int0=1),所以程序陷入了死循环不执行显示程序。还有在写显示程序由于显示的时间短,AD不断转换导致显示不稳定。于是在写驱动数码管的程序加了个For循环控制显示时间,这样就是AD隔一段时间再采集温度,显示稳定。经过几天的努力之后终于把电路调试成功,在个人动手能力和程序调试方面都有了一定的提高,程序代码,#include #include #include #include #define TIMER 0X10 sbit CS=P33; unsigned char table=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /led字模 void delay(void); void main (void) unsigned char x,y1=0,y2=0,y3=0,y4=0,t; unsigned int i,W; while(1)/AD转换 P0=0 xff;P3=0 xff; W=0 x01; CS=0;WR=0;_nop_;WR=1;/启动AD转换 while(INT0=1); / 等待转换完毕 CS=1;/停止AD转换 _nop_; CS=0;RD=0;/开始读转换的数据,_nop_; _nop_; /等待读完 x=P0; /读的数赋给x RD=1;CS=1;/ 读完毕 t=x*100/255;/温度 for(i=0;i300;i+) /数显 控制下次AD转换的时间 y1=t*100%10; P2=W;P1=tabley1; /小数点后两位 delay(); y2=t*10%10;W=1;P2=W;P1=tabley2; /小数点一位 delay(); y3=t%10; W=1;P2=W;P1=tabley3|0 x80; /个位 delay(); y4=t/10;W=1;P2=W;P1=tabley4; /十位 delay(); W=0X01; void delay() /延迟 unsigned int i; for(i=0;i TIMER;i+); ,
展开阅读全文