• 650.50 KB
  • 2022-04-22 11:30:45 发布

本科毕业论文基于单片机的温控风扇的设计.doc

  • 38页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'~摘要本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统AT89C52单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值保存在温度传感器DS18B20内部中,掉电后仍然能保存上次设定值,性能稳定,控制准确。关键词:自动控制;单片机;温控Ⅰ AbstractThisdesignisakindoftemperaturecontrolfansystem,hasthesensitivetemperaturesensoranddisplayfunction,systemAT89C52monolithicascontrolplatformtocontrolthefanspeed.Highandlowtemperaturecanbesetbytheuser,themeasuredtemperaturevaluebetweenhighandlowtemperatureopenthefanwhenthewindshield,whentemperatureexceedsthesettemperatureautomaticallyswitchtothewind,whenthetemperatureislessthanthesettemperatureautomaticallyshutdownthefan,controlstatevarieswithtemperature.SethighandlowtemperaturevaluesstoredininternaltemperaturesensorDS18B20E2ROM,afterpoweroffcanstillbesavedthesetvalue,stableperformanceandaccuratecontrol.Keywords:Automaticcontrol;Singlechipmicrocomputer;TemperaturecontrolⅡ 目录第一章整体方案设计21.1前言21.2系统整体设计21.3方案论证31.3.1温度传感器的选择31.3.2控制核心的选择41.3.3显示电路的选择41.3.4调速方式的选择5第二章各单元模块的硬件设计72.1系统器件简介72.1.1DS18B20单线数字温度传感器简介72.1.2达林顿反向驱动器ULN2803简介72.1.3AT89C52单片机简介82.1.4LED数码管简介102.2各部分电路设计112.2.1开关复位与晶振电路112.2.3数码管显示电路122.2.4温度采集电路132.2.5风扇电机驱动与调速电路15第三章软件设计173.1程序设置173.2用KeilC51编写程序173.3用Proteus进行仿真183.3.1Proteus简介183.3.2本设计基于Proteus的仿真19第四章系统调试244.1软件调试244.1.1按键显示部分的调试244.1.2传感器DS18B20温度采集部分调试244.1.3电动机调速电路部分调试244.2硬件调试254.2.1按键显示部分的调试254.2.2传感器DS18B20温度采集部分调试254.2.3电动机调速电路部分调试254.3系统功能264.3.1系统实现的功能264.3.2系统功能分析26结论27参考文献28附录1:电路总图30附录2:程序代码3136 第一章整体方案设计1.1前言在现代社会中,风扇被广泛的应用,发挥着举足轻重的作用,如夏天人们用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。而随着温度控制技术的发展,为了降低风扇运转时的噪音以及节省能源等,温控风扇越来越受到重视并被广泛的应用。在现阶段,温控风扇的设计已经有了一定的成效,可以使风扇根据环境温度的变化进行自动无级调速,当温度升高到一定时能自动启动风扇,当温度降到一定时能自动停止风扇的转动,实现智能控制。随着单片机在各个领域的广泛应用,许多用单片机作控制的温度控制系统也应运而生,如基于单片机的温控风扇系统。它使风扇根据环境温度的变化实现自动启停,使风扇转速随着环境温度的变化而变化,实现了风扇的智能控制。它的设计为现代社会人们的生活以及生产带来了诸多便利,在提高人们的生活质量、生产效率的同时还能节省风扇运转所需的能量。本文设计了由ATMEL公司的8052系列单片机AT89C52作为控制器,采用DALLAS公司的温度传感器DS18B20作为温度采集元件,并通过一个达林顿反向驱动器ULN2803驱动风扇电机的转动。同时使系统检测到得环境温度以及系统预设的温度动态的显示在LED数码管上。根据系统检测到得环境温度与系统预设温度的比较,实现风扇电机的自动启停以及转速的自动调节。1.2系统整体设计本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LED数码管上显示当前环境温度值以及预设温度值。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。同时采用PWM脉宽调制方式来改变直流风扇电机的转速。并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。系统结构框图如图1:36 温度显示DS18B20AT89C52复位晶振独立键盘PWM驱动电路直流电机图1系统构成框图1.3方案论证本设计要实现风扇直流电机的温度控制,使风扇电机能根据环境温度的变化自动启停及改变转速,需要比较高的温度变化分辨率以及稳定可靠的换挡停机控制部件[1]李学龙.使用单片机控制的智能遥控电风扇控制器[J].电子电路制作,2003,9:13—15.。1.3.1温度传感器的选择在本设计中,温度传感器的选择有以下三种方案:方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用AD转换芯片ADC0809将模拟信号转化为数字信号输入单片机处理。方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。方案三:采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号供单片机处理。对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适合本系统。36 对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从-50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。对于方案三,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转换等电路的误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-WRIE),与单片机的接口变的非常简洁,抗干扰能力强,因此该方案适用于本系统。1.3.2控制核心的选择方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,由集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将风扇切换到相应档位。方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制信号。对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。对于方案二,以单片机作为控制器,通过软件编程的方法进行温度检测和判断,并在其I/O口输出控制信号。AT89C52单片机工作电压低,性能高,片内含8k字节的只读程序存储器ROM和256字节的随机数据存储器RAM,它兼容标准的MCS-51指令系统,单片价格也不贵,适合本设计系统。1.3.3显示电路的选择方案一:应用动态扫描的方式,采用LED共阴极数码管显示温度。方案二:采用LCD液晶显示屏显示温度。对于方案一,该方案成本很低,显示温度明确醒目,即使在黑暗空间也能清楚看见,功耗极低,同时温度显示程序的编写也相对简单,因而这种显示方式得到了广泛应用。但不足的地方是它采用动态扫描的显示方式,各个LED数码管是逐个点亮的,因此会产生闪烁,但由于人眼的视觉暂留时间为20MS,故当数码管扫描周期小于这个时间时人眼不会感觉到闪烁,因此只要描频率设置得当即可采用该方案。36 对于方案二,液晶显示屏具有显示字符优美,其不仅能显示数字还能显示字符甚至图形,这是LED数码管无法比拟的。但是液晶显示模块的元件价格昂贵,显示驱动程序的编写也较复杂,从简单实用的原则考虑,本系统采用方案一。1.3.4调速方式的选择方案一:采用数模转换芯片DAC0832来控制,由单片机根据当前环境温度值输出相应数字量到DAC0832中,再由DAC0832产生相应模拟信号控制晶闸管的导通角,从而通过无级调速电路实现风扇电机转速的自动调节。方案二:采用变压器调节方式,运用电磁感应原理将220V电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电机的转速,从而控制风扇风力大小。方案三:采用单片机软件编程实现PWM(脉冲宽度调制)调速的方法。PWM是英文PulseWidthModulation的缩写,它是按一定的规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调节方式,在PWM驱动控制的调节系统中,最常用的是矩形波PWM信号,在控制时需要调节PWM波得占空比。占空比是指高电平持续时间在一个周期时间内的百分比。在控制电机的转速时,占空比越大,转速就越快,若全为高电平,占空比为100%时,转速达到最大[2]蓝厚荣.单片机的PWM控制技术[J].工业控制计算机,2010,23(3):97—982]。用单片机I/O口输出PWM信号时,有如下三种方法:(1)利用软件延时。当高电平延时时间到时,对I/O口电平取反,使其变成低电平,然后再延时一定时间;当低电平延时时间到时,再对该I/O口电平取反,如此循环即可得到PWM信号。在本设计中应用了此方法。(2)利用定时器。控制方法与(1)相同,只是在该方法中利用单片机的定时器来定时进行高低电平的转变,而不是用软件延时。应用此方法时编程相对复杂。(3)利用单片机自带的PWM控制器。在STC12系列单片机中自身带有PWM控制器,但本系统所用到得AT89系列单片机无此功能。对于方案一,该方案能够实现对直流风扇电机的无级调速,速度变化灵敏,但是D/A转换芯片的价格较高,与其温控状态下无级调速功能相比性价比不高。对于方案二,由于采用变压器改变电压调节,有风速级别限制,不能适应人性化要求。且在变压过程中会有损耗发热,效率不高,发热有不安全因素。36 对于方案三,相对于其他用硬件或者软硬件相结合的方法实现对电机进行调速而言,采用PWM用纯软件的方法来实现调速过程,具有更大的灵活性,并可大大降低成本,能够充分发挥单片机的功能,对于简单速度控制系统的实现提供了一种有效的途径。综合考虑选用方案三。36 第二章各单元模块的硬件设计系统主要器件包括DS18B20温度传感器、AT89C52单片机、五位LED共阴数码管、风扇直流电机、达林顿反向驱动器ULN2803。辅助元件包括电阻电容、晶振、电源、按键、拨码开关等。2.1系统器件简介2.1.1DS18B20单线数字温度传感器简介DS18B20单线数字温度传感器是Dallas半导体公司开发的世界上第一片支持“一线总线”接口的温度传感器。它具有3引脚TO-92小体积封装形式。温度测量范围为-55℃——+125℃,可编程为9位——12位A/D转换精度,测温分辨率可达0.0625℃。被测温度用符号扩展的16位数字量方式串行输出。工作电压支持3V——5.5V的电压范围,既可在远端引入,也可采用寄生电源方式产生。DS18B20还支持“一线总线”接口,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。它还有存储用户定义报警温度等功能。DS18B20内部结构如图2所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。其管脚排列如图3所示,DQ为数字信号端,GND为电源地,VDD为电源输入端。图2DS18B20内部结构2.1.2达林顿反向驱动器ULN2803简介本系统要用单片机控制风扇直流电机,需要加驱动电路,为直流电机提供足够大的驱动电流。在本系统驱动电路中,选用达林顿反向驱动器ULN280336 来驱动风扇直流电机。ULN2803在使用时接口简单,操作方便,可为电机提供较大的驱动电流,它实际上是一个集成芯片,单块芯片可同时驱动8个电机。每个电机由单片机的一个I/O口控制,单片机I/O口输出的为5V的TTL信号。图3DS18B20外形及管脚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.3AT89C52单片机简介AT89C52是一种带8K字节闪存可编程可擦除只读存储器(FPEROM)256B片内RAM的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C52单片机管脚如图4所示。各管脚功能:VCC:供电电压。GND:接地。36 图4AT89C52单片机管脚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:36 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编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.1.4LED数码管简介本系统选用五个LED数码管来进行温度显示。LED又称为数码管,它主要是由8段发光二极管组成的不同组合,其中a~g为数字和字符显示段,dp为小数点的显示,通过a~g这7个发光二极管点亮的不同组合,可以显示0~9和A~F共16个数字和字母。LED数码管可以分为共阴极和共阳极两种结构,如下图5(a)和图5(b)所示。共阴极结构把8个发光二极管阴极连在一起,共阳极结构把8个发光二极管阳极连在一起。通过单片机引脚输出高低电平,可使数码管显示相应的数字或字母,这种使数码管显示字形的数据称字形码,又称段选码[5]胡全.51单片机的数码管动态显示技术[J].信息技术,2009,13:25—265]。一个共阴极数码管接至单片机的电路,要想显示数字“7”须a、b、c这3个显示段发光(即这3个字段为高电平)只要在P0口输入00000111(07H)即可。这里07H即为数字7的段选码。字形与段选码的关系见表1所示。36 数码管引脚分配图a.共阴极b.共阳极图5七段LED数码管表17段LED的段选码表显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03fHC0H87fH80H106HF9H96fH90H25bHA4HA77H88H34fHB0HB7fH83H466H99HC39HC6H56dH92HD3fHA1H67dH82HE79H86H707HF8HF71H8EH2.2各部分电路设计2.2.1开关复位与晶振电路在单片机应用系统中,除单片机本身需要复位以外,外部扩展I/O接口电路也需要复位,因此需要一个包括上电和按钮复位在内的系统同步复位电路。单片机上的XTAL1和XTAL2用来外接石英晶体和微调电容,即用来连接单片机片内OSC的定时反馈回路。本设计中开关复位与晶振电路如图6所示,当按下按键开关S1时,系统复位一次。其中电容C1、C2为20pF,C3为10uF,电阻R2、R3为10k,晶振为11.0592MHz。36 图6系统复位与晶振电路2.2.3数码管显示电路本设计制作中选用5位共阴极数码管作为显示模块,它和单片机硬件的接口如图8所示。其中前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中任一位中输出低电平,则选中与该位相连的数码管。36 图7独立键盘连接电路2.2.4温度采集电路DS18B20数字温度传感器通过其内部计数时钟周期来的作用,实现了特有的温度测量功能。低温系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数,计数器预先置有与-55℃相对应的一个基权值。如果计数器计数到0时,高温度系数振荡周期还未结束,则表示测量的温度值高于-55℃,被预置在-55℃的温度寄存器中的值就增加1℃,然后这个过程不断重复,直到高温度系数振荡周期结束为止。此时温度寄存器中的值即为被测温度值,这个值以16位二进制形式存放在存储器中,通过主机发送存储器读命令可读出此温度值,读取时低位在前,高位在后,依次进行。由于温度振荡器的抛物线特性的影响,其内用斜率累加器进行补偿[6]李钢,赵彦峰.1-Wire总线数字温度传感器DSI8B20原理及应用[J].现代电子技术,2005,28(21):77—79.6]。DS18B20在使用时,一般都采用单片机来实现数据采集。只须将DS18B20信号线与单片机1位I/O线相连,且单片机的1位I/O线可挂接多个DS18B20,就可实现单点或多点温度检测[7]马云峰.单片机与数字温度传感器DS18B20的接口设计[J].计算机测量与控制,2007,10(4):278—280.36 。在本设计中将DS18B20接在P1.7口实现温度的采集。其与单片机的连接如图9所示。图8数码管显示电路36 图9温度采集电路2.2.5风扇电机驱动与调速电路本设计中由单片机的I/O口输出PWM脉冲,通过一个达林顿反向驱动器ULN2803驱动12V直流无刷风扇电机以及实现风扇电机速度的调节。键盘控制设置温度,通过软件向单片机输入相应控制指令,由单片机通过P1.7口输出与转速相应的PWM脉冲,经过ULN2803驱动风扇直流电机控制电路,实现电机转速与启停的自动控制[8]王会明,侯加林.智能电风扇控制器的研制[J].电子与自动化,1998,5(4):25—26.。当环境温度升高时,直流电机的转速会相应按照设定的等级有所提高;当环境温度下降时,电机的转速会相应的下降;当环境温度低于设置温度时,电机停止转动,而环境温度又高于预设温度时,电机重新启动。电路如图10所示,风扇电机的一端接12V电源,另一端接ULN2803的OUT7引脚,ULN2803的IN7引脚与单片机的P3.1引脚相连,通过控制单片机的P3.1引脚输出PWM信号,由此控制风扇直流电机的速度与启停。系统选用的风扇电机为12V直流无刷电机,单达林顿反向驱动器ULN2803输入TTL信号为5V或CMOS信号为636 ~15V时,输出的最大电压为50V,最大电流为500mA,工作温度范围为0~70℃。本系统中单片机I/O口输出的TTL信号为5V,因此此风扇电机可以用ULN2803来驱动。图10风扇电机驱动与调速电36 第三章软件设计3.1程序设置程序设计部分主要包括主程序、DS18B20初始化函数、DS18B20温度转换函数、温度读取函数、键盘扫描函数、数码管显示函数、温度处理函数以及风扇电机控制函数。DS18B20初始化函数完成对DS18B20的初始化;DS18B20温度转换函数完成对环境温度的实时采集;温度读取函数完成主机对温度传感器数据的读取及数据换算,键盘扫描函数则根据需要完成初值的加减设定;温度处理函数对采集到的温度进行分析出理,为电机转速的变化提供条件;风扇电机控制函数则根据温度的数值完成对电机转速及启停的控制。主程序流程图如图11:主程序开始程序初始化调用DS18B20初始化函数调用DS18B20温度转换函数调用温度读取函数调用键盘扫描函数调用数码管显示函数调用温度处理函数调用风扇电机控制函数结束图11主程序流程图3.2用KeilC51编写程序KeilC51是美国KeilSoftware公司开发的51系列兼容单片机C36 语言的软件开发系统,与单片机汇编语言相比,C语言在不仅语句简单灵活,而且编写的函数模块可移植性强[9]谭浩强.C程序设计[M](第三版).北京:清华大学出版社.2005.37—65.,因而易学易用,效率高。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前使用较多的MCS-51系列单片机开发的软件。KeilC51软件不仅提供了丰富的库函数,而且它强大的集成开发调试工具为程序编辑调试带来便利,在开发大型软件时更能体现高级语言的优势。在使用时要先建立一个工程,然后添加文件并编写程序,编写好后再编辑调试。KeilC51的使用界面如图12。图12KeilC51的使用界面3.3用Proteus进行仿真3.3.1Proteus简介36 Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件。Proteus软件有十多年的历史,在全球广泛使用,它不仅和其它EDA工具一样有原理布图、PCB自动或人工布线及电路仿真的功能,而且更重要的功能是,他的电路仿真是互动的,可以根据仿真实时观察到得现象验证设计的正确性及准确性并及时改变程序代码、原理图连接以及元件属性等。它还能配合系统配置的虚拟仪器来显示和输出,如示波器、逻辑分析仪等[10]孙号.Proteus软件在设计电子电路中的应用[J].仪表技术,2009,8:74—75,效果很好。Proteus有4个功能模块:智能原理图设计、完善的电路仿真功能、独特的单片机协同仿真功能以及实用的PCB设计平台。其内部元件库含有丰富的元件,支持总线结构以及智能化的连线功能;支持主流CPU(如ARM、8051/52、AVR)及其通用外设模型的实时仿真等,为单片机的开发应用等带来极大的便利。软件使用的主界面如图13。图13Proteus使用界面3.3.2本设计基于Proteus的仿真首先启动Proteus36 软件并建立一工程,然后根据原理图调出相应的原件,再根据要求改变各原件的属性并把各个原件按原理图连接起来。在原理图绘制连接好后再把编译好的程序加载到其中[11]楼俊军.基于Proteus和Keil的单片机演奏乐曲的实现[J].科技信息,2010,23:第50页。最后根据系统要实现的功能分步进行仿真[12]王文海,周欢喜.用Proteus实现51单片机的动态仿真调试[J].IT技术,2006,20:10—11。把温度传感器DS18B20温度设置为26.4摄氏度,用键盘S2调节系统预设的温度为22摄氏度。点击开始按钮,系统开始仿真,待一段时间稳定后,观察到此时风扇直流电机的转速为+14.2r/s,如图14所示。图14Proteus仿真效果图一36 当把温度传感器DS18B20温度设置为28.4摄氏度,用键盘S2调节系统预设的温度为22摄氏度。点击开始按钮,系统开始仿真,待一段时间稳定后,观察到此时直流风扇电机的转速为+23.3r/s,如图15所示。图15Proteus仿真效果图二当把温度传感器DS18B20温度设置为33.4摄氏度,用键盘S2调节系统预设的温度为22摄氏度。点击开始按钮,系统开始仿真,待一段时间稳定后,观察到此时直流风扇电机的转速为+32.0r/s,如图16所示。36 图16Proteus仿真效果图三在上一步仿真的基础上(温度传感器DS18B20温度设置为33.4摄氏度,系统预设的温度为22摄氏度),用键盘S2调节系统预设温度至34摄氏度,此时可知系统预设温度大于温度传感器检测到的温度,观察到直流风扇电机的转速逐渐变慢,最后转速变为0,符合系统要实现的功能,如图17所示。36 图17Proteus仿真效果图四通过以上仿真可以看出,直流风扇电机在系统设定温度一定的情况下,其转速随着环境温度(温度传感器检测到的温度)的增加而增大。当环境温度低于系统预设的温度时,风扇自动停止运转,实现了系统所设计的功能。当然,在此没有实现风扇直流电机的无级调速,本系统实现的是电机在随环境温度变化的四个等级的速度变化,环境温度在一定小范围内变化风扇电机转速是不变的,只有超过了设定的某一界限时转速才会变化。36 第四章系统调试4.1软件调试4.1.1按键显示部分的调试起初根据设计编写的系统程序:程序的键盘接口采用P1口,数码管显示采用P0口控制LED的断码,P2口控制LED的位码,从而实现键盘功能及数码管的显示。经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵,当按下键时,显示并不变化。经过查找分析,发现键盘扫描程序没有没有按键消抖部分,按键在按下与松手时,都会有一定程度的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不能工作。因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测键盘是否真的按下或已完全松手。数码管不能正确的显示,主要是因为所以数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能正确识别段码。应在系统中加入锁存器,或是在程序中设定存储段码的空间。在键盘加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按键也能够工作,达到了较好的效果。4.1.2传感器DS18B20温度采集部分调试由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的简便,小体积、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用P3.1口为数字温度输入口,但是需要对输入的数字信号进行处理后才能显示,从而多了温度转换程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。在温度转换程序中,为了能够正确的检测并显示温度的小数位,程序中把检测的温度与10相乘后,再按一个三位的整数来处理。如把24.5变为245来处理,这样为程序的编写带来了方便。4.1.3电动机调速电路部分调试在本设计中,采用了达林顿反向驱动器ULN280336 驱动直流电机,其可驱动八个直流电机,本系统仅驱动一个。软件设置了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电动机调速电路部分调试36 系统本部分的设计中重在软件设计,因为外围的驱动电路只是将送来的PWM信号放大从而驱动电机转动。系统软件设置在P3.1口输出使电机转动的PWM占空比,当环境温度高于设置温度时,电机开始转动,若此时用高于环境温度的热源靠近测温芯片DS18B20时,发现电机的转速在升高,并越来越快,当达到一定值时,发现电机的转速不再升高;将热源离开测温芯片DS18B20时,发现电机的转速开始下降,转速达到一定值时,若将设置温度升高到环境温度以上,发现电机又停止了转动。系统采用的直流电机为12V的额定电压,而该驱动电路在采用单片机电源时的输出电压最高不过5V,因此在调试过程中只采用了原有的5V直流电机来调试,且得到了可观的控制效果。4.3系统功能4.3.1系统实现的功能本系统能够实现单片机系统检测环境温度的变化,然后根据环境温度变化来控制风扇直流电机输入占空比的变化,从而产生不同的转动速度,亦可根据键盘调节不同的设置温度,再由环境温度与设置温度的差值来控制电机。当环境温度低于设置温度时,电机停止转动;当环境温度高于设置温度时,单片机对应输出口输出不同占空比的PWM信号,控制电机开始转动,并随着环境温度与设置温度的差值的增加电机的转速逐渐升高。系统还能动态的显示当前温度和设置温度,并能通过键盘调节当前的设置温度。4.3.2系统功能分析系统总体上由五部分来组成,既按键与复位电路、数码管显示电路、温度检测电路、电机驱动电路。首先考滤的是温度检测电路,该部分是整个系统的首要部分,首先要检测到环境温度,才能用单片机来判断温度的高低,然后通过单片机控制直流风扇电机的转速;其次是电机驱动电路,该部分需要使用外围电路将单片机输出的PWM信号转化为平均电压输出,根据不同的PWM波形得到不同的平均电压,从而控制电机的转速,电路的设计中采用了达林顿反向驱动器ULN2803,实现较好的控制效果;再次是数码管的动态显示电路,该部分的功能实现对环境温度和设置温度的显示,其中DS18B20采集环境温度,按键实现不同设置温度的调整,实现了对环境温度和设置温度的及时连续显示。36 结论本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过两个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。实现了基于单片机的温控风扇的设计。本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。综上所述,该系统的设计和研究在社会生产和生活中具有重要地位。36 参考文献[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]YUQihao,CHENGGuodong,NIUFujun.Theapplicationofauto-temperature-controlledventilationembankmentinQinghai--TibetRailway[J].ScienceinChinaSer.DEarthSciences,2004,1(47):168—176.[17]YLai,Y,Wang.Three—dimensionalnonlinearanalysisfortemperaturecharacteristicofventilatedembankmentinpermafrostregions[J].ColdRegionsScienceandTechnology,2004,38(2):165—184.[18]ChengGuodong.Linearityengineeringinpermafrostareas[J].JournalofGlaciologyandGeocryology(inChinese),2001,23(3):213—217.[19]BSchneier.AppliedCrytography:Algorithms,andSourceCodeinC[J].NewYork:JoneWiley&Sons.1994.301—307.[20]Intel:BenjaminJun,PaulKocher.ThelntelRandomNumberGenerator[J].WhitePaperPreparedforlntelCorporation,April22,l999:4—5.36 附录1:电路总图附图1电路总图36 附录2:程序代码#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^7;sbitkey1=P1^3;sbitkey2=P1^4;sbitdianji=P3^1;sbitSPK=P3^0;floatff;uinty3;ucharshi,ge,xiaoshu,sheding=20,gaonum,dinum;ucharcodedispcode[]={//段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcodetablel[]={//带小数点的段码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};uchardispbitcode[]={//位选0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchardispbuf[8]={0,0,0,0,0,0,0,0};voidDelay(uintnum)//延时函数{while(--num);}voiddigitalshow(uchara4,uchara3,uchara2,uchara1,uchara0){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);P2=0xff;36 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);}voiddmsec(uintcount){uinti;//1ms延时while(count--){for(i=0;i<125;i++){}}}voidtmreset(void){DQ=0;Delay(90);//精确延时大于480usDQ=1;Delay(4);//90,4可以小范围变化}voidtmpre(void){while(DQ);while(~DQ);Delay(4);}bittmrbit(void)36 {uinti;bitdat;DQ=0;i++;//i++;大概1usDQ=1;i++;i++;dat=DQ;Delay(8);return(dat);}uchartmrbyte(void)//读一个比特{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tmrbit();dat=(j<<7)|(dat>>1);}return(dat);}voidtmwbyte(uchardat)//写一个比特{uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;//从低位开始if(testb)//Write1{DQ=0;//先拉低i++;i++;//>1usDQ=1;Delay(4);}else//Write0{36 DQ=0;Delay(4);DQ=1;i++;i++;//再拉高}}}voidtmstart(void)//ds1820开始转换{dmsec(1);tmreset();tmpre();dmsec(1);tmwbyte(0xcc);//skipromtmwbyte(0x44);//转换}uchartmrtemp(void)//读取温度{uchara,b;tmreset();tmpre();dmsec(1);tmwbyte(0xcc);//skipromtmwbyte(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);}voidkeyscan(void){if(key1==0){dmsec(5);if(key1==0){sheding++;if(sheding==100)sheding=20;36 }while(!key1);}elseif(key2==0){dmsec(5);if(key2==0){sheding--;if(sheding==0)sheding=20;}while(!key2);}}voiddeal(uinttmp)//温度处理{if(tmp<=sheding){gaonum=0;dinum=4;}elseif((tmp>sheding)&&(tmp<=(sheding+5))){gaonum=1;dinum=3;}elseif((tmp>(sheding+5))&&(tmp<=(sheding+10))){gaonum=2;dinum=2;}elseif((tmp>(sheding+10))&&(tmp<=(sheding+15))){gaonum=3;dinum=1;}else{gaonum=4;dinum=0;}}voidSHANSUO(unsignedinti)36 {unsignedintj;for(j=0;j0;i--){digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);}}for(q=0;q0;i--){digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);}}}voidmain(void){uintlast;while(1){SPK=~SPK;SHANSUO(10000);}dianji=0;tmstart();dmsec(450);//初始化ds18b20while(1){tmstart();//ds1820开始转换dmsec(2);last=tmrtemp()+256;//读取温度shi=last/100;ge=(last%100)/10;36 xiaoshu=(last%100)%10;keyscan();dmsec(2);deal(last/10);dianjik();}36'