基于单片机的温控风扇控制设计初稿陈军平 - 图文

更新时间:2024-02-02 00:12:01 阅读量: 教育文库 文档下载

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

桂林理工大学博文管理学院信息

工程学院

BOWE COLLEGEN OF MANAGEMENT GUILIN UNIVERSITY

TECHNOLOGY INFORMATION ENGINEERING

学 士 学 位 论 文

THESIS OF BACHELOR (2015 — 20 16 年)

题 目 基于单片机AT89S52的温控风扇的设计

学 科 部: 信息科学部 专 业: 电子信息工程 班 级: 12-2电子信息工程 学 号: 12110208 学生姓名: 陈军平 指导教师: 陈守学 朱昌洪

起讫日期:

摘 要

生活中,我们经常会使用到电风扇。比如,在炎热的夏天人们用电风扇来降温;在工业生产中,大型机械用电风扇来散热等。但是当环境温度变化的时候,人工很难做到及时控制风扇的转速,也很难有效利用宝贵的电资源。随着温度控制的技术不断发展,温控技术已经完全满足现代的日常生活和生产的要求,应运而生的温控电风扇也逐渐走进了人们的生活中。温控电风扇可以根据环境温度自动调节电风扇启停与转速,在实际生活的使用中,温控电风扇不仅可节省宝贵的电资源,也大大方便了人们的生活和生产。

温控风扇是利用温度的变化控制风扇启停及转速的智能系统,在现代社会中的生产以及人们的日常生活中都有广泛的应用,如工业生产大型机械散热系统中的风扇、现在笔记本电脑上的广泛应用的智能CPU风扇等。本文设计了基于单片机的温控风扇系统,用单片机为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度比较实现风扇电机的自动启动和停止,并能根据温度的变化自动改变风扇电机的转速,同时用LCD1602十六段液晶显示检测到的温度与设定的温度。系统的预设温度的设置是通过两个独立按键来实现的,一个增大预设温度,一个减小预设温度。 关键词: 89C52单片机;DS18B20;温控;风扇

1

ABSTRACT

In life, we often use to electric fan. For example, in the hot summer people use electric fan to cool; in industrial production, large-scale machinery use electric fan for cooling. But when the environmental temperature changes, artificial hard to timely control the speed of the fan, is also very difficult to effectively utilize valuable resources. With the development of technology of temperature control, temperature control technology has been fully meet the modern daily life and production requirements, emerge as the times require temperature-controlled electric fan has gradually entered people's life. Temperature control electric fan according to the ambient temperature automatic regulating electric fan start / stop and speed, in real life use, temperature-controlled electric fan not only can save valuable resources, also brings great convenience for people's life and production.

Temperature control fan in modern society production and people's daily life have a wide range of applications, Such as industrial production of large mechanical cooling system of fan, now notebook computer on a wide range of application of intelligent CPU fan. This paper introduces the design of MCU based temperature control fan system, using SCM as the controller, use of temperature sensor DS18B20 as a temperature acquisition component, and according to the collected temperature, through a Darlington reverse driving fan motor driver ULN2803. According to the detected temperature and a set temperature to achieve system comparison of fan motor for automatic start and stop, and according to temperature changes automatically change the fan motor speed, at the same time with the LED eight digital tube display the detected temperature and a set temperature. The preset temperature set by two independent buttons to achieve, The one increase the preset temperature, and the another one reduced the preset temperature.

Key words: single chip microcomputer; DS18B20; temperature control; fan

2

目 录

第一章 前 言 .............................................................................. 错误!未定义书签。 第二章 整体方案设计 ................................................................ 错误!未定义书签。

2.1 系统整体的设计 ............................................................ 错误!未定义书签。 2.2方案论证 ......................................................................... 错误!未定义书签。

2.2.1 温度传感器的选择 .............................................. 错误!未定义书签。 2.2.2 控制核心的选择 .................................................. 错误!未定义书签。 2.2.3 温度显示器件的选择 .......................................... 错误!未定义书签。 2.2.4 调速方式的选择 .................................................. 错误!未定义书签。

第三章 各单元模块的硬件设计 .................................................................................. 5

3.1 系统器件简介 .................................................................................................. 6

3.1.1 DS18B20单线数字温度传感器简介 .................................................... 6 3.1.2 AT89C52单片机简介 ............................................................................ 7 3.1.3 LCD1602液晶显示屏简介 .................................................................... 9 3.2电路设计 ......................................................................................................... 10

3.2.1 开关复位与晶振电路 .......................................................................... 10 3.2.2 独立按键连接电路 .............................................................................. 11 3.2.3 LCD1602液晶显示电路 ...................................................................... 12 3.2.4 温度采集电路 ...................................................................................... 13 3.2.5 风扇电机驱动与调速电路 .................................................................. 14 3.2.6 电路总图 .............................................................................................. 15

第四章 软件设计 ........................................................................................................ 17

