2022年温度控制系统设计 3.pdf
一、设计任务和指标要求题目:水温监测及控制电路任务:设计并制作一个温度监测及控制电路,控制对象为 1 升净水,容器为陶瓷器皿。水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变。1、基本要求:(1) 温度设定范围为2040C,最小区分度为 1C (2) 环境温度降低时,温度控制的静态误差1C 2、发挥部分:(1) 实时显示水的实际温度(2) 显示当前控制状态(3) 恒温控制 30C ,温度波动 0.2 C。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 二、设计框图及整机概述1. 原理框图2设计思想通过温度传感器 (DS18B20),对被控对象进行温度与数字转换,由温度传感器输出的温度信号经过IO 口,由单片机读出数值,并显示在数码管上,按键可以提高或者降低所需的温度, 实际温度再经过与目标温度的比较,若所测温度大于基准温度,则输出低的门限电压,即:D1 灯不亮,不执行加热环节。反之,若所测电压小于基准电压。则输出高的门限电压,即D1灯亮,执行加热环节。数字温度传感器51 单片机集成运放三极管放大继电器电热丝按键操作数码管显示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 反之,则执行冷却环节,这样就可以把温度控制在一定的范围内。三、各单元电路的设计方案及原理说明1单片机 I/O 口分配在本次设计中,我们选择STC89C51 单片机作为主控制器。其中单片机P0口作为实际水温的段选端。 P2口作为目标水温的段选端。 P1作为位选端,其中 P1.0P1.3 作为实际水温位选, P1.4P1.7 作为目标水温位选。 P3口主要作为信号指示以及读取温度传感器的温度数据。1晶振及复位电路晶振选为 11.0592MHZ ,通过两个电容与 XTAL1和 XTAL2构成单片机的外部时钟电路。复位操作由上电自动复位和按键手动复位两种方式。复位电路由 RC微分电路产生的脉冲来实现, 电路如下图所示, 按下开关即可产生复位信号,通过导线引入单片机 RST引脚即可发生复位。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 2三极管位选驱动电路由于我们选择四位一体的共阳极数码管作为温度显示原件。通过测试,我们发现单片机上电后输出电压不能达到要求。数码管显示非常暗, 因此我们对位选端加了三极管驱动电路,电路图如下:3温度显示模块由 P0 控制实际水温的段选, P2控制目标水温的段选。 P1作为位选端,其中P1.0P1.3 作为实际水温位选, P1.4P1.7 作为目标水温位选。3温度传感器模块我们使用 DS18B20作为温度传感器1、DS18B20 的主要特性1.1 、适应电压范围更宽,电压范围: 3.0 5.5V,在寄生电源方式下可由数据线供电1.2 、独特的单线接口方式, DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯1.3 、 DS18B20支持多点组网功能, 多个 DS18B20 可以并联在唯一的三线上,实现组网多点测温1.4 、DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - 1.5 、温范围 55 125,在 -10+85时精度为 0.51.6 、 可编程 的分辨率为 912位, 对应的可分辨温度分别为0.5 、 0.25 、0.125 和 0.0625,可实现高精度测温1.7 、在 9 位分辨率时最多在 93.75ms 内把温度转换为数字, 12 位分辨率时最多在 750ms内把温度值转换为数字,速度更快1.8 、测量结果直接输出数字温度信号,以 一 线总线 串行传送给 CPU ,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力DS18B20 有六条控制命令2. 指 令 约定代码操 作 说 明温度转换 44H 启动 DS18B20 进行温度转换读暂存器 BEH 读暂存器 9 个字节内容写暂存器 4EH 将数据写入暂存器的TH 、TL 字节复制暂存器 48H 把暂存器的 TH 、TL 字节写到 E2RAM 中重新调 E2RAM B8H 把 E2RAM 中的 TH 、TL字节写到暂存器TH 、TL字节读电源供电方式 B4H 启动 DS18B20 发送电源供电方式的信号给主CPU DS18B20的初始化(1) 先将数据线置高电平“ 1”。(2) 延时(该时间要求的不是很严格,但是尽可能的短一点)(3) 数据线拉到低电平“ 0”。(4) 延时 750 微秒(该时间的时间范围可以从480 到 960 微秒)。(5) 数据线拉到高电平“ 1”。(6) 延时等待(如果初始化成功则在15 到 60 毫秒时间之内产生一个由 DS18B20所返回的低电平“ 0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。(7) 若 CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480 微秒。(8) 将数据线再次拉高到高电平“1”后结束。/* *DS18B20初始化 * */ Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位delay(8); /稍做延时DQ = 0; /单片机将DQ拉低delay(80); /精确延时大于 480us DQ = 1; /拉高总线delay(14); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - x=DQ; /稍做延时后如果 x=0 则初始化成功 x=1 则初始化失败delay(20); DS18B20的写操作(1) 数据线先置低电平“ 0”。(2) 延时确定的时间为15 微秒。(3) 按从低位到高位的顺序发送字节(一次只发送一位)。(4) 延时时间为45 微秒。(5) 将数据线拉到高电平。(6) 重复上( 1)到( 6)的操作直到所有的字节全部发送完为止。(7) 最后将数据线拉高。/* * 向DS18B20写命令* */ WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay(5); DQ = 1; dat=1; /delay(4); DS18B20的读操作(1)将数据线拉高“ 1”。(2)延时 2 微秒。(3)将数据线拉低“ 0”。(4)延时 15 微秒。(5)将数据线拉高“ 1”。(6)延时 15 微秒。(7)读数据线的状态得到1 个状态位,并进行数据处理。(8)延时 30 微秒。DS18B20 温度值格式表这是 12 位转化后得到的 12 位数据,存储在 18B20的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位, 如果测得的温度大于0, 这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度; 如果温度小于 0,这 5 位为 1,测到的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 数值需要取反加1 再乘于 0.0625 即可得到实际温度。 例如+125的数字输出为 07D0H ,+25.0625的数字输出为0191H ,-25.0625 的数字输出为FE6FH ,-55的数字输出为 FC90H 。/*/ /DS18B20 程序读取温度ReadTemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOneChar(0 x44); / 启动温度转换Init_DS18B20(); WriteOneChar(0 xCC); /跳过读序号列号的操作WriteOneChar(0 xBE); /读取温度寄存器等(共可读9 个寄存器)前两个就是温度a=ReadOneChar();/低八位b=ReadOneChar();/高八位t=b; t=8; t=t|a;/合并高八位和低八位return(t); 此函数得到的值为温度值,最小分度为0.0625 ,其中低四位为小数部分, (即:把一度分为16 等分)。中间七位为其整数部分,高五位为符号位,若高五位为0,则说明得到的温度为正数。若高五位为1,则说明得到的温度为负数。四、仿真调试过程及结果分析名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 1仿真调试过程在原理图设计完后,利用protues 软件绘制了原理图。在原理图绘制完后,即进行了仿真调试。2结果分析能够从温度传感器中获得温度数据,并且能通过按键纠正目标温度,程序能正常执行, 电阻丝也能按目标温度的高低调整自身的工作状态。效果还行, 不过其一精度不高,只能到一度,其二程序执行得慢,不过由于时间太仓促,这些问题可以解决。五设计、安装及调试中的体会此次电子设计考查了我们的设计电路的能力和动手能力,从中我学到了很多东西。设计上的电路在实际中运用可能不是像仿真那样理想,由于购买元件的误差及元件的大小在实际中比没有很好的匹配,所以按照设计的电路焊出来的实物在调试过程中遇到了一些问题,但我都一步一步地解决了。最重要的是通过这次电子设计我深深体会到能把所学的知识运用到实践中才是真正掌握。 特别是在电路调试成功的那一刻,出现了我所预料的现象, 着实让我高兴了一番, 自己所设计的东西没有白费, 并且从中获得了知识, 是一件很开心的事。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 名称标号/ 型号大小 / 数量电容C1 20P/1 个电容C2 20p/1 个电容C3 22u/1 个电容C4 0.1u/1个Led-red D1 2 个Led-green D2 2 个电阻R1 210(4 个) 电阻R2 320/1 个电阻R3 1k/1 个电阻R4 4.7k/1个电阻R5 51k/1 个晶振X1 12M/1 个51 单片机STC89C51 /1 个温度传感器(ds18b20)DS18B20 /1 个按键Button 4 个数码管 ( 共阳极 ) 7SEG-MPx4-CA 2 个电热器1 个集成运算放大器2 个继电器G6B-1114P-US-5V1 个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - 导线若干源程序:#include sbit P10=P10; sbit P11=P11; sbit P12=P12; sbit P13=P13;/数码管 1断码控制sbit P14=P14; sbit P15=P15; sbit P16=P16; sbit P17=P17;/数码管 2 段码控制sbit P32=P32;/电源指示灯sbit P34=P34; sbit P30=P30;/蜂鸣器sbit P31=P31;/继电器控制位sbit up=P37; sbit down=P36; / 按键操作端口sbit P35=P35; / 加热指示灯端口sbit DQ =P33; /温度传感器端口#define uint unsigned int 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - #define uchar unsigned char /*温度小数部分表 */ uchar code ditab16= 0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04,0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09; /* * 共阳极数码管显示表* */ unsigned char code duan1= 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0XD8,0 x80,0 x90,0 x88,; /* * 共阳极数码管 (带小数点 )显示表 * */ unsigned char code duan2= 0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10,; / void delay_1(uint z); int b=0; char pwm=0; int k; unsigned int t=0; char r=0,q=0; int wendu_1; int mubiao=200; /* * 延时函数* */ void delay(unsigned int i) while(i-); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - /* *DS18B20初始化 * */ Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位delay(8); /稍做延时DQ = 0; /单片机将 DQ拉低delay(80); /精确延时 大于 480us DQ = 1; /拉高总线delay(14); x=DQ; /稍做延时后如果 x=0则初始化成功x=1则初始化失败delay(20); /* * 从 DS18B20读入数据* */ ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号dat=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - DQ = 1; / 给脉冲信号if(DQ) dat|=0 x80; delay(4); return(dat); /* * 向 DS18B20 写命令* */ WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay(5); DQ = 1; dat=1; /delay(4); /* *DS18B20程序读取温度 * */ ReadTemperature(void) unsigned char a=0; unsigned char b=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - unsigned int t=0; Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOneChar(0 x44); / 启动温度转换Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOneChar(0 xBE); / 读取温度寄存器等(共可读9 个寄存器)前两个就是温度a=ReadOneChar();/ 低八位b=ReadOneChar();/ 高八位t=b; t400 | mubiao0) P35=1;P31=0;/环境温度高于目标温度,红色指示灯发光,加热器加热else P35=0;P31=1;/环境温度低于目标温度,指示灯不发光,不加热 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - void delay_1(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -