历史上的今天
今天是:2025年01月24日(星期五)
2018年01月24日 | 基于AT89C51控制ICL7135的0.01℃数显温度计
2018-01-24 来源:eefocus
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学实验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计。这些温度计的刻度间隔通常都很密,不容易准确分辨,读数因难,而且它们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。而利用晶体三极管3DG6C的基极与集电极之间正向电压降Ubc随温度T呈线性变化的关系作为温度传感器,以OP07构成放大器,以
位A/D转换器ICL7135作A/D转换器设计的数显温度计可以解决这些问题[1]。笔者根据实际使用的需要,设计了以AT89C51为控制核心,具有测量间隔可设定、测量结果可自动记录、可查询,并经简单扩展就具有报警能力和同PC机进行数据交换的0.01℃数显温度计,并用于热学实验取得成功。
1 硬件电路和工作原理
1.1 电路框图
整机电路由温度信号采集放大电路、A/D转换电路、CPU控制与显示电路三部分组成,其框图如图1所示。温度信号由数据采集电路中的温度传感器转换为电信号,经放大电路后,送入A/D转换器,转换后,以BCD码形式送入CPU,再由程序控制其输出显示,键盘完成各项设置。

1.2 数据采集、放大电路
如图2所示,晶体三极管Q1(3DG6C)的BE极相连,利用基极与集电极之间正向电压降Ubc随温度呈线性变化的关系作为温度传感器[1]。MC1403(IC1)的输出(2.5V)作为供电电源,以满足电压稳定性及测量精度较高的要求。由具有低失调、低噪声、低漂移的高精度集成运算放大器OP07 (IC2) [2]及R2、R3组成差动放大器,将温度传感器检测到的与温度有关的电信号进行适当放大后再输出到由R6送入IC5(ICL7315)的10脚,以进行A/D转换。
运算放大器OP07反相输入端接入的信号是随温度变化的PN结压降U1,同相输入端加一固定不变的电压U2。U2表示0℃时PN结上的压降,它可以通过精密可调电阻RP2进行调节。在该放大器中,取R2=R4和R3=R5,则输出电压Uo表示为:
Uo = (R3/R2)*(U2 – U1)
放大器的放大倍数设计成5倍,将Q1的BE极之间电压变化2mv/℃放大到10mv/℃。MC1403同时为ICL7135提供基准电压源。
图2 数据采集、放大电路

图3 A/D转换电路
1.3 A/D转换电路
A/D转换电路的核心是ICL7135(IC4)。ICL7135是具有高准确度、通用型的CMOS单片 位双积分式A/D转换器,量程为2.0000V,BCD码输出,输出信号与TTL电平兼容。其工作的基准电压为1V,由MC1403经过分压后提供。如图3所示,C2是自调零电容,C4基准电容,R9和C3是自积分输入电阻和电容。ICL7135工作的时钟频率是125KHz,由74HC00(IC2)构成的多谐振荡器提供。10脚输入进来的是OP07的输出信号,其电压大小表示了温度的大小,经A/D转换后输出BCD码,接入AT89C51。D1~D5是LED的位选信号,不直接接LED,而是同AT89C51相接,统一由AT89C51提供LED的位选信号。
1.4 CPU控制与显示电路
如图4所示,CPU控制与显示电路核心是AT89C51(IC5)。为保证其可靠复位,采用MAX814 (IC6)硬件复位。P0.0~P0.3接从ICL7135送来的BCD码,P0.4~P0.7和P3.4接ICL7135的D1~D5。P1口接LED显示码位,提供相应的显示信息。LED的位选信号