4.1 程序设置 ........................................................................................................ 17

4.1.1 主要程序代码 ...................................................................................... 18

1

4.2 用Keil C51 编写程序 .................................................................................. 18 第五章 系统调试 ........................................................................................................ 26

5.1 软件调试 ........................................................................................................ 26

5.1.1 按键显示部分的调试 .......................................................................... 26 5.1.2 传感器DS18B20温度采集部分调试 ................................................ 26 5.1.3 电动机调速电路部分调试 .................................................................. 27 5.2 硬件调试 ........................................................................................................ 27

5.2.1 按键显示部分的调试 .......................................................................... 27 5.2.2 传感器DS18B20温度采集部分调试 ................................................ 27 5.2.3 电动机调速电路部分调试 .................................................................. 28 5.3 系统功能 ........................................................................................................ 28

5.3.1 系统实现的功能 .................................................................................. 28 5.3.2 系统功能分析 ...................................................................................... 28

第六章 结束语 .......................................................................................................... 309 参考文献 ...................................................................................................................... 31

2

第一章 前 言

在现代的生活和生产中,电风扇被广泛的使用,发挥着举足轻重的作用,如夏天人们使用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。而随着温度控制技术的发展,为了降低风扇运转时的噪音以及节省能源等,温度控制风扇越来越受到重视并被广泛的应用。在先阶段,温控风扇的设计已经有了一定的成效,可以使风扇根据环境温度的变化进行自动无极调速,当环境温度升高到到一定时能自动启动风扇,并随着环境温度的升高自动加快风扇的转速,当环境温度降到一定时能自动停止风扇的转动,实现智能控制。

本文设计了由ATMEL公司的8052系列单片机AT89C52作为控制器,采用DALLAS公司的温度传感器DS18B20作为温度采集元件,并通过一个达林顿反向驱动器ULN2803驱动风扇电机的转动。同时使系统检测到的环境温度以及系统预设的温度动态显示在LCD1602液晶显示屏上。根据系统检测到的环境温度与系统预设温度的比较,实现风扇电机的自动启动与停止以及转速的自动调节。

1

第二章 整体方案设计

2.1 系统整体的设计

本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LCD1602液晶显示屏上显示当前环境温度值以及预设温度值。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。同时采用PWM脉宽调制方式来改变直流风扇电机的转速。并通过两个按键改变预设温度的大小,一个提高预设温度,另一个降低预设温度。系统结构框图如图2-1所示。

温度显示 DS18B20 独立按键 AT89C52 PWM驱动电路 直流电机 复位 晶振

图2-1 系统构成框图

2.2方案论证

本设计需要实现风扇直流电机的温度控制,使风扇电机能根据环境温度的变化自动启动和停止以及转速的自动调节,需要比较高的温度变化分辨率以及稳定

2

可靠的换挡停机控制部件。 2.2.1 温度传感器的选择

在本设计中,温度传感器的选择有一下两种方案:

方案一:使用数字式的DS18B20集成温度传感器作为温度检测的核心元件,由其检测并直接输出数字信号给单片机进行处理。

方案二:使用热敏电阻作为检测温度的核心元件,并通过运算放大器放大,由于热敏电阻会随温度变化而变化,进而产生输出电压变化的微弱电压变化信号,再经模数转换芯片ADC0809将微弱电压变化信号转化为数字信号输入单片机处理。

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

对于方案一,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外界放大转换等电路的误差因数,温度误差变的很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转化成数字量直接输出,简化了系统程序的设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变的非常简洁,抗干扰能力强,因此该方案适用于本系统。 2.2.2 控制核心的选择

在本设计中采用AT89C52单片机作为控制核心,通过软件编程的方法进行温度检测和判断,并在其I/O口输出控制信号。AT89C52单片机工作电压低,性能高,片内含8k字节的只读程序存储器ROM和256字节的随机数据存储器RAM,它兼容标准的MCS-51指令系统,单片机价格便宜,适合本设计系统。

3

2.2.3 温度显示器件的选择

方案一:应用动态扫描的方式,采用LED共阴极数码管显示温度。 方案二:采用LCD液晶显示屏显示温度。

对于方案一,该方案成本很低,显示温度明确醒目,即使在黑暗空间也能清楚看见,功耗极低,同时温度显示程序的编写也相对简单,因而这种方式得到了广泛的应用。但不足的地方是它采用动态扫描显示方式,各个LED数码管是逐个点亮的,因此会产生闪烁 ,但由于人眼的视觉暂留时间为20ms,故当数码管扫描周期小于这个时间时,人眼不会感觉到闪烁,因此只要扫描频率设置得到即可采用该方案。

对于方案二,液晶显示屏具有显示字符优美,其不仅能显示字符甚至图形,这是LED数码管无法比拟的。但是液晶显示模块的元件价格昂贵,显示驱动程序的编写也较复杂,从简单实用的角度考虑,本系统采用方案一。 2.2.4 调速方式的选择

方案一:采用单片机软件编程实现PWM(脉冲宽度调制)调速方法。PWM的英文全称是:Pulse Width Modulation的缩写,它是按一定的规律改变脉冲序列的脉冲宽度,一调节输出量和波形的一种调节方式,在PWM驱动控制的调节系统中,最常用的是以矩形波PWM信号,早控制时需要调节PWM波的占空比。占空比是指高电平持续时间在一个周期时间内的百分比。在控制电机转速时,占空比越大,转速就越快,若全为高电平,占空比为100%时,转速达到最大。用单片机I/O口输出PWM信号时,有如下三种方法:

(1)利用软件延时。当高电平延时时间到时,对I/O电平取反,使其变成低电平,然后再延时一定时间;当低电平延时时间到时,再对I/O电平取反,使其变成高电平,如此循环即可得到PWM信号。在本设计中采用了此方法。

(2)利用定时器。控制方法与(1)相同,只是在该方法中利用单片机的定时器来定时进行高低电平的转变,而不是用软件延时。但是此方法编程相对复杂。

(3)利用单片机自带的PWM控制器。在STC12系列单片机中自身带有PWM控制器,但本系统所应用到的AT89C52单片机无此功能。

对于方案一,该方案能够直接实现对直流电机的无极调速,速度变化灵敏,

4

但是D/A转换芯片的价格较高,与其温控状态下无极调速功能相比价格较高。

对于方案二,相对于其他用硬件或是软件相结合的方法实现对电机进行调速而言,采用PWM用纯软件的方法来实现调速过程,具有更大的灵活性,并大大降低了成本,能够充分发挥单片机的功能,对于简单速度控制系统的实现提供了一种有效的途径。综合考虑选用方案二。

5

第三章 各单元模块的硬件设计

系统主要器件包括DS18B20温度传感器、AT89C52单片机、十六位LCD1602液晶显示屏、风扇直流电机。辅助元件包括电阻、电容、电源、按键、拨码开关蜂鸣器等。

3.1 系统器件简介

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

DS18B20数字温度传感器,是采用美国DALLAS半导体公司生产的DS18B20可组网数字温度传感器芯片封装而成,它具有微型化、低功耗、高性能、抗干扰能力强、易配微型处理器等优点,可直接将温度转化成串行数字信号供处理器处理。适用于各种狭小空间设备数字测温和控制领域。

DS18B20的主要特征:测量的结果直接以数字信号的形式输出,以“一线总线”方式串行传给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;温度测量范围在-55℃~+125℃之间,在-10℃~+85℃时精确度为±0.5℃;可检测温度分辨率为9~12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和0.0625℃,可实现高精度测温;它单线接口的独特性,使它与微处理器连接时仅需一条端口线即可实现与微处理器的双向通信;支持多点组网功能,即多个DS18B20可以并联在唯一的三线上,实现组网多点测温的功能;工作电压范围宽,其范围在3.0~5.5V。

DS18B20内部结构主要有四部分:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。其管脚有三个,其中DQ为数字信号端,GND为电源地,VDD为电源输入端。

6

3.1.2 AT89C52单片机简介

AT89C52是51系列单片机的一个型号,它是由ATMEL公司生产的一个低电压、高性能的8位单片机,片内器件采用ATMEL公司的非易失性、高密度存储技术 ,与标准的MCS-51指令系统兼容,同时片内设置有通用8位中央处理器和8k字节的可反复擦写的只读程序存储器ROM以及256字节的数据存储器RAM,在许多较复杂的控制系统中AT89C52单片机得到了广泛的应用。AT89C52有40个引脚,各引脚介绍如下:

VCC:+5V电源线;GND:接地线。

P0口:P0.7~P0.0,这组引脚共8条,其中P0.7为最高位,P0.0为最低位。这8条引脚共有两种不同的功能,分别适用于两种不同的情况。第一种情况是单片机不带片外存储器,P0可以作为通用I/O口使用,P0.7~P0.0用于传送CPU的输入/输出数据,此时它需外接一上拉电阻才能正常工作。第二种情况是单片机带片外存储器,其各个引脚在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。

P1口:P1口是一个内部含有上拉电阻的8位双向I/O口。它也可作为通用的I/O口使用,与P0口一样用于传送用户的输入输出数据,所不同的是它片内含上拉电阻而P0口没有,故P0口在做该用途时需外接上拉电阻而P1口则不需要。在FLASH编程和校验时,P1口用于输入片内EPROM的低8位地址。

P2口:P2口为一个内部含有上拉电阻的8位双向I/O口,它可以作为通用I/O口使用,传送用户的输入/输出数据,同时可与P0口的第二功能配合,用于输出片外存储器的高8位地址,共同选中片外存储单元,但此时不能传送存储器的读写数据。在一些型号的单片机中,P2口还可以配合P1口传送内部EPROM的12位地址中的4位地址。

