基于单片机的温控风扇设计毕业论文(很全--免费) - 图文

更新时间:2024-04-06 00:41:01 阅读量: 综合文库 文档下载

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

陕西理工学院

本科毕业论文(设计)

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

学 院:__ 专 业:电子信息科学与技术 班 级: 学 号: 学生姓名:_ _ 指导教师: ___

年 月

陕西理工学院

目 录 错误!未定义书签。

摘 要 ·········································································································································I Abstract ········································································································· 错误!未定义书签。 第一章 整体方案设计 ·············································································································· 1

1.1 前 言 ·························································································································· 1 1.2 系统整体设计 ·············································································································· 1 1.3方案论证 ······················································································································· 2

1.3.1 温度传感器的选择 ···························································································· 2 1.3.2 控制核心的选择 ································································································ 3 1.3.3 温度显示器件的选择 ························································································ 3 1.3.4 调速方式的选择 ································································································ 3

第二章 各单元模块的硬件设计 ······························································································ 5

2.1系统器件简介 ··············································································································· 5

2.1.1 DS18B20单线数字温度传感器简介································································· 5 2.1.2 达林顿反向驱动器ULN2803简介 ·································································· 5 2.1.3 AT89C52单片机简介 ······················································································ 6 2.1.4 LED数码管简介······························································································ 7 2.2 各部分电路设计 ·········································································································· 8

2.2.1 开关复位与晶振电路 ························································································ 9 2.2.2 独立键盘连接电路 ···························································································· 9 2.2.3 数码管显示电路 ······························································································ 10 2.2.4 温度采集电路 ···································································································11 2.2.5 风扇电机驱动与调速电路 ·············································································· 12

第三章 软件设计 ···················································································································· 14

3.1 程序设置 ···················································································································· 14 3.2 用Keil C51编写程序 ································································································ 14 3.3 用Proteus进行仿真 ·································································································· 15

3.3.1 Proteus简介 ······································································································ 15 3.3.2 本设计基于Proteus的仿真 ············································································ 16

第四章 系统调试 ···················································································································· 21

4.1 软件调试 ···················································································································· 21

4.1.1 按键显示部分的调试 ······················································································ 21 4.1.2 传感器DS18B20温度采集部分调试····························································· 21 4.1.3 电动机调速电路部分调试 ·············································································· 21 4.2 硬件调试 ···················································································································· 22

4.2.1 按键显示部分的调试 ······················································································ 22 4.2.2 传感器DS18B20温度采集部分调试····························································· 22 4.2.3 电动机调速电路部分调试 ·············································································· 22 4.3 系统功能 ···················································································································· 23

4.3.1 系统实现的功能 ······························································································ 23 4.3.2 系统功能分析 ·································································································· 23

结 论 ·································································································································· 24 参考文献 ·································································································································· 25

第 3 页

致 谢 ·································································································································· 26 附录1:电路总图 ··················································································································· 27 附录2:程序代码 ··················································································································· 28

3

第 I 页

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

姓名: 学号:

学校: 指导教师:

摘 要

温控风扇在现代社会中的生产以及人们的日常生活中都有广泛的应用,如工业生产中大型机械散热系统中的风扇、现在笔记本电脑上的广泛应用的智能CPU风扇等。本文设计了基于单片机的温控风扇系统,采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根温度的变化自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。

关键词:单片机、DS18B20、温控、风扇

I

第 1 页

第一章 整体方案设计

1.1 前 言

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

随着单片机在各个领域的广泛应用,许多用单片机作控制的温度控制系统也应运而生,如基于单片机的温控风扇系统。它使风扇根据环境温度的变化实现自动启停,使风扇转速随着环境温度的变化而变化,实现了风扇的智能控制。它的设计为现代社会人们的生活以及生产带来了诸多便利,在提高人们的生活质量、生产效率的同时还能节省风扇运转所需的能量。

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

1.2 系统整体设计

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

1

第 2 页

图1.1系统构成框图

温度显示 DS18B20 独立键盘 AT89C52 PWM驱动电路 直流电机 复位 晶振 1.3方案论证

本设计要实现风扇直流电机的温度控制,使风扇电机能根据环境温度的变化自动启停及改变转速,需要比较高的温度变化分辨率以及稳定可靠的换挡停机控制部件[1]。 1.3.1 温度传感器的选择

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

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

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

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

[1]

李学龙. 使用单片机控制的智能遥控电风扇控制器[J].电子电路制作,2003,9:13—15.

2

第 3 页

处环境温度变化过程中难以检测到小的温度变化。故该方案不适合本系统。

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

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

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

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

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

