自制可调温度控制器

上传人:ji****72 文档编号:39542288 上传时间:2018-05-17 格式:DOC 页数:17 大小:269.50KB
返回 下载 相关 举报
自制可调温度控制器_第1页
第1页 / 共17页
自制可调温度控制器_第2页
第2页 / 共17页
自制可调温度控制器_第3页
第3页 / 共17页
自制可调温度控制器_第4页
第4页 / 共17页
自制可调温度控制器_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《自制可调温度控制器》由会员分享,可在线阅读,更多相关《自制可调温度控制器(17页珍藏版)》请在金锄头文库上搜索。

1、自制可调温度控制器作者:温正伟 原载:无线电杂志近期我发现很多 DIY 或是电子爱好的朋友们比较关注电子温度控制器制作的文章,前 面我也发过一篇 AT89C2051 控制的简单温度计制作的文章,但是由于电路比较简易,而且没 有调温功能.应部分朋友的要求我在此转载一篇温正伟在无线电杂志上发表过的一款可以方 便调节、设定温度的控制器。1 功能介绍功能介绍笔者设计的这一款温度控制器是使用仍是比较常用的 DS18B20 集成温度传感器,还 是用七段数码管做显示,完成温度采集与处理控制的 CPU 仍是 AT89C2051 单片机,但该 电路具有电路简单,制作起来也无需调试,安装好后就可以使用等方便 DI

2、Y 的优点。该电路最大的特点是用可以直观方便的调节所要限定的温度值,温度值是用 3 个 7 段 共阳极数码管显示的,上电后会显示当前的温度值,按设定键时会闪烁显示设定温度值, 这时可以按上/下调节键调整设定温度值,再次按下设定键时返回当前温度显示同时会对设 定温度值进行保存,这个设定值会保存在 DS18B20 中,掉电后也不会丢失,下次上电时, 单片机会自动读入上次的温度设定值。长按设定键为关闭显示和温控,再次按下时功能再 次打开。电路中还设计了一路继电器控制,程序中设定超出设定温度时继电器被驱动吸合。2 元器件背景及选用元器件背景及选用表一是元器件列表。在这个电路中关键的两个元器件分别是单片

3、机 AT89C2051 和温 度传感传感芯片 DS18B20。AT89C2051 具有 2K 的可多次擦写的 FLASH 存储器,有 15 个 I/O 口,用于做一些小型的控制显示和数据采集系统是很好的选择,本制作中 2051 单 片机除要完成数据采集、处理、控制和显示的任务外,还要完按键值的采集、处理。如果 要用常规的数字加模拟电路实现起来就相对困难多了。DS18B20 是 DALLAS 半导体公司 (现属 MAXIM 公司)设计生产的单总线数字温度传感器,单总线也就是说只用一根 I/O 引线完成数据的输入输出功能,所以它的体积很小,而且电压适用范围在 35.5V,封装 形式除有 SO/uS

4、O 的 8PIN 贴片式,还有更方便的三极管形式的 TO92 封装(封装形式 和引脚说明请看图一)。DS18B20 测量温度范围为 -55C+125C,其 A/D 转换的分辩 率可用程序控制分别为 9 位、10 位、11 位和 12 位,最高分别率可以高达 0.0625C,但 在-10+85C 范围内其精度为0.5C,这个精度已可以满足普通型的环境温度控制或测温 类消费电子产品的要求。DS18B20 中有三个 8 位 E2RAM 单元(非易失性可电擦写储存器) ,可以读写上下限警报温度值和一个自定义值,在本制作的中就只使用了上限温度值单元。 每个 DS18B20 出厂时都有一个唯一的序列编号,

5、就是说在同一个单总线系统中可以控制 多个 DS18B20。对 DS18B20 的单总线的操作方法这里因篇幅问题不可能一一说明,有兴 趣的读者可以自己多查看些的 DS18B20 资料。表 1 元件清单元件名数 量说 明AT89C20511AT89C4051 也可DS18B201温度传感器七段数码管3共阳极LM78051稳压三极管小按钮3100uF,10uF 电解电容各 10.1uF 瓷片电容130pF212M 晶振1也可以用 11.0592M90121也可用同类小功率三极管S85503同上8.2K,4.7K 电阻各 1470 欧电阻7可以根据数码管的亮度选用或不用1K 电阻4继电器1驱动电压为

6、5V图 1:温度传感器封装形式及引脚说明3 电路原理电路原理制作中 DS18B20 使用外接电源的供电方式,数据端用 4.7K 电阻上拉,并联接到 2051 的 11 脚上。晶振选用 12M 的,使用简单的上电复位电路。选用共阳极的数码管,用 S8550 作位驱动,段引脚通过 470 欧的电限流电阻接入 2051 的 P1 口上,如选用的数码 管亮度不足可以调小限流电阻值。笔者也使用过共阴极的数码管,在 P1 口用 1K 电阻上拉 提供电流,亮度不高,但可以节省三个位驱动 IO 脚,电路更是简单。电路中有三个按键,分别是显示开关/温度设定,温度上调,温度下调,在电路上电运行时程序初始是处于关闭