P3口:P3口引脚是8个带内部上拉电阻的双向I/O口,当P3口写入1后,它们被内部上拉为高电平,它也可以作为普通的I/O口使用,传送用户的输入输出数据,P3口也作为一些特殊功能端口使用,如图3-1所示。 P3.0:RXD(串行数据接受口),P3.1:TXD(串行数据发送口) P3.2:INT0 (外部中断0输入),P3.3:INT1(外部中断1输入) P3.4:T0(计数器0计数输入),P3.5:T1(计时器1外部输入)

7

P3.6:WR(外部RAM写选通信号)P3.7:RD(外部RAM读选通信号)

图3-1 AT89C52单片机

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平状态。

ALE/PROG:地址锁存允许/编程线,当访问片外存储器时,在P0.7~P0.0引脚线上输出片外存储器低8位地址的同时还在ALE/PROG线上输出一个高电位脉冲,其下降沿用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出P0.7~P0.0引脚线去传送随后而来的片外存储器读写数据。在不访问片外存储器时,单片机自动在ALE/PROG线上输出频率为1/6晶振频率的脉冲序列。

PSEN:外部程序存储器ROM的选通信号。在由外部程序存储器取指期间,

每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的

PSEN信号将不出现。

EA/VPP:允许访问片外存储器/编程电源线,当EA保持低电平时,则在此

期间允许使用片外程序存储器,不管是否有内部程序存储器。当EA保持高电平时,则允许使用片内程序存储器。在FLASH编程期间,此引脚也用于施加12V

8

编程电源(VPP)。

XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微电容,即用来连接单片机片内OSC的定时反馈回路。

3.1.4 LCD1602液晶显示屏简介

①液晶显示原理

液晶显示的原理是利用液晶的物理特性通过电压对其显示区域进行控制有电就有显示

这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实

现全彩色显示的特点目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工

具等众多领域。

②液晶显示器的分类

液晶显示的分类方法有很多种通常可按其显示方式分为段式、字符式、点阵式等。除了黑

白显示外液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分可以分为静态驱 动Static、单纯矩阵驱动Simple Matrix和主动矩阵驱动Active Matrix三种。

③液晶显示器各种图形的显示原理: 线段的显示

点阵图形式液晶由M×N个显示单元组成假设LCD显示屏有64行每行有128列每8

列对应1字节的8位即每行由16字节共16×8=128个点组成屏上64×16个显示单元与显示RAM区1024字节相对应每一字节的内容和显示屏上相应位置的亮暗对应。例如

屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定当000H=FFH

时则屏幕的左上角显示一条短亮线长度为8个点当3FFH=FFH时则屏幕的右

下角显示一条短亮线当000H=FFH001H=00H002H=00H??00EH

=00H00FH=00H时则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。

这就是LCD显示的基本原理。 字符的显示

用LCD显示一个字符时比较复杂因为一个字符由6×8或8×8点阵组成既要找到和显示

屏幕上某几个位置对应的显示RAM区的8字节还要使每字节的不同位为“1”其它的为“0”

9

为“1”的点亮为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来

说显示字符就比较简单了可以让控制器工作在文本方式根据在LCD上开始显示的行

列号及每行的列数找出显示RAM对应的地址设立光标在此送上该字符对应的代码即可。 汉字的显示

汉字的显示一般采用图形的方式事先从微机中提取要显示的汉字的点阵码一般用字模提

取软件每个汉字占32B分左右两半各占16B左边为1、3、5??右边为2、4、6??

根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址设立光标

送上要显示的汉字的第一字节光标位置加1送第二个字节换行按列对齐送第三个字

节??直到32B显示完就可以LCD上得到一个完整汉字。 1082 1602字符型LCD简介

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD目前常用16*1

16*220*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示

器为例介绍其用法。

引脚说明: VSS 电源地 D2数据 VDD电源正极 D3数据 VL液晶显示偏压 D4数据 RS数据命令选择 D5数据R/W读/写选择 D6数据 E使能信号 D7数据 D0数据 BLA背光源正极 D1数据 BLK背光源负极

3.2电路设计

3.2.1 开关复位与晶振电路

在单片机应用系统中,出单片机本身需要复位以外,外部扩展I/O接口电路也需要复位,因此需要一个包括上电和按钮复位在内的系统同步复位电路。单片机上的XTAL1和XTAL2用来外接石英晶体和微调电容,即用来连接单片机内OSC的定时反馈回路。笨设计中开关复位与晶振电路如图3-3所示,当按下按键开关S1时,系统复位一次。其中电容C1、C2为33pF,C3为10uF,电阻R2、R3阻值为10k,晶振频率为12MHz。

10

图3-3 系统复位与晶振电路

3.2.2 独立按键连接电路