方案一:采用数模转换芯片DAC0832来控制,由单片机根据当前环境温度值输出相应数字量到DAC0832中,再由DAC0832产生相应模拟信号控制晶闸管的导通角,从而通过无级调速电路实现风扇电机转速的自动调节。

方案二:采用单片机软件编程实现PWM(脉冲宽度调制)调速的方法。PWM是英文Pulse Width Modulation的缩写,它是按一定的规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调节方式,在PWM驱动控制的调节系统中,最常用的是矩形

3

第 4 页

波PWM信号,在控制时需要调节PWM波得占空比。占空比是指高电平持续时间在一个周期时间内的百分比。在控制电机的转速时,占空比越大,转速就越快,若全为高电平,占空比为100%时,转速达到最大 [2]。用单片机I/O口输出PWM信号时,有如下三种方法:

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

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

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

对于方案一,该方案能够实现对直流风扇电机的无级调速,速度变化灵敏,但是D/A转换芯片的价格较高,与其温控状态下无级调速功能相比性价比不高。 对于方案二,相对于其他用硬件或者软硬件相结合的方法实现对电机进行调速而言,采用PWM 用纯软件的方法来实现调速过程,具有更大的灵活性,并可大大降低成本,能够充分发挥单片机的功能,对于简单速度控制系统的实现提供了一种有效的途径。综合考虑选用方案二。

[2]

蓝厚荣.单片机的PWM控制技术[J] .工业控制计算机,2010,23(3):97—98

4

第 5 页

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

系统主要器件包括DS18B20温度传感器、AT89C52单片机、五位LED共阴数码管、风扇直流电机、达林顿反向驱动器ULN2803。辅助元件包括电阻电容、晶振、电源、按键、拨码开关等。

2.1系统器件简介

2.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[3]。

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

2.1.2 达林顿反向驱动器ULN2803简介

本系统要用单片机控制风扇直流电机,需要加驱动电路,为直流电机提供足够大的驱动电流。在本系统驱动电路中,选用达林顿反向驱动器ULN2803来驱动风扇直流电机。ULN2803在使用时接口简单,操作方便,可为电机提供较大的驱动电流,它实际上是一个集成芯片,单块芯片可同时驱动8个电机。每个电机由单片机的一个I/O口控制,单片机I/O口输出的为5V的TTL信号。

[3]

郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.2009.342—344

5

第 6 页

ULN2803由8个NPN达林顿晶体管组装而成,共18个引脚,引脚1~8分别是8路驱动器的输入端,输入信号可直接是TTL或CMOS信号;引脚11~18分别是8路驱动器的输出端;引脚9为接地线,引脚10为电源输入。当输入TTL信号为5V或CMOS信号为6~15V时,输出的最大电压为50V,最大电流为500mA,工作温度范围为0~70℃。本系统选用的电机为12V直流无刷电机,可用ULN2803来驱动。 2.1.3 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对片外存储器的读写数据[4]。

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后,它们被

[4]

胡汉才.单片机原理及其接口技术[M](第2版).北京:清华大学出版社.2004.第63页.

6

第 7 页

内部上拉为高电平。它也可作为通用的I/O口使用,传送用户的输入输出数据,P3口也作为一些特殊功能端口使用,如下所示: 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(外部RAM写选通信号) P3.7:RD(外部RAM读选通信号) 图2.1.1 AT89C51单片机 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编程电源(VPP)。

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

7

第 8 页

本系统选用五个LED数码管来进行温度显示。LED又称为数码管,它主要是由8段发光二极管组成的不同组合,其中 a~g为数字和字符显示段,dp为小数点的显示,通过a~g这7个发光二极管点亮的不同组合,可以显示0~9和A~F共16个数字和字母。LED数码管可以分为共阴极和共阳极两种结构,如下图2.1.2(a)和图2.1.2(b) 所示。共阴极结构把8个发光二极管阴极连在一起,共阳极结构把8个发光二极管阳极连在一起。通过单片机引脚输出高低电平,可使数码管显示相应的数字或字母,这种使数码管显示字形的数据称字形码,又称段选码[5]。 Rx8Rx8abcdefgdpgfgndababcdef edgnddpcgdp 数码管引脚分配图 a.共阴极 图2.1.2 七段LED数码管 表2.1.1 7段LED的段选码表

