本文相关资料和程序下载: 18B20资料(PDF) 随文发表的源码:随文源码   源码文件说明 TCMain.c C源码文件 TC.Uv2 keil7.09(或以上版本)项目文件 TC.hex 编译好的单片机HEX文件,可以直接烧入单片机中
后来改进过的1.51版本的源码:1.51版源码  
 |
实验板 |
近期在各种电子技术杂志上看到不少介绍电子温度控制器的制作文章,文章中介绍的电路类型繁多,有用模拟器件的,有用单片机的;温度传感器的使用也各不相同,有用热敏电阻的,也有使用集成式的温度传感器。这些电路大都有数显温度的功能,测量的精度也不尽相同,但笔者发现这些制作的温度设定操作使用不太方便,笔者根据自己的需要设计制作了一款可以方便调节、设定的温度控制器。
1. 功能介绍 笔者设计的这一款温度控制器是使用DS18B20集成温度传感器,七段数码管做显示,AT89C2051单片机做处理控制,电路简单,制作起来也无需调试,安装好后就可以使用了。该电路最大的特点是用可以直观方便的调节所要限定的温度值,温度值是用3个7段共阳极数码管显示的,上电后会显示当前的温度值,按设定键时会闪烁显示设定温度值,这时可以按上/下调节键调整设定温度值,再次按下设定键时返回当前温度显示同时会对设定温度值进行保存,这个设定值会保存在DS18B20中,掉电后也不会丢失,下次上电时,单片机会自动读入上次的温度设定值。长按设定键为关闭显示和温控,再次按下时功能再次打开。电路中还设计了一路继电器控制,程序中设定超出设定温度时继电器被驱动吸合。
2. 元器件背景及选用 表一是元器件列表。在这个电路中关键的两个元器件分别是单片机AT89C2051和温度传感传感芯片DS18B20。AT89C2051具有2K的可多次擦写的FLASH存储器,有15个I/O口,用于做一些小型的控制显示和数据采据系统是很好的选择,本制作中2051单片机除要完成数据采集、处理、控制和显示的任务外,还要完按键值的采集、处理。如果要用常规的数字加模拟电路实现起来就相对困难多了。DS18B20是DALLAS半导体公司(现属MAXIM公司)设计生产的单总线数字温度传感器,单总线也就是说只用一根I/O引线完成数据的输入输出功能,所以它的体积很小,而且电压适用范围在3-5.5V,封装形式除有SO/uSO的8PIN贴片式,还有更方便的三极管形式的TO-92封装(封装形式和引脚说明请看图一)。DS18B20测量温度范围为 -55°C~+125°C,其A/D转换的分辩率可用程序控制分别为9位、10位、11位和12位,最高分别率可以高达0.0625°C,但在-10~+85°C范围内其精度为±0.5°C,这个精度已可以满足普通型的环境温度控制或测温类消费电子产品的要求。DS18B20中有三个8位E2RAM单元(非易失性可电擦写储存器),可以读写上下限警报温度值和一个自定义值,在本制作的中就只使用了上限温度值单元。每个DS18B20出厂时都有一个唯一的序列编号,就是说在同一个单总线系统中可以控制多个DS18B20。对DS18B20的单总线的操作方法这里因篇幅问题不可能一一说明,有兴趣的读者可以参看附属光盘上的DS18B20资料。
元件名
|
数 量
|
说 明
|
AT89C2051 |
1
|
AT89C4051也可 |
DS18B20 |
1
|
温度传感器 |
七段数码管 |
3
|
共阳极 |
LM7805 |
1
|
稳压三极管 |
小按钮 |
3
|
|
100uF,10uF电解电容 |
各1
|
|
0.1uF瓷片电容 |
1
|
|
30pF |
2
|
|
12M晶振 |
1
|
也可以用11.0592M |
9012 |
1
|
也可用同类小功率三极管 |
S8550 |
3
|
同上 |
8.2K,4.7K电阻 |
各1
|
|
470欧电阻 |
7
|
可以根据数码管的亮度选用或不用 |
1K电阻 |
4
|
|
继电器 |
1
|
驱动电压为5V |
 |
图1:图封装形式及引脚说明 |
3. 电路原理 制作中DS18B20使用外接电源的供电方式,数据端用4.7K电阻上拉,并联接到2051的11脚上。晶振选用12M的,使用简单的上电复位电路。选用共阳极的数码管,用S8550作位驱动,段引脚通过470欧的电限流电阻接入2051的P1口上,如选用的数码管亮度不足可以调小限流电阻值。笔者也使用过共阴极的数码管,在P1口用1K电阻上拉提供电流,亮度不高,但可以节省三个位驱动IO脚,电路更是简单。电路中有三个按键,分别是显示开关/温度设定,温度上调,温度下调,在电路上电运行时程序初始是处于关闭状态的,要按一下S2电路开始显示和监测,如再按一下S2进入温度设定状态,设定值每秒闪烁一次,这时可以按S1或S3进行调节,再按下S2时退回显示当前温度状态并保存温度值到DS18B20。使用2051的第9脚做控制输出端,低电平有效,笔者用它通过9012去驱动一个5V的继电器。笔者把这个电路安装到电脑前面板上,继电器触头端接机箱的散热风扇,设定一个温度值如28度,当机箱内的温度超出28度时,控制端为低电平,继电器闭合,风扇启动进行散热。图三就是装在电脑面板上的实物照片。
 |
图2:电原理图(点击看大图) |
4. 软件实现 这个温度控制器制作的最大难点应该算是2051程序的编写和调试。因在电路中有 数字显示,按键设定,数据采集和继电器控制。首先要考虑的是在电路中3个数码管的阴极是接在P1上的,也就是说要使用动态显示的编程方法,笔者在程序中使用了一个定时中断去处理显示,定时器的定时值为20毫秒,每间隔20毫秒程序但会执行定时中断显示所要显示的数字,同时在这个定时中断中还会去扫描按键,看是否有键被按下并对其结果进行处理。在这20ms的时间里程序还会完成温度数据的采集和转换和对当前温度和设置温度的对比等等。在编写采集DS18B20数据的函数时运用了DS18B20的单总线协议,在读写DS18B20时IO口的电平时序上应尽可能做到与资料上提供的数据相一致。源程序可见配刊光盘的"本期程序"文件夹,程序大部分使用模块化设计,读者朋友修改或使用它的函数编写自己温控程序,程序的最新版本可以访问笔者的个人网站http://www.。
 |
图3:实物图 |
|