温控自动风扇系统论文

更新时间:2024-01-28 14:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1方案论证

本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换档停机控部件。

1.1 温度传感器的选用

温度传感器可由以下几种方案可供选择:

方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用AD转换芯片ADC0809将模拟信号转化为数字信号输入单片机处理。

方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。

方案三:采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号供单片机处理。

对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适合本系统。

对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从-50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。

对于方案三,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转换等电路的误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-WRIE),与单片机的接口变的非常简洁,抗干扰能力强。关于DS18B20的详细参数参看下面“硬件设计”中的器件介绍。

1

1.2 控制核心的选择

方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,由集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将风扇切换到相应档位。

方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制信号。

对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。

对于方案二,以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温度值,满足全方位的需求。并且通过程序判断温度具有极高的精准度,能精确把握环境温度的微小变化。故本系统采用方案二。

1.3显示电路

方案一:采用五位共阳数码管显示温度,动态扫描显示方式。 方案二:采用液晶显示屏LCD显示温度

对于方案一,该方案成本低廉,显示温度明确醒目,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。不足的地方是扫描显示方式是使五个LED逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20MS,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。

对于方案二,液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是LED数码管无法比拟的。但是液晶显示模块价格昂贵,驱动程序复杂,从简单实用的原则考虑,本系统采用方案一。

1.4调速方式

方案一:采用变压器调节方式,运用电磁感应原理将220V电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电机的转速,从而控制风扇风力大小。

方案二:采用晶闸管构成无级调速电路。

对于方案一,由于采用变压器改变电压调节,有风速级别限制,不能适应人性化要求。且在变压过程中会有损耗发热,效率不高,发热有不安全因素。

2

对于方案二,以电位器控制晶闸管的导通角大小,可实现由最大风速到关闭的无级别调速,可将风力调节在关闭无风到最大风之间的任意风力,实现“自由风”。且在调速环节中基本无电力损耗。故本系统采用方案二。

1.5控制执行部件

方案一:采用数模转换芯片AD0832控制,由单片机根据当前温度值送出相应数字量到AD0832,由AD0832产生模拟信号控制晶闸管的导通角,从而配合无级调速电路实现温控时的自动无级风力调节。

方案二:采用继电器,继电器的接有控制晶闸管导通角的电阻的接入电路与否由单片机控制,根据当前温度值在相应管脚送出高/低电平,决定某个继电器的导通角控制电阻是否接入电路。(详见4.2.4)

对于方案一,该方案能够实现在风扇处于温控状态时也能无级调速,但是D/A转换芯片价格较高,与其温控状态下无级调速功能相比性价比不高。

对于方案二,虽然在温控状态下只能实现弱/大风两级调速,但采用继电器价格便宜,控制可靠,且出于在温控状态时无级调速并不是特别需要的功能,综合考虑采用方案二。

2 系统简述

本系统由集成温度传感器、单片机、LED数码管、继电器、双向晶闸管、蜂鸣器及一些其他外围器件组成。使用具有价廉易购的AT89S51单片机编程控制,通过修改程序可方便实现系统升级。系统的框图结构如下。图2-1

温度传感器DS18B20 单片机AT89S51 数码管显示 调速器 被控对象(风扇) 人工控制

图2-1 系统框图

3

3 硬件设计

系统主要部件包括DS18B20温度传感器、AT89S51单片机、双向晶闸管、五位LED数码管和风扇。辅助元件包括继电器、蜂鸣器、电阻、晶振、电源、按键和拨码开关等。

3.1、本系统各器件简介

3.1.1 DS18B20 单线数字温度传感器简介

DS18B20 单线数字温度传感器是Dallas 半导体公司开发的世界上第一片支持“一线总线”接口的温度传感器。它具有3 引脚TO-92 小体积封装形式。温度测量范围为-55℃——+125℃,可编程为9 位——12 位A/D 转换精度,测温分辨率可达0.0625℃。被测温度用符号扩展的16 位数字量方式串行输出。工作电压支持3V——5.5V 的电压范围,既可在远端引入,也可采用寄生电源方式产生。DS18B20 还支持“一线总线”接口,多个DS18B20可以并联到3 根或2 根线上,CPU 只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。它还有存储用户定义报警温度等功能。

DS18B20 内部结构及管脚

DS18B20 内部结构如图3所示,主要由4 部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。其管脚排列如图4所示,DQ 为数字信号端,GND 为电源地,VDD 为电源输入端。图3-1

图3-1 DS18B20 内部结构

4

图3-2 DS18B20外形及管脚

3.1.2 AT89C51 单片机简介

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM)256B片内RAM的低电压,高性能CMOS8 位微处理器。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。由于将多功能8 位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51单片机管脚如图3-3所示。

图3-3 AT89C51单片机管脚