b.共阳极 显示字符 共阴极段码 共阳极段码 显示字符 共阴极段码 共阳极段码 0 1 2 3 4 5 6 7 3fH 06H 5bH 4fH 66H 6dH 7dH 07H C0H F9H A4H B0H 99H 92H 82H F8H 8 9 A B C D E F 7fH 6fH 77H 7fH 39H 3fH 79H 71H 80H 90H 88H 83H C6H A1H 86H 8EH 一个共阴极数码管接至单片机的电路,要想显示数字“7”须a、b、c这3个显示段发光 (即这3个字段为高电平)只要在P0口输入00000111(07H)即可。这里07H即为数字7的段选码。字形与段选码的关系见表2.1.1所示。

2.2 各部分电路设计

[5]

胡全.51单片机的数码管动态显示技术[J] .信息技术,2009,13:25—26

8

第 9 页

2.2.1 开关复位与晶振电路

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

图2.2.1 系统复位与晶振电路

2.2.2 独立键盘连接电路

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

9

第 10 页

图2.2.2 独立键盘连接电路

2.2.3 数码管显示电路

本设计制作中选用5位共阴极数码管作为显示模块,它和单片机硬件的接口如图

2.2.3所示。其中前3位数码管DS1、DS2、DS3用于显示温度传感器实时检测采集到的温度,可精确到0.1摄氏度,显示范围为0~99.9摄氏度;后2位数码管DS4、DS5用于显示系统设置的初值温度,只能显示整数的温度值,显示范围为0~99摄氏度。5位数码管的段选a、b、c、d、e、f、g、dp线分别与单片机的P0.0~P0.7口连接,其中P0口需接一10K的上拉电阻,以使单片机的P0口能够输出高低电平。5位数码管的位选W1~W5分别与单片机的P2.0~P2.4口相连接,只要P2.0~P2.4中任一位中输出低电平,则选中与该位相连的数码管。

10

第 11 页

图2.2.3 数码管显示电路

2.2.4 温度采集电路

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

DS18B20在使用时,一般都采用单片机来实现数据采集。只须将DS18B20信号线

[6]

李钢,赵彦峰.1-Wire总线数字温度传感器DSI8B20原理及应用[J].现代电子技术,2005,28(21):77—79.

11

第 12 页

与单片机1位I/O线相连,且单片机的1位I/O线可挂接多个DS18B20,就可实现单点或多点温度检测[7]。在本设计中将DS18B20接在P1.7口实现温度的采集。其与单片机的连接如图2.2.4。

图2.2.4 温度采集电路

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

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

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

电路如图2.2.5所示,风扇电机的一端接12V电源,另一端接ULN2803的OUT7

[7]

马云峰.单片机与数字温度传感器DS18B20的接口设计[J].计算机测量与控制,2007,10(4):278—280. [8]

王会明,侯加林. 智能电风扇控制器的研制[J]. 电子与自动化,1998,5(4):25—26.

12

第 13 页

引脚,ULN2803的IN7引脚与单片机的P3.1引脚相连,通过控制单片机的P3.1引脚输出PWM信号,由此控制风扇直流电机的速度与启停。

图2.2.5 风扇电机驱动与调速电

系统选用的风扇电机为12V直流无刷电机,单达林顿反向驱动器ULN2803输入

TTL信号为5V或CMOS信号为6~15V时,输出的最大电压为50V,最大电流为500mA,工作温度范围为0~70℃。本系统中单片机I/O口输出的TTL信号为5V,因此此风扇电机可以用ULN2803来驱动。

13

第 14 页

第三章 软件设计

3.1 程序设置

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

主程序流程图如图3.1.1: 调用温度读 取函数 图3.1.1 主程序流程图 结束 调用DS18B20 温度转换函数 调用风扇电 机控制函数 调用DS18B20 初始化函数 调用温度处 理函数 程序初始化 调用数码管 显示函数 主程序开始 调用键盘扫 描函数 3.2 用Keil C51编写程序 14

第 15 页

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

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

Keil C51的使用界面如图3.2.1。

图3.2.1 Keil C51的使用界面

3.3 用Proteus进行仿真

3.3.1 Proteus简介

[9]

谭浩强.C程序设计[M](第三版).北京:清华大学出版社.2005.37—65.

15

第 16 页

Proteus软件是来自英国Labcenter electronics公司的EDA工具软件。

Proteus软件有十多年的历史,在全球广泛使用,它不仅和其它EDA工具一样有原理布图、PCB自动或人工布线及电路仿真的功能,而且更重要的功能是,他的电路仿真是互动的,可以根据仿真实时观察到得现象验证设计的正确性及准确性并及时改变程序代码、原理图连接以及元件属性等。它还能配合系统配置的虚拟仪器来显示和输出,如示波器、逻辑分析仪等[10],效果很好。