按键包括两个独立按键S2和S3,一端与单片机的P1.3和P1.4口连接,另一端接地,当按下任一键时,P1口读取低电平有效。系统上电后,进入按键扫描子程序,以查询的方式确定各按键,完成温度初值的设定。其中按键S2为加按键,每按一次,系统对最初设定值加一,按键S3为减按键,每按下一次,系统对初定值进行减一计算。其连线图如图3-4所示。

11

图3-4 独立按键连接电路

3.2.3 LCD1602液晶显示电路

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据

12

图3-5 LCD1602液晶显示电路

3.2.4 温度采集电路

DS18B20数字温度传感器通过其内部计数时钟周期的作用,实现了特有的温度测量功能。低温系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数,计数器预先设置有与-55℃相应的一个基权值。如果计数器计数到0时,高温度系数振荡周期还未结束,则表示测量的温度值高于-55℃,被预置在-55℃的温度寄存器中的值就加1℃,然后这个过程不断反复,知道高温系数振荡周期结束为止。此时温度寄存器中的值即为被测温度值,这个值以16位二进制的形式存放在存储器中,通过主机发送存储器读命令可读出此温度值,读取时低位在前,高位在后,依次进行。由于温度振荡器的抛物线特性的影响,其内用的斜率累加器进行补偿。

DS18B20在使用时,一般都采用单片机来实现数据采集。只须将DS18B20信号线与单片机1位I/O线相连,且单片机的1位I/O线可挂多个DS18B20,就可

13

实现单点或多点温度检测。本设计中将DS18B20接在P1.7口实现温度的采集,其与单片机的连接如图3-6所示。

图3-6 温度采集电路

3.2.5 风扇电机驱动与调速电路

本设计中由单片机的I/O口输出PWM脉冲,通过一个达林顿反向驱动器ULN2803驱动12V的直流无刷电机以及实现风扇电机转速的调节。

按键控制设置温度,通过软件向单片机输入相应控制指令,由单片机通过P1.7口输出与转速相应的PWM脉冲,经过ULN2803驱动风扇直流电机控制电路,实现电机转速与启停的自动控制。当环境温度升高时,直流电机的转速会相应按照设定的等级有所提高;当环境温度下降时,电机的转速会相应的下降;当环境温度低于设置温度时,电机停止转动,而环境温度又高于预设温度时,电机重新启动。

电路图如图3-7所示,风扇电机的一端接12V电源,另一端ULN2803的OUT7引脚,ULN2803的IN7引脚与单片机的P3.1引脚相连,通过控制单片机的P3.1引脚输出PWM信号,由此控制风扇直流电机的速度与启停。

14

图3-7 风扇电机驱动与调速电路

系统选用的风扇电机为12直流无刷电机,达林顿反向驱动器ULN2803输入TTL信号为5V或CMOS信号为6~15V时,输出的最大电压为50V,最大电流为500mA,工作温度范围为0~70℃。本系统中单片机I/O口输出的TTL信号为5V,因此此风扇电机可以用ULN2803来驱动。 3.2.6 电路总图

电路总图主要包括系统复位与晶振电路、独立按键连接电路、LCD1602液晶显示电路、温度采集电路、风扇电机驱动与调速电路等,如图3-8所示。

15

图3-8 电路总图

16

第四章 软件设计

4.1 程序设置

程序设计部分主要包括主程序、DS18B20初始化函数、DS18B20温度转换函数、温度读取函数、按键扫描函数、数码管显示函数、温度处理函数以及风扇电机控制函数。DS18B20初始化函数完成对DS18B20的初始化;DS18B20温度转换函数完成对环境温度的实时采集;温度读取函数完成主机对温度传感器数据的读取及数据换算,按键扫描函数则根据需要完成初值的加减设定;温度处理函数对采集到的温度进行分析处理,为电机转速的变化提供条件;风扇电机控制函数则根据温度的数值完成对电机转速及启停的控制。主程序流程图如图4-1所示。

开始 调用按键扫描函数 程序初始化 调用LCD1602显示函数 调用DS18B20初始化函数 调用温度处理函数 调用DS18B20温度转换函数 调用风扇电机控制函数 调用温度读取函数 结束 图4-1 主程序图

17

第五章 系统调试

4.1.1 程序代码

C51 COMPILER V9.01 温控风扇程序 05/02/2016 13:13:23 PAGE 1

C51 COMPILER V9.01, COMPILATION OF MODULE 蝊控风扇程序 OBJECT MODULE PLACED IN 温控风扇程序.OBJ

COMPILER INVOKED BY: D:\\Keil uVision4\\C51\\BIN\\C51.EXE 温控风扇程序.c BROWSE DEBUG OBJECTEXTEND

line level source

1 #include 2 #include

3 #include 4 #define uchar unsigned char 5 #define uint unsigned int 6 ////////////////////

7 sbit dj=P1^0;//电机控制端接口

8 sbit DQ=P1^6;//温度传感器接口P1^6 9 //////////按键接口///////////////////////////////// 10 sbit key1=P3^5;//设置温度 11 sbit key2=P3^6;//温度加