5

各管脚功能: VCC:供电电压。 GND:接地。

P0 口:P0 口为一个8 位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。当P1 口的管脚第一次写1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0 外部必须被拉高。

P1 口:P1 口是一个内部提供上拉电阻的8 位双向I/O 口,P1 口缓冲器能接收输出4TTL门电流。P1 口管脚写入1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1 口作为第八位地接收。

P2 口:P2 口为一个内部上拉电阻的8 位双向I/O 口,P2 口缓冲器可接收,输出4 个TTL 门电流,当P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在FLASH 编程和校验时接收高八位地址信号和控制信号。

P3 口:P3 口管脚是8 个带内部上拉电阻的双向I/O 口,可接收输出4 个TTL 门电流。当P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。P3 口也可作为AT89C51 的一些特殊功能口。P3.0:RXD(串行输入口);P3.1:TXD(串行输出口);P3.2:/INT0(外部中断0);P3.3:/INT1(外部中断1);P3.4:T0(记时器0 外部输入);P3.5:T1(记时器1外部输入);P3.6:/WR(外部数据存储器写选通);P3.7:/RD(外部数据存储器读选通)。 P3 口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时,ALE 只有在执行MOVX,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。/EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1 时,/EA 将内部锁定为RESET;当/EA 端保持高电平时,此间内部程序存储器。在FLASH 编程期

6

间,此引脚也用于施加12V 编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

3.2 各部分电路设计 3.2.1 数码管显示电路

显示部分包括如下图5: 4个八段(共阳)数码管、PNP型三极管、电阻等。其连接方式如下:应用单片机P0口连接八段数码管,用P2口的4个端口作为数码管的片选信号输出端口,其中要用8550(PNP型)三极管做驱动。又因为P0口做I/O口时要加上拉电阻,所以我们给P0各位各加一个10K的电阻到电源。为了防止烧坏数码管,所以给数码管各段各加一个300欧姆的限流电阻。要显示的数据通过P0口送给数码管显示,通过P2口的4个端口分别对数码管进行位选,事实上数码管是间断被点亮的,只是其间断时间十分短,扫描周期在20ms以下,利用人眼视觉暂留,我们基本看不出它们的闪烁。图3-4

图3-4 显示电路

3.2.2 声响、温度采集、温度设定以及复位电路

电路如图6所示,这一部分主要是由DS18B20,四个按键、一个电容一个三极管和一个蜂鸣器等构成。声响电路在每按下按键时会响一声,当没有把DS18B20接入到电路中时,单片机就会通过蜂鸣器发出报警声音。温度采集电路主要是由DS18B20构成,它可以把采集的温度数据转化成二进制数,经过单片机处理后输出送数码管显示。温度设定主要是通过按键S1、S2|、S3来设定的。按键S1、S2、S3分别接入单片机的P1.4、P1.5、P1.6脚。S3是设定键。用于对风速调节的上限和下限值TH、TL的设置。当按下S1时,可以加1,长按可以

7

快速加1,当按下S2 时,可以减1, 长按可以快速减1。

图3-6 声响、温度采集、温度设置及复位电路

3.2.3 温控自动电路

该电路为控制风速的人工控制与温控两种方式之温控模式时的控制电路,当选择为温控时,单片机默认为弱风,当当前温度低于所设的温度下限TL时继电器1吸合,关闭风扇,当当前温度高于所设的温度上限时继电器2吸合,切换到强风档。电路如图3-7。

图3-7 温控自动电路

8

本系统的总电原理图为:

图3-9 总电原理图

9

4 软件设计

程序实现的功能是上电复位时检测温度传感器DS18B20是否存在或它工作是否正常,当不存在或工作不正常时从蜂鸣器发出报警声,提示用户检查DS18B20,安装或者更换。这部分功能由DS18B20复位与检测子程序RESET完成。当检测到传感器工作正常后,发出温度转换命令及读取温度值命令,将从DS18B20读取的二进制温度值转换为七段码在LED上显示出来。显示功能由温度显示子程序DISP1子程序实现。

4.1 主程序流程图

主程序流程图

开始 初始化 检测蜂鸣报警 N 正Y 温度转换命读温度 温度BCD码处显示温度 按键扫描及处与设定温度对比及

10

4.2 子程序

4.2.1温度数据显示处理函数

首先使用DS18B20进行温度数据采集,经过处理后的数据在由4个数码管进行数据显示。其中要进行温度值正负判断,负温度求补码,标志位置1等问题。