Proteus有4个功能模块:智能原理图设计、完善的电路仿真功能、独特的单片机协同仿真功能以及实用的PCB设计平台。其内部元件库含有丰富的元件,支持总线结构以及智能化的连线功能;支持主流CPU(如ARM、8051/52、AVR)及其通用外设模型的实时仿真等,为单片机的开发应用等带来极大的便利。

软件使用的主界面如图3.3.1。

图3.3.1 Proteus使用界面

3.3.2 本设计基于Proteus的仿真

首先启动Proteus软件并建立一工程,然后根据原理图调出相应的原件,再根据要

[10]

孙号.Proteus软件在设计电子电路中的应用[J] .仪表技术,2009,8:74—75

16

第 22 页

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

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

4.2 硬件调试

4.2.1 按键显示部分的调试

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

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

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

将DS18B20芯片接在系统板对应的P3.1口,通过插针在对应系统板的右下侧三口即为对应的VCC、P3.1和GND,可将芯片直接插在该插针上,因此即为方便。系统调试中为验证DS18B20是否能在系统板上工作,将手心靠拢或者捏住芯片,即可发现LED显示的前两位温度也迅速升高,验证了DS18B20能在系统板上工作。由于DS18B20为3个引脚,因此在调试过程中因注意其各个引脚的对应位置,以免将其接反而是芯片不能工作甚至烧毁芯片。 4.2.3 电动机调速电路部分调试

系统本部分的设计中重在软件设计,因为外围的驱动电路只是将送来的PWM信号

22

第 23 页

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

4.3 系统功能

4.3.1 系统实现的功能

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

系统总体上由五部分来组成,既按键与复位电路、数码管显示电路、温度检测电

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

23

第 24 页

结 论

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

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

24

第 25 页

参考文献

[1] 李学龙.使用单片机控制的智能遥控电风扇控制器[J].电子电路制作,2003,9:13—15. [2] 蓝厚荣.单片机的PWM控制技术[J].工业控制计算机.2010,23(3):97—98

[3] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.2009.342—344

[4] 胡汉才.单片机原理及其接口技术[M](第2版).北京:清华大学出版社.2004.49—77. [5] 胡全. 51单片机的数码管动态显示技术[J] .信息技术,2009,13:25—26

[6] 李钢,赵彦峰.1-Wire总线数字温度传感器DSI8B20原理及应用[J].现代电子技术,2005,28(21):77—79.

[7] 马云峰.单片机与数字温度传感器DS18B20的接口设计[J].计算机测量与控制,2007,10(4):278—280.

[8] 王会明,侯加林.智能电风扇控制器的研制[J].电子与自动化,1998,5(4):25—26. [9] 谭浩强.C程序设计[M](第三版).北京:清华大学出版社.2005.37—65. [10] 孙号. Proteus软件在设计电子电路中的应用[J].仪表技术,2009,8:74—75

[11] 楼俊军.基于Proteus和Keil的单片机演奏乐曲的实现[J] .科技信息,2010,23:第50页 [12] 王文海,周欢喜.用Proteus实现51单片机的动态仿真调试[J].IT技术,2006,20:10—11 [13] 丁建军,陈定方,周国柱. 基于AT89C51的智能电风扇控制系统[J].湖北工学院学报,

2003,18(2):60—63.

[14] 王会明,侯加林. 智能电风扇控制器的研制[J]. 电子与自动化,1998,5(4):25—26. [15] 刘进山. 基于MCS-51电风扇智能调速器的设计[J]. 广州:电子质量,2004,10(10):71. [16] YU Qihao,CHENG Guodong,NIU Fujun. The application of auto-temperature-controlled ventilation

embankment in Qinghai--Tibet Railway [J]. Science in China Ser.D Earth Sciences,2004,1(47):168—176.

[17] YLai,Y,Wang. Three—dimensional nonlinear analysis for temperature characteristic of ventilated

embankment in permafrost regions [J]. Cold Regions Science and Technology,2004,38(2):165—184.

[18] Cheng Guodong. Linearity engineering in permafrost areas [J]. Journal of Glaciology and

Geocryology(in Chinese),2001,23(3):213—217. [19] B Schneier.Applied Crytography:Algorithms,and Source Code in C[J].New York:Jone Wiley&

Sons. 1994.301—307. [20] Intel: Benjamin Jun,Paul Kocher.The lntel Random Number Generator[J].White Paper Prepared for

lntel Corporation,April 22,l999:4—5.

25

第 26 页

致 谢

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

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