图4 CPU控制与显示电路
由P3.5~P3.7经74H138(IC7)译码后提供。显示温度时,只需5位,但考虑到某些情况下可能要显示其它信息(如时钟),LED采用6位。P2口接16个按键,以完成对此温度计的设置和控制功能。当显示所测试的温度时,整个系统为量程为2V的直流电压表,将温度传感器检测到的温度信号变为相应的电压信号,放大后,输入到此电压表,即可由电压大小表示出温度的大小,因为电压表的最小读数是0.1mV,所以,用电压表示温度时可以读出的最小温度是0.01℃。
2 软件设计[3]
软件设计是本设计的关键之一。和直接利用ICL7315来制作的温度计相比,正是由于AT89C51可灵活编程实现各种控制功能,可满足不同的实际需要。本设计编写的程序可实现具有测量间隔可设定、测量结果可自动记录、可查询的功能。
程序主要由五大部分组成:主函数、定时器中断函数(调度器内核)部分、扫描键盘与处理键盘函数、显示刷新函数、从ICL7135读取数据函数、时间刷新函数。主函数初始化系统,然后添加四个任务:扫描与处理键盘、刷新显示、读取数据、刷新时间;最后把控制权交给调度器内核,在不需要运行任务的时候,微控器进入休眠模式以降低功耗,如图5所示。
因为温度计对精度要求高,对速度要求低,故用定时器中断来作调度器内核,主要任务是计算什么时刻要运行什么任务,然后调用相应的任务函数,如图6所示。
扫描键盘函数在调度器的调度下每20ms执行一次,利用此20ms的时间间隔正好用延时消除抖动来消除键盘抖动。键盘设计成行列矩阵式,功能有:设定时间、设定测量时间间隔、切换时钟状态和温度计状态、开始和结束温度测量、查询以前测量的温度数据。其流程如图7所示。显示刷新函数在调度器的调度下每4ms执行一次,显示刷新函数用于动态显示七段LED显示管。读取数据函数在调度器的调度下每1S执行一次,运行此函数时, 单片机 从ICL7135中读取一次数据。程序流程如图8所示。


时间刷新函数在调度器的调度下每1s执行一次,进行计时。

3 温度计定标与数据测试
温度计定标时用数字电压表测量ICL7135第2、3两脚之间的电压值(基准电压),调节R5,使其在2V左右;将传感器Q1放入冰水混合物中,经过充分搅拌达到热平衡后调节R6,使显示读数为0.00(标定0℃);利用气压计读出当时当地的大气压强,并根据大气压强,当地重力加速度计算出当时的实际压强;根据沸点与压强的关系查出沸点温度.把传感器放入沸水中,待显示读数稳定后仔细调节R5,使显示器显示读数等于当地当时的沸点温度后定标工作结束[1]。本温度计的量程为-50~150℃,读数精度为0.01℃,考虑到实际使用一般在0℃~100℃。我们用0℃~50℃和50℃~100℃的精密水银温度计作捡验标准,测量结果见表1。其中T水银为水银温度计的测量值,最后一位是估计值,T数字为数字温度计测量值,最后一位是显示值。由测试结果可知,所设计的温度计能达到要求
4 结束语
本数显温度计具有读数方便,精度高的特点。引入 单片机 AT89C51控制后,可以通过不同的软件设计以完成不同的使用要求。系统设计时保留引脚P3.2,如在该引脚外接一扬声器,可通过软件编程实现温度超限报警,作为温度报警器用。通过保留的串口,可以实现与PC机的通讯,增加串口通讯程序模块就可用作多点温度检测系统的下位机。
参 考 文 献
[1] 潘学军.0.01℃的数显温度计[J].物理实验.2003(5):22~25
[2] 谈文心,钱聪,宋云购.模拟集成电路原理及应用[M].西安:西安交通大学出版社,1995.16~39.
[3] 何立民. MCS-51 单片机 应用系统设计[M]. 北京:北京航空航天大学出版社 1995.9
史海拾趣
|
我用EVC创建的工程,编译成X86(evc自带的SDK和WINCE5 SDK都试过) Realse 可执行文件放到 装有 wince5系统的开发板上运行,提示不是有效的WINCE程序~这是为什么呢?… 查看全部问答> |
|
请问目前大家的平台上,Linux从启动到运行自己的图形程序,需要大概多少秒?我们要想优化一个系统的启动时间,首先我们需要知道这个系统都把启动时间花在哪里了!其次就是你的目标,是让系统在多少秒之内完成启动?那要如何才能知道,系统在启动过 ...… 查看全部问答> |
|
中断问题,执行NVIC_Init(&NVIC_InitStructure)使执行不下去 程序如下:void NVIC_Configuration(void){#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_ ...… 查看全部问答> |
|
初始化因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。组织关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始 ...… 查看全部问答> |
|
电脑上走任哲的程序,报错 call to function \'PC_VectSet\' with no prototype 查出是没有pc.c,网上下载了2个PC.c 但是都不对(一个是QEMU仿真的) 这东西为什么这么难找到啊?… 查看全部问答> |
|
我用的是CCS6,按照自己的使用习惯设置了代码和注释等的字体和颜色。 但是碰到过CCS莫名就恢复成了默认的设置项,搞得我又得全部重新设置一遍。 想问下,CCS有没有保存当前设置项,然后直接导入的功能 ...… 查看全部问答> |
|
本帖最后由 damiaa 于 2017-3-23 15:36 编辑 Zephyr(LINUX下安装篇) A,先是准备虚拟机virtualBox(这里不细说了)。 B ...… 查看全部问答> |