7、 状态的,要按一下 S2 电路开始显示和监测,如再按一下 S2 进入温度设定状态,设定值每 秒闪烁一次,这时可以按 S1 或 S3 进行调节,再按下 S2 时退回显示当前温度状态并保存 温度值到 DS18B20。使用 2051 的第 9 脚做控制输出端,低电平有效,笔者用它通过 9012 去驱动一个 5V 的继电器。笔者把这个电路安装到电脑前面板上,继电器触头端接机 箱的散热风扇,设定一个温度值如 28 度,当机箱内的温度超出 28 度时,控制端为低电平, 继电器闭合,风扇启动进行散热。图三就是装在电脑面板上的实物照片。图 2:电原理图 4 软件实现软件实现这个温度控制器制作的最大难点应该算是

8、 2051 程序的编写和调试。因在电路中有 数 字显示,按键设定,数据采集和继电器控制。首先要考虑的是在电路中 3 个数码管的阴极 是接在 P1 上的,也就是说要使用动态显示的编程方法,笔者在程序中使用了一个定时中 断去处理显示,定时器的定时值为 20 毫秒,每间隔 20 毫秒程序但会执行定时中断显示所 要显示的数字,同时在这个定时中断中还会去扫描按键,看是否有键被按下并对其结果进 行处理。在这 20ms 的时间里程序还会完成温度数据的采集和转换和对当前温度和设置温 度的对比等等。在编写采集 DS18B20 数据的函数时运用了 DS18B20 的单总线协议,在 读写 DS18B20 时 IO

9、口的电平时序上应尽可能做到与资料上提供的数据相一致。程序大部 分使用模块化设计,读者朋友修改或使用它的函数编写自己温控程序,程序的最新版本可 以访问笔者的个人网站 http:/。图三 实物图用实验板搭建的实物图源程序如下:/*-温度控制器 V1.51 显示为三个共阳极 LED 温度传感器用单总线 DS18B20 CPU 为 2051,三个按键,分别为 UP,DOWN,SET 温度调节上限为 125 度,下限为-55 度 只能用于单只 18B20本软件仅供学习与参考,引用时请注明版权http:/ -*/#include #include #define Key_UP P3_0 /上调温度 #de

10、fine Key_DOWN P3_1 /下调温度 #define Key_SET P1_7 /设定键(温度设定,长按开电源) #define RelayOutPort P3_5 /继电器输出 #define LEDPort P1 /LED 控制口 #define LEDOneC P3_2 /LED DS1 控制(百位) #define LEDTwoC P3_3 /LED DS2 控制(十位) #define LEDThreeC P3_4 /LED DS3 控制(个位) #define TMPort P3_7 /DS1820 DataPortunsigned char code LEDDis=0

11、xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF; /0-9 的 LED 笔划,0xFF 为空,0xF7 为负号static unsigned char bdata StateREG; /可位寻址的状态寄存器 sbit DS1820ON = StateREG0; /DS1820 是否存在 sbit SetTF = StateREG1; /是否是在温度设置状态 sbit KeySETDown = StateREG2; /是否已按过 SET 键标识 sbit PowTF = StateREG3; /电源电源标识 sbit KeyT

12、F = StateREG4; /键盘是否允许/sbit KeySETDowning = StateREG5; /SET 是否正在按下 static unsigned char bdata TLV _at_ 0x0029; /温度变量高低位 static unsigned char bdata THV _at_ 0x0028; static signed char TMV; /转换后的温度值 static unsigned char KeyV,TempKeyV; /键值 static signed char TMRomV _at_ 0x0027; /高温限制 static signed char

13、 TMSetV _at_ 0x0026; /温度设定值 static unsigned char KSDNum; /SET 键连按时的采集次数 static unsigned char IntNum,IntNum2,IntNum3; /中断发生次数,IntNum 用于 SET 长按 检测,IntNum2 用于设定状态时 LED 闪烁 static signed char LED_One,LED_Two,LED_Three; /LED 的显示位 LED_One 为十位, LED_Two 为个位 static unsigned char Sign; /负号标识void main(void) voi

14、d InitDS1820(void); /定义函数 void ROMDS1820(void); void TMVDS1820(void); void TMRDS1820(void);void TMWDS1820(void); void TMREDS1820(void); void TMERDS1820(void); void ReadDS1820(void); void WriteDS1820(void); void Delay_510(void); void Delay_110(void); void Delay_10ms(void); void Delay_4s(void); void V

15、2ToV(void);StateREG = 0; /初始化变量 SetTF = 1; PowTF = 1; /关电源 THV = 0; TLV = 0; TMV = 0; KeyV = 0; TempKeyV = 0; KSDNum = 0; IntNum = 0; IntNum2 = 0; IntNum3 = 0; LED_One = 0; LED_Two = 0;InitDS1820(); /初始化 ROMDS1820(); /跳过 ROM TMERDS1820(); /E2PRAM 中温度上限值调入 RAM InitDS1820(); /初始化 ROMDS1820(); /跳过 ROM TMRDS1820(); /读出温度指令 ReadDS1820(); /读出温度值和上限值 TMSetV = TMRomV; /拷贝保存在 DS18B20ROM 里的上限值到 TMSetVEA = 1; /允许 CPU 中断 ET0 = 1; /定时器 0 中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号