void tem_deal(uint tem) {

/*************温度数据处理*****************/ if(!flag) {

if(tem>6348) // 温度值正负判断

{tem=65536-tem;flag1=1;} // 负温度求补码,标志位置1 Dis_play[4]=tem&0x0f; // 取小数部分的值 Dis_play[3]=ditab[Dis_play[4]]; // 存入小数部分显示值

Dis_play[4]=tem>>4; // 取中间八位,即整数部分的值 Dis_play[0]=Dis_play[4]/100; // 取百位数据暂存 Dis_play[2]=Dis_play[4]0; // 取后两位数据暂存 Dis_play[1]=Dis_play[2]/10; // 取十位数据暂存 Dis_play[2]=Dis_play[2]; // 取个位数据暂存 if(!Dis_play[0]) // 最高位为0都不显示 {

Dis_play[0]=0x0a; // 先判断百位是否为0 if(!Dis_play[1]) {

Dis_play[1]=0x0a; // 再判断十位是否为0 } }

// if(flag1) // {

// Dis_play[3]=0x0b; // 为负数时,最高位显示 \ // } } }

/******************************************/ /* 温度数据显示 */ /******************************************/ void display() {

char k;

11

for(k=0;k<4;k++) //4位LED扫描控制 { Disdata=table[Dis_play[k]]; //数据显示 if (k==2){DIN=0;} //小数点显示 discan=scan_con[k]; //位选 delay(90); //延时 discan=0x0; } }

4.2.2超温报警可控程序

程序设定好三个按键来用来设定用户预想设定的报警值,和BS18B20采集过来的温度数据进行对比,如果超出了原来预定设的值时,就会立刻调用程序执行报警命令。

void Annu(void) { uchar temp,tim; temp=Dis_play[1]*10+Dis_play[2]; if(KEY1==0) { delay(5000); if(KEY1==0) { while(!KEY1) display(); flag3=0; display(); flag++; BUZ=0; BUZ1=1; if(flag==3) { flag3=1; flag=0; } } } if(flag==1) { DC1=0; if(KEY2==0) { delay(5000);

12

if(KEY2==0) { while(!KEY2) display(); tem1++; } }

if(KEY3==0) { delay(5000); if(KEY3==0) { while(!KEY3) display(); tem1--; } } }

if(temp>tem1) { if(!flag) { BUZ=1; BUZ1=0; } } else { BUZ=0; BUZ1=1; }

if(tem1==-1) tem1=50; if(tem1==51) tem1=0;

if(flag==2) { if(KEY2==0) { delay(5000); if(KEY2==0) { while(!KEY2)

13

{ display(); DC_change(tim); } tem2++; } }

if(KEY3==0) { delay(5000); if(KEY3==0) { while(!KEY3) { display(); DC_change(tim); } tem2--; } } Dis_play[1]=tem2/10; Dis_play[2]=tem2; Dis_play[3]=0; if(!Dis_play[1]) Dis_play[1]=0x0a; // 再判断十位是否为0 display(); if(tem2==0) { DC_clos(); } if(tem2==1) { flag3=1; tim=50; DC_change(tim); } if(tem2==2) { flag3=1; tim=125; DC_change(tim); } if(tem2==3) {

14

flag3=1; tim=200; DC_change(tim); } if(tem2==4) { DC_max(); } if(tem2==5) tem2=0; if(tem2==-1) tem2=4; }

// BUZ=0; if(flag==1) { Dis_play[1]=tem1/10; Dis_play[2]=tem1; Dis_play[3]=0; if(!Dis_play[1]) { Dis_play[1]=0x0a; // 再判断十位是否为0 } display(); } }

4.2.3定时器0函数

设置好定时器0的工作方式。 void timer0_int(void) interrupt 1 {

TR0=0; TH0=(65536-100)/256; TL0=(65536-100)%6; TR0=1; timer++; }

15

结 论

本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过两个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机的温控风扇的设计。

本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。综上所述,该系统的设计和研究在社会生产和生活中具有重要地位。

16

致谢

在此衷心感谢我的潘云霞老师。本文的设计工作是在潘老师的悉心指导下完成的,从论文的选题、研究计划的制定、技术路线的选择到系统的开发设计,各个方面都离不开潘老师热情耐心的帮助和教导。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。同时也要感谢在本次论文的设计过程中不断给予我帮助、支持与鼓励的老师和同学,是他们让我更加有信心坚持下去,是他们让我更加顺利的把一个个问题解决,最终顺利的完成本文的设计。

三年的学习生涯马上就要画上句号了,毕业前所有的努力与付出都凝聚在这篇论文里面。相信它虽然算不上上乘之作,但的确是我用心血浇灌的答卷。在此我也要感谢我的同学们,正是和他们三年的朝夕相处,一起上课一起讨论问题,让我逐渐有了对问题的思考认识,从而更好地规划自己的学业。三年的求学时光给我留下了美好的回忆,它将成为我今后人生旅途中新的起点。

17

本文来源:https://www.bwwdw.com/article/oblw.html

Top