12 sbit key3=P3^7;//温度减 P3^7 13

14 sbit Beep=P1^1; //蜂鸣器 15

16 uint wen_du; 17 uchar gao,di;//pwm

18 uint shang,xia; //对比温度暂存变量 19 uchar dang;//档位显示 20 uchar flag;

21 uchar d1,d2,d3;//显示数据暂存变量 22

23 uchar xianshi[6]={0}; 24

25 void delay(uint ms) 26 {

27 1 uchar x;

28 1 for(ms;ms>0;ms--)

29 1 for(x=10;x>0;x--); 30 1 }

31 /***********ds18b20延迟子函数(晶振12MHz )*******/

18

32 void delay_18B20(uint i) 33 {

34 1 while(i--); 35 1 }

36 /**********ds18b20初始化函数**********************/ 37 void Init_DS18B20(void) 38 {

39 1 uchar x=0;

40 1 DQ=1; //DQ复位 41 1 delay_18B20(8); //稍做延时

42 1 DQ=0; //单片机将DQ拉低 43 1 delay_18B20(80); //精确延时 大于 480us 44 1 DQ=1; //拉高总线 45 1 delay_18B20(14);

46 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

47 1 delay_18B20(20); 48 1 }

49 /***********ds18b20读一个字节**************/ 50 uchar ReadOneChar(void) 51 {

52 1 uchar i=0; 53 1 uchar dat=0; 54 1 for (i=8;i>0;i--) 55 1 {

19

第五章 系统调试

C51COMPILERV9.01 05/02/2016 13:13:23 PAGE 2

56 2 DQ=0; // 给脉冲信号 57 2 dat>>=1;

58 2 DQ=1; // 给脉冲信号 59 2 if(DQ) 60 2 dat|=0x80;

61 2 delay_18B20(4); 62 2 63 1 64 1 65 66 67 68 1 69 1 70 1 71 2 72 2 73 2 74 2 75 2 76 2 77 1 78 79 80 81 1 82 1 83 1 84 1 85 1 86 1 87 1 important

88 1 89 1 90 1 9个寄存器) 91 1 92 1 93 1 94 1 }

return(dat); }

/*************ds18b20写一个字节****************/ void WriteOneChar(uchar dat) {

uchar i=0;

for (i=8;i>0;i--) {

DQ=0;

DQ=dat&0x01; delay_18B20(5); DQ=1; dat>>=1; } }

/**************读取ds18b20当前温度************/ void ReadTemperature(void) {

uchar a=0; uchar b=0; uchar t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换

delay_18B20(100); // this message is wery Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读前两个就是温度

delay_18B20(100);

a=ReadOneChar(); //读取温度值低位

b=ReadOneChar(); //读取温度值高位 wen_du=((b*256+a)>>4); //当前采集温度值除16得

20

实际温度值

95 1 }

96 void display(void)//显示温度 97 {

98 1 if(flag==1||flag==2) 99 1 xianshi[0]=d1; 100 1 else

101 1 xianshi[0]=d1+'0'; 102 1 xianshi[1]='-'; 103 1 104 1 105 1 106 1 107 1 108 1 109 110 111 1 112 1 113 2 114 2 115 2 116 2 117 1 xianshi[2]=d2+'0'; xianshi[3]=d3+'0'; xianshi[4]='C';

SandtheStr(0,5,\ SandtheStr(1,5,xianshi); }

void zi_keyscan(void)//自动模式按键扫描函数{