最后,感谢我的爸爸妈妈。焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。

26

第 27 页

附录1:电路总图

附图1 电路总图

27

第 28 页

附录2:程序代码

#include

#define uchar unsigned char #define uint unsigned int sbit DQ=P1^7; sbit key1=P1^3; sbit key2=P1^4; sbit dianji=P3^1; float ff; uint y3;

uchar shi,ge,xiaoshu,sheding=20,gaonum,dinum; uchar code dispcode[]={ //段码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

uchar code tablel[]={ //带小数点的段码 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd, 0x87,0xff,0xef};

uchar dispbitcode[]={ //位选 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};

uchar dispbuf[8]={0,0,0,0,0,0,0,0}; void Delay(uint num)// 延时函数 { while( --num ); }

void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0) { dispbuf[0]=a0; dispbuf[1]=a1; dispbuf[2]=a2; dispbuf[3]=a3; dispbuf[4]=a4; P2=0xff; P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; Delay(1);

28

第 29 页

P2=0xff; P0=dispcode[dispbuf[1]]; P2=dispbitcode[4]; Delay(1); P2=0xff; P0=dispcode[dispbuf[2]]; P2=dispbitcode[2]; Delay(1); P2=0xff; P0=tablel[dispbuf[3]]; P2=dispbitcode[1]; Delay(1); P2=0xff; P0=dispcode[dispbuf[4]]; P2=dispbitcode[0]; Delay(1); }

void dmsec(uint count) { uint i; // 1ms延时 while(count--) { for(i=0;i<125;i++){} } }

void tmreset(void) { DQ=0; Delay(90); // 精确延时 大于 480us DQ=1; Delay(4); // 90,4 可以小范围变化 }

void tmpre(void)

{ while(DQ); while(~DQ); Delay(4); }

29

第 30 页

bit tmrbit(void)

{ uint i; bit dat; DQ=0; i++; // i++;大概1us DQ=1; i++; i++; dat=DQ; Delay(8); return(dat); }

uchar tmrbyte(void) //读一个比特 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmrbit(); dat=(j<<7)|(dat>>1); } return(dat); }

void tmwbyte(uchar dat) //写一个比特 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; // 从低位开始 if(testb) // Write 1 { DQ=0; // 先拉低 i++; i++; // >1us DQ=1; Delay(4); } else // Write 0

30

第 31 页

{ DQ=0; Delay(4); DQ=1; i++; i++; // 再拉高 } } }

void tmstart(void) //ds1820开始转换 { dmsec(1); tmreset(); tmpre(); dmsec(1);

tmwbyte(0xcc); // skip rom tmwbyte(0x44); // 转换 }

uchar tmrtemp(void) //读取温度 { uchar a,b; tmreset(); tmpre(); dmsec(1); tmwbyte(0xcc); // skip rom tmwbyte(0xbe); // 转换 a=tmrbyte(); // LSB低8位 b=tmrbyte(); // MSB高8位 y3=b; y3<<=8; y3=y3|a; ff=y3*0.0625; y3=ff*10+0.5; return(y3); }

void keyscan(void) { if(key1==0) { dmsec(5); if(key1==0) { sheding++; if(sheding==100)

31

第 32 页

sheding=20; } while(!key1); } else if(key2==0) { dmsec(5); if(key2==0) { sheding--; if(sheding==0) sheding=20; } while(!key2); } }

void deal(uint tmp) //温度处理 { if(tmp<=sheding) { gaonum=0; dinum=4; } else if((tmp>sheding)&&(tmp<=(sheding+5))) { gaonum=1; dinum=3; } else if((tmp>(sheding+5))&&(tmp<=(sheding+10))) { gaonum=2; dinum=2; } else if((tmp>(sheding+10))&&(tmp<=(sheding+15))) { gaonum=3; dinum=1; } else { gaonum=4; dinum=0; } }

32

第 33 页

void dianjik() //电机控制 {

uchar q,i;

for(q=0;q

dianji=0;

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); for(i=255;i>0;i--) {

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); } }

for(q=0;q

dianji=1;

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); for(i=255;i>0;i--) {

digitalshow(shi,ge,xiaoshu,sheding/10,sheding); } } }

void main(void) { uint last; dianji=0; tmstart(); dmsec(450); // 初始化ds18b20 while(1) { tmstart(); // ds1820开始转换 dmsec(2); last=tmrtemp()+256; // 读取温度 shi=last/100; ge=(last0)/10; xiaoshu=(last0); keyscan(); dmsec(2); deal(last/10); dianjik(); } }

33

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

Top