if(key1==0) {

delay(10);

if(key1==0)flag=1;

while(key1==0);//松手检测 }

while(flag==1)

21

第五章 系统调试

C51COMPILERV9.01 05/02/2016 13:13:23 PAGE 3

118 1 {

119 2 d1='H';d2=shang/10;d3=shang; 120 2 display(); 121 2 if(key1==0) 122 2 {

123 3 delay(10);

124 3 125 3 126 3 127 2 128 2 129 3 130 3 131 3 132 4 133 4 134 4 135 3 136 2 137 2 138 3 139 3 140 3 141 4 142 4 143 4 144 3 145 2 146 1 147 1 148 2 149 2 150 2 151 2 152 3 153 3 154 3 155 3 156 2 157 2 158 3 if(key1==0)flag=2;

while(key1==0);//松手检测 }

if(key2==0) {

delay(10); if(key2==0) {

shang+=5;

if(shang>=100)shang=100; }while(key2==0);//松手检测 }

if(key3==0) {

delay(10); if(key3==0) {

shang-=1;

if(shang<=10)shang=10; }while(key3==0);//松手检测 } }

while(flag==2) {

d1='L';d2=xia/10;d3=xia; display(); if(key1==0) {

delay(10);

if(key1==0)flag=0;

while(key1==0);//松手检测 }

if(key2==0) {

delay(10);

22

159 3 if(key2==0) 160 3 {

161 4 xia+=5;

162 4 if(xia>=95)xia=95; 163 4 }while(key2==0);//松手检测 164 3 }

165 2 if(key3==0) 166 2 {

167 3 delay(10); 168 3 169 3 170 4 171 4 172 4 173 3 174 2 175 1 176 177 178 1 179 1 if(key3==0) {

xia-=1;

if(xia<=0)xia=0; }while(key3==0);//松手检测 } } }

void zi_dong()//自动温控模式 {

uchar i;

d1=dang;d2=wen_du/10;d3=wen_du;

23

第五章 系统调试

C51COMPILERV9.01 05/02/2016 13:13:23 PAGE 4

180 1 zi_keyscan();//按键扫描函数 181 1 display();

182 1 if(wen_du=xia)&&(wen_du<=shang))//1挡 184 1 {

185 2 dang=1; 186 2 for(i=0;i<5;i++){dj=0;zi_keyscan();} //display(); 187 2 for(i=0;i<5;i++){dj=1;zi_keyscan();} //display();

188 2 }

189 1 if(wen_du>shang){dj=1;dang=2;Beep=0;}//高温全速 大于上限蜂鸣器

190 1 else

191 1 Beep=1; 192 1 }

193 void main() 194 {

195 1 uchar j; 196 1

197 1 LcdInit(); 198 1 dj=0;

199 1 shang=30; 200 1 xia=20;

201 1 for(j=0;j<80;j++) 202 1 ReadTemperature(); 203 1

204 1 while(1) 205 1 {

206 2 ReadTemperature();

207 2 zi_dong();//自动温控模式 208 2 } 209 1 }

MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 952 ---- CONSTANT SIZE = 6 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 19 14 IDATA SIZE = ---- ----

24

BIT SIZE = ---- ---- END OF MODULE INFORMATION.

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

4.2 用Keil C51 编写程序

Keil C51是美国Keil Software公司开发的51系列兼容单片机C语言的软件开发系统,与单片机汇编语言相比,C语言不仅语句简单灵活,而且编写的函数模块可移植性强,因而易学易用,效率高。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前使用较多的MCS-51系列单片机开发的软件。

Keil C51软件不仅提供了丰富的库函数,而且它强大的集成开发调试工具为程序编辑调试带来便利,在开发大型软件时更能体现高级语言的优势。早使用时要先建立一个工程,然后再添加文件并编写程序,编写好后在编辑调试。Keil C51的使用界面如图3-2所示。

图4-2 Keil C51的使用界面

25

第五章 系统调试

第五章 系统调试

5.1 软件调试

5.1.1 按键显示部分的调试

起初根据设计编写的系统程序:程序的按键接口采用P1口,数码管现实采用P0控制LED的段码,P2口控制LED的位码,从而实现按键功能以及数码管的显示。经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵的,当按键按下时,显示并不变化。

经过查找分析,发现按键扫描程序没有按键消抖部分,按键在按下与松手时,都会有一定程序的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不工作。因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测按键是否真的按下或已完全松手。

数码管不能正确的显示,主要是因为所有数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能正确识别段码。应在系统中加入锁存器,或是在程序中设定存储段码的空间。

在按键加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按键也能正常的工作,达到了较好的效果。

5.1.2 传感器DS18B20温度采集部分调试

由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的方便,体积小、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用了P1.7口为数字温度输入口,但是需要对输入的数字信号进行处理后才能显示,从而多了温度转换程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。

在温度转换程序中,为了能够正确的检测到并显示温控的小数位,程序中把检测到的温度与10 相乘后,再按一个三位的整数来处理。如果把19.7变成197来处理,这样为程序的编写带来了方便。

26

5.1.3 电动机调速电路部分调试

本设计中,采用了达林顿反向驱动器ULN2803驱动直流电机,其可驱动八个直流电机,本系统仅驱动一个。软件设置了P3.1口输出不同的PWM波形,通过达林顿反向驱动器ULN2803驱动直流电机转动,通过软件中程序设定,根据不同温度输出不同的PWM波,从而得到不同的占空比控制风扇直流电机。程序实现了P3.1口的PWM波形输出,当外界温度低于设置温度时,电机不转动或停止转动;当外界温度高于设置温度时,电机的转速升高或是自动开始转动,且外界温度与设置温度的差值越大,电机转速就越高,即占空比增加。

本系统中风扇直流电机的转速可实现四级调速。通过温度传感器检测到的温度与系统预设的温度值的比较,实现转速变换。当检测到的温度比预设的温度每增加5摄氏度,风扇电机转速增加一级。

5.2 硬件调试

5.2.1 按键显示部分的调试

系统按键部分实现了以下功能:按下P1.3口键,LED的后两位显示温宿值增一;按下P1.4口键,LED的后两位显示温度值减一。调试过程中出现了当按键时间过长时,设置的温度值不是增一或者减一,而是增加后减少了及几个值,出现这种情况的主要原因可能是按键的去抖动延时时间过长造成,改进方法为将对应的按键去抖动延时时间适量增加,但也不应过长,否则将出现按键无效的情形。

系统显示部分实现了以下功能:LED显示的前三位实现了环境温度整数部分与小数部分的连续显示,LED的后两位能根据按键的调整显示所需的设计温度。且LED的显示效果很好,很稳定。

5.2.2 传感器DS18B20温度采集部分调试

将DS18B20芯片接在系统板对应的P1.7口,通过插针在对应系统板的右下侧三口即为对应的VCC、P1.7和GND,可将芯片直接插在该插件上,因此极为方便。系统调试中为验证DS18B20是否能在系统板上工作,将手心靠拢或者捏

27

第五章 系统调试

住芯片,即可发现LED显示的前两位温度也迅速升高,验证了DS18B20能在系统板上工作。由于DS18B20为3个引脚,因此在调试过程中因注意各个引脚的对应位置,以免其接反而使芯片不能正常工作甚至烧毁芯片。

5.2.3 电动机调速电路部分调试

系统本部分的设计中重在软件设计,因为外围的驱动电路只是将送来的PWM信号放大从而驱动电机转动。系统软件设置在P3.1口输出是电机转动的PWM占空比,当环境温度高于设置温度时,电机开始转动,若此时用高于环境温度的热源靠近芯片DS18B20时,发现电机的转速在升高,并越来越快,当达到一定值时,发现电机的转速不再升高;将热源远离芯片DS18B20时,发现电机的转速开始下降,转速达到一定值时,若将环境温度升高到环境温度以上,发现电机又停止了转动。系统采用的直流电机为12V的额定电压,而驱动电路在采用单片机电源时的输出电压最高不过5V,因此在调试过程中只采用了5V的直流电机来调试,且得到了可观的控制效果。

5.3 系统功能

5.3.1 系统实现的功能

本系统能够实现单片机系统检测环境温度的变化,然后根据环境温度变化来控制风扇直流电机输入占空比的变化,从而产生不同的转动速度,也可根据按键调节不同设置温度,再由环境温度与设置温度的差值来控制电机。当环境温度低于设置温度时,电机停止转动;当环境温度高于设置温度时,单片机对应输出口输出不同占空比的PWM信号,控制电机开始转动,并随着环境温度与设置温度的差值的增加电机的转速逐渐升高。系统还能动态的显示当前温度与设置温度,并能通过按键调节当前的设置温度。

5.3.2 系统功能分析

系统总体上由五部分组成,即按键与复位电路、数码管显示电路、温度检测电路、电机驱动电路。首先考虑的是温度检测电路,该部分是整个系统的首要部分,首先要检测到环境温度,才能用单片机来判断温度的高低,然后通过单片机

28

控制直流风扇电机的转速;其次是电机驱动电路,该部分需要使用外围电路将单片输出的PWM信号转化为平均电压输出,根据不同的PWM波形得到不同的平均电压,从而控制电机的转速。电路的设计中采用了达林顿反向驱动器ULN2803,实现较好的控制效果;再次是数码管的动态显示电路,该部分的功能实现对环境温度和设置温度的显示,其中DS18B20采集环境温度,按键实现不同设置温度的调整,实现了对环境温度和设置温度的及时连续显示。

29

第六章 结束语

本次设计的系统从硬件设计和软件编写到Proteus仿真,再到用单片机开发板的调试,直到最后的电路板焊接,每一个过程都使用到大学里学到的知识,整个过程把大学里的知识系统的串在了一起。本系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围内能实现转速的连续调节,LED数码管能连续稳定的显示环境温度与设置温度,并能通过两个独立的按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机的温控风扇的设计。

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

30

参考文献

[1] 林立,张俊亮,曹旭东,刘德军.单片机原理及应用[M].电子工业出版社,2009. [2] 徐瑞华.单片机原理与接口技术[M].2008.

[3] 李学龙.使用单片机控制的智能遥控风扇[J].电子电路制作,2003,9:13-15. [4] 郭天祥.新概念51单片机C语言教程[M].电子工业出版社,2009. [5] 胡全.51单片机的数码管动态显示技术[J].信息技术,2009,13:25-26. [6] 王会明.智能电风扇控制器的研制[J].电子与自动化,1998,5(4):25-26. [7] 孙号.Proteus软件在设计电子电路中的应用[J].仪表技术,2009,8:74-75. [8] 李刚.总线数字温度传感器DS18B20原理及应用[J],现代电子技术, 2005,

28(21):77-99.

[9] Ylai,Y,Wang.Three dimensional nonlinear analysis for temperature characterist of ventilated embankment in permafrost regions[J].Gold Regions Science and Technology,2004,38(2):165-184.

[10] Cheng Guodong.Linearity engineering in permafrost areas[J].Journal of Glac- iology and Geocryology(in Chinese),2001,23(3):213-17.

31

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

Top