基于51单片机的智能散热风扇设计9.86

摘要

基于51单片机的智能散热风扇的设计主要可以分为监测单元、控制单元和中央处理单元。本系统采用单片机STC89C52RC作为主控制器,采用数字型温度传感器DS18B20作为监测单元,主要就是采集温度数据,通过一系列的计算转化成实际温度数值。为了实时显示温度、速度等数据,使用了LCD1602液晶显示屏,通过这个不仅方便进行程序的调试,而且易于观察结果。使用外部EEPROM可以将温度限值进行保存,再次上电可以直接读取该数值不需要重新设置。对于外部的控制单元主要有键盘和红外一体化1308。它可以通过设定好按键控制速度,以及红外控制实现远程调节功能。其中可以自行设置温度限值,根据温度设置范围自动调节电机转速,直流电机也可根据设定好的速度进行运行,方便可靠。

关键词:单片机STC89C52RC;温度传感器DS18B20;LCD1602;红外接收头1308

ABSTRACT
The design of intelligent heat radiation fan based on 51 single chip microcomputer can be divided into the monitoring unit, the control unit and the central processing unit. This system uses single chip microcomputer STC89C52RC as the main controller, using digital temperature sensor DS18B20 as the monitoring unit, the main is the acquisition of temperature data, through a series of calculations into the actual temperature value. For real-time display of temperature, speed and other data, the use of the LCD1602 LCD screen, through this program is not only convenient to debug, but also easy to observe the results. External EEPROM can be used to save the temperature value, again on the power can be read directly from the value does not need to re set. The external control unit mainly has the keyboard and infrared integration 1308.It can be achieved by setting the key control speed, as well as infrared remote control functions to achieve. Which can set the temperature limit, according to the scope of the temperature automatically adjust the motor speed, DC motor can be set to run according to the speed, convenient and reliable.

Key words: single chip STC89C52RC; temperature sensor; LCD1602; DS18B20; infrared receiver head 1308

目录

第一章 绪论 1
1.1 引言 1
1.2 选题的背景及意义 1
1.3基于单片机的智能散热风扇设计要求及内容 2
1.4本文的结构 3
第二章 单片机STC89C52RC芯片简介 4
2.1 单片机的概述 4
2.2单片机STC89C52RC的简介 4
2.2.1 STC89C52RC芯片的引脚及性能 4
2.2.2 增加的新功能 7
第三章 温度监测单元的元器件的选型 8
3.1 温度传感器DS18B20概述 8
3.1.1 特性 8
3.1.2 引脚 8
3.1.3 详细说明及运用 9
3.2 DS18B20的内部处理顺序 10
3.3 DS18B20命令集 10
第四章 硬件系统的设计及分析 12
4.1 硬件系统的整体设计 12
4.2 硬件的各个功能模块的设计与分析 12
4.2.1 电源模块电路设计 12
4.2.2 复位电路的设计 13
4.2.3 晶振电路的设计 14
4.2.4 温度采集电路的设计 14
4.2.5 LCD1602液晶显示电路的设计 15
4.2.6矩阵键盘和独立按键电路的设计 16
4.2.7 EEPROM掉电保存电路的设计 17
4.2.8 1308红外一体化电路的设计 18
第五章 软件系统的设计与分析 19
5.1软件系统的结构分析 19
5.2 软件系统的程序设计 19
5.2.1 主程序与中断程序 19
5.2.2 温度传感器DS18B20的数据测量和处理子程序 21
5.2.3 LCD1602液晶显示子程序 22
5.2.4 按键扫描子程序 23
5.2.5 基于IIC通信总协议的数据存取子程序 25
5.2.6 1308红外接收信号读写子程序 26
第六章 PWM脉宽调制技术 27
6.1 PWM脉宽调制技术简介 27
6.2 PWM调节电压 28
第七章 温度监测及调节系统的调试 30
7.1硬件系统调试 30
7.1.1 Altium Designer 绘制电路原理图 30
7.1.2 Altium Designer 绘制PCB布线图 31
7.1.3硬件调试具体过程 32
7.2软件系统调试 32
7.2.1 Keil uVision4 编程 32
7.2.2软件系统调试具体过程 34
7.3基于51单片机的智能散热风扇系统的联合调试 35
第八章 结论 36
致谢 38
参考文献 39
附录A:原理图 40
附录B:PCB图 41

第一章 绪论

1.1 引言
随着技术的发展革新,出现了许多的电器,人类的生活中也越来越离不开这些电器,而这些电器长时间使用也就会产生热量,如果散发出来的热量无法及时散发出去必然会烧坏器件导致设备不可使用,在这样的情况下,散热风扇也就随之发展起来,开始的时候也就是普通的风扇固定的转速其他不可调节,然而对于当代社会的发展,这已经完全不能满足时代的要求,现在,新型的散热风扇都是智能化、人性化的多功能产品,不仅降低了功耗而且更加贴合人类的要求。对于基于单片机控制的智能散热风扇来说,更是以其特有的优势逐步占领市场。发展智能散热风扇已是必不可少的。
1976年intel公司研制出的MCS—48系列8位微处理器标志着单片机问世。现如今随着单片机的逐渐改进和发展,单片机已经完全渗透到我们生活中的各个领域,每个领域都可见到单片机的踪影。例如在生活方面,摄像机、全自动洗衣机、空调、冰箱等常见的家用电器以及使用广泛的智能IC卡等等;军事方面,飞机上的各种仪表、导弹火箭的装置等;工业方面,各种类型的零件加工机床,机器人,汽车中 保障系统等;医疗方面,各种医疗器械、治疗仪器都有使用单片机。由此可见,单片机不仅发展及其神速,而且应用也极为广泛,成为生活中不可或缺的元素。
1.2 选题的背景及意义
随着科技的进步,工业自动化的发展,原先的散热风扇只有固定的调节档位已经不符合时代的要求。传统的散热风扇只是单纯的有散热的功能,其电机的转速也是固定的,不可调节转速,这样不能达到节能的要求。而且目前的技术产品都往自动化、智能化的方向发展,这也就要求设计中电机转速可以根据温度的高低自动调节达到节能的效果,并且不需要人对其进行实时的控制。
本毕业设计是基于生活中需要降温的要求,能够自动监测空间的温度的状况,并将数据传输给中央处理单元,控制电动机的运行从而达到不同等级的散热功能。当温度超过限制时电机自动调节转速等级实现智能散热功能,而且可以外界控制温度限值以及电机转速的等级,数据过液晶显示屏显示出来。
这个设计不仅符合时代的发展而且节约资源,增加了更多的功能如调节档位、显示温度等,相信这类的技术的发展会慢慢占领市场,逐步完善贴合人类的想法,真正实现自动化、智能化、人性化。
1.3基于单片机的智能散热风扇设计要求及内容
基于单片机的智能散热风扇的设计主要可以分为监测单元、控制单元和中央处理单元。由监测单元传感器DS18B20进行温度的采集,并将数据传输至中央处理单元进行处理显示,再由控制单元将调节的数据传输至中央处理单元进行处理并返回数据控制直流电机的运行。其中,通过IIC通信总线协议将数据写入EEPROM中,实现断电后再次启动可读取上次的数据的功能。
基于单片机的智能散热风扇设计的控制系统核心就在于使用的STC89C52芯片,通过温度传感器DS18B20对温度数据的实时采集,经过温度传感器内转换器转换成对应的二进制数存储在芯片的RAM中,在单片机发出温度读取命令时,温度传感器返回对应的参数值至中央处理单元。其系统框图如图1.1所示。

在这里插入图片描述

              图1.1 系统功能框图

监测单元要求的任务:

  1. 采集温度数据,通过单片机中央处理单元的处理,转换成实际的温度值;
  2. 实时对数据进行保存;
  3. 准确的显示温度数值以及温度等级。
    控制单元要求的任务:
  4. 通过矩阵键盘或独立按键调节温度限值和电机转速;
  5. 远距离利用红外遥控来控制以上参数
    1.4本文的结构
    本文以监测温度实现自动化、智能化、人性化为背景,对基于51单片机的智能散热风扇系统进行了研究。全文一共分为八章,每章的主要内容特点如下:
    第一章简要的概括了基于51单片机的智能散热风扇的有关背景、特点以及意义;
    第二章介绍了单片机STC89C52RC的基本概念;
    第三章研究了基于单片机的散热风扇的硬件选取,对温度传感器各项性能指标以及原理进行分析,讨论了温度传感器数据的采集处理方法。
    第四章对基于单片机的智能散热风扇系统进行整体的分析,详细的解读各个硬件模块并设计出电路;
    第五章对基于51单片机的智能散热风扇系统的软件方面加以分析,从每个模块着手编写程序,最后结合起来形成具体的系统;
    第六章讲述了PWM脉宽调制技术,详细描述了调节电压来控制速度;
    第七章详细介绍了如何使用Altium Designer 绘制电路原理图以及PCB图,利用Keil软件编写各个子程序并联合起来进行调试,以及解决调试过程中出现的问题;
    第八章对本设计进行了总结。

第二章 单片机STC89C52RC芯片简介

2.1 单片机的概述
单片机是整个系统的控制中枢,其控制所有器件协调完成特定的功能。单片机是一种采用超大规模集成电路技术将中央处理单元CPU(由运算器和逻辑控制器组成,不仅包括了中断系统而且也包含了部分外部特殊功能寄存器)、只读存储器ROM(用来存放程序以及一些原始数据和表格)、随机存储器RAM(可读写的数据存放在其中,掉电保存)、四个8位并行I/O口、两个定时/计数器等功能模块集成在一块硅片上的集成电路芯片。单片机就是一个小而完善的微机系统。现在社会中单片机的踪影到处可见,如生活中的空调、冰箱还有工业中各种仪器等。单片机的系列也十分多,而使用最为广泛之一的就是51单片机。
通常在设计单片机硬件电路时都会将整个系统分为很多单独部分,每个部分实现一个特定的功能,先设计好各个模块,之后再将模块按逻辑合并成一个整体,这种模块化设计方法有利于降低系统设计的复杂性,提高利用率。
2.2单片机STC89C52RC的简介
STC89C52RC芯片是一种8位运算的微控制器,具有功耗低、性能好等优点,它属于经典的MCS—51内核,而且芯片中含有不需要取下芯片就可以直接烧写程序的Flash存储器,存储空间是8k,。STC89C52RC芯片的CPU是8位的,还有在系统可编程Flash,许多控制系统都会使用它,使用该芯片不仅灵活、高效,而且它的价格低廉、性能可靠、抗干扰能力强,有较广的应用范围。另外STC89C52有两种可选节电模式:掉电保护模式和空闲模式。前者是在掉电的情况下,RAM中内容不会丢失,在下一个中断、复位出现之前,单片机都是停止工作的;后者情况是CPU会暂停一切工作,除此之外的一些部分还是正常工作的例如RAM、定时器/计数器等等。
2.2.1 STC89C52RC芯片的引脚及性能
STC89C52RC的功能有以下几点:
8k字节程序存储空间;512字节数据存储空间;内带2k字节EEPROM存储空间;32个通用I/O口;3个定时器/计数器;外部中断4路,下降沿中断或低电平触发电路;通用异步串行口(UART);STC89C52RC是增强型的8051单片机,它的时钟/机器周期有6和12之分,这根据具体情况选择;它可分为3V和5V,本系统使用的是一个5V单片机,工作电压的范围在53.3V到5.5V之间;工作频率范围是0~40MHZ,实际工作频率可达到48MHZ;有ISP(在系统可编程)/IAP(在应用可编程);看门狗(WDT)电路以及片内振荡器、时钟电路;。
STC89C52RC芯片管脚概述:
STC89C52RC单片机芯片共有40个引脚:4个I/O口P0、P1、P2、P3,共32个外部双向输入/输出口;控制口;电源和时钟。具备的功能:8KB Flash片内程序存储器,512B RAM,2KB EEPROM,1个通用异步串行口(UART),8个中断源,4个中断优先级,可编程计数/定时器有3个,除了上述功能还内带一些电路如看门狗(WDT)电路以及片内振荡器、时钟电路。芯片管脚具体如下图:

在这里插入图片描述

图2.1 STC89C52RC芯片
芯片管脚的说明:
8位组成的P0口不仅可以双向传输数据而且还可以输出低8位地址,它是漏极开路的I/O口,在四组I/O口中,也是唯一一组可以直接对外部存储器进行读和写操作。当端口写入“1”时,其被定义为高阻输入口;当它作为输出口使用时,可以驱动8个TTL逻辑门电路。在访问期间地址和数据分时复用时,内部的上拉电阻被激活。P0口在校验程序时,输出指令字节;接收指令字节是在Flash ROM编程时;其中,校验程序的时候必须要外接上拉电阻。
P1口是标准的8位双向I/O口,专门供用户使用的。当端口写入“1”时,作为输入口使用;当它作为输出口使用时,可以驱动4个TTL逻辑门电路。P1口的内部带有上拉电阻,其会在作为输入端口使用时,将端口拉到高电位,这时,外部信号将引脚拉低就会产生一个弱电流。
P2口不被用来扩展外部存储器时,它的功能与P1口一致。P2口在系统扩展时使用,如果访问的外部数据存储器的数据存储地址是8位的,则P2口上的内容不变;如果访问的是16位地址,P2口可作为高8位地址线使用。P2口在flash编程、校验时也会接收高位地址以及一些控制信号。
P3口是具有两种功能的I/O口。它的第一功能与P1口一样可以用于数据的双向传输,但是P3口除了作为一般的I/O口来使用,它还有第二功能用途,如表2.1所示。
表2.1 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(外部数据存储器的写选通道)
P3.7 /RD(外部数据存储器的读选通道)

由表2.1可以看出P3口的每一位都可以独立的被定义,这些就是与其他口的不同之处。
两个时钟引脚:
XTAL1是内部时钟工作电路的输入和反相振荡电路的输入端;
XTAL2是反相振荡电路的输出端。
芯片的控制线有以下4根:
RST(Reset)复位功能:要想实现对单片机的复位,就需要在WDT计时溢出后,RST引脚输出两个机器周期以上时间的高电平。若是要关闭此功能,可以对地址是8EH的特殊功能寄存器AUXR上的DISRTO位进行设置,若对DISRTO位不做修改而是处于默认状态下,RST端输出高电平才能正常复位;
ALE//PROG:当P0口访问外部存储器时,输出外部存储器的低8位地址,ALE就输出脉冲对该8位地址进行锁存。如果不访问,ALE还会输出正脉冲信号,该脉冲信号是按照六分之一的时钟振荡频率来输出的,所以它可用于定时。/PROG(片内EPROM编程脉冲)在片内EPROM编程期间输入编程脉冲;
/EA(外部访问允许)。该引脚是用来选择访问内程序存储器和外程序存储器的,它是一个低电平有效的引脚,也就是EA端必须接GND(保持低电平),这样才允许CPU访问外部ROM(地址是0000H到FFFFH)。如果CPU要访问内部存储器,执行内部ROM中的指令,则EA端应该接VCC(保持高电平)。如果加密方式设定为1时,复位时EA端状态会被内部锁存。
电源引脚:
VCC:芯片电源的输入端,接+5V;
GND:接地。
2.2.2 增加的新功能
STC89C52RC兼容标准MCS-51指令系统,对与51单片机而言它增加的新功能有以下几点:
1.一个全双工串行通信口UART;
2.芯片内部增加了2KB EEPROM;
3.中断源增加到8个,4个中断优先级;
4.最高工作频率为33MHZ,而它的极限工作频率是48MHZ,其具有更高的工作频率,使得其拥有更快的计算速度;
5.内部集成看门狗(WDT)计时器;
6.全新的加密算法;
7.向下完全兼容51系列产品。

第三章 温度监测单元的元器件的选型

3.1 温度传感器DS18B20概述
3.1.1 特性
每一个DS18B20都有唯一的系列号,所以同一条单线总线上允许多个DS18B20存在,这也就有利于实现多点测温。为了使信号传输比较稳定,所以最多可以并联8个DS18B20使供电电源电压不会太低。它在小空间的工业设备、电缆线槽等工业领域都有广泛地应用,完成测温和控制。DS18B20输出、输入的信号都是通过单线接口进行传输的,所以DS18B20只需要一根线连接到单片机中央处理单元,外加接地。DS18B20的特性包含以下几点:
1.独特的单线接口,只需一根线即可通信;
2.不需要外部元件;
3.数据线供电,不需要备份电源
4.具有多点能力,简化了分布式温度检测的应用;
5.提供9位数字值的温度读数;
6.测量范围在-55℃到+125℃之间,期间的增量值是0.5℃(等效华氏度范围:-67°F ~ +257°F 增量值:0.9°F);
7.在1s(典型值)内可以将温度转换成数值
8.应用范围包括家用电器、工业系统、任何热敏系统等。
3.1.2 引脚

引脚说明:
GND 地
DQ 单线运用的数据输入\输出引脚
VDD 可选的VDD
NC 空引脚
DNC 不连接

在这里插入图片描述

3.1.3 详细说明及运用
温度传感器DS18B20包括了3个主要部件:
1.温度灵敏元件;
2.64位光刻ROM:前8位是每个产品系列的自身编码,用连续数字表示的接下来的48位代表唯一系列号,还有8位是对前几位的校验,通过光刻ROM这样就可以区分一根总线上的多个DS18B20;
3.存储器RAM:DS18B20的RAM有两种分别为可电擦除和高速暂存,其中,非易失性温度触发器TH和TL是在可电擦除RAM中。
DS18B20使用的是单线接口,对于一线通信接口而言,ROM必须先被设置好,之后才能使用记忆、控制功能,所以首先主机必须提供以下五个ROM功能命令中的一个:Read ROM(读ROM);Search ROM(搜索ROM);Match ROM(符合ROM);Alarm Search(告警搜索);Skip ROM(跳过ROM)。
这五种命令之一被执行完成后,由于是对每个器件的ROM操作,如果一线上存在多个器件,就可以知道线上挂有多少设备以及挑选的器件类型是什么样的,这时存储器和控制器功能也可以使用了,主机在6种操作命令中选一个执行。指示DS18B20完成温度测量的就是其中一个控制器操作命令,在完成温度测量指令后,测量结果被放在内部高速暂存存储器中,并且可以发出阅读记忆功能的操作命令,就可以读取片上存储器的存储内容。
工作原理分析:
当温度变化时,高温度系数晶振的振荡率明显变化,其决定了门开通期,将高温度系数振荡器产生的脉冲作为计数器2的输入。DS18B20测量温度就是在门开通期间,对低温度系数晶振减法计数所经历的时钟周期。计数器1和温度寄存器设置的基数值应相对于-55℃,计数器1在门开通期间对低温度系数晶振输出的脉冲进行计数,直到设定值减至为零温度寄存器就加一,在此基础对上述过程进行重复操作,当计数器2的设定值减至零,就可以得到测量的温度,该温度值就是温度寄存器中的值。在此过程中,斜率累加器电路的输出会对计数器1的预设值进行修正。因为测量温度不是线性进行的,而是非线性的,所以就需要斜率累加器对此过程进行修正,并补偿非线性,这样测量的温度具有高分辨率。所以,在确定了以上计数器的值以及斜率累加器的值,就可以得到相应的分辨率。
DS18B20内部完成温度计算,提供的温度读数是二进制补码的,展现形式是16位的,前8位是符号扩展位,全为1时表示温度为负值,为0表示温度为正,对后8位值取原码,再将二进制转换成十进制就得到了温度值。当温度以1/2℃LSB(最低有效位)形式表示时,产生的9位格式如下:
MSB(最高有效位) LSB(最低有效位)

上面列出的是补码形式,计算得出的结果是-50℃,所以当温度以1/2℃LSB形式表示时结果就为-25℃。
3.2 DS18B20的内部处理顺序
经过单线接口访问DS18B20的顺序如下:
1.初始化
初始化是一切处理(如发复位脉冲、接收存在脉冲)的开端。
2.执行ROM操作命令
在初始化后,如果接收到器件的存在脉冲,主机就要执行8位的ROM功能命令。
读ROM(33H):此命令只允许总线上存在一个从属器件,如果多个器件同时发送数据时就会出现数据冲突。
“符合”ROM(55H):要想对后继的存储器操作命令做出响应就必须与64位ROM序列严格相符才行,若不符则需等待复位脉冲。
搜索ROM(F0H):主机可以通过此命令来识别总线上器件个数或从片的64位ROM编码。
告警搜索(ECH):仅在最近一次测量温度高于TH或低于TL时,DS18B20才会对此命令做出响应。
3.3 DS18B20命令集

指令 说明 约定代码 发出约定代码后单总线的操作 注
温度变换命令
温度变换 启动温度变换 44h 读温度“忙”状态 1
存储器命令
读暂存存储器 从暂存存储器读字节 BEh 读9字节数据
写暂存存储器 写字节至暂存存储器地址2和地址3处(TH和TL温度触发器) 4Eh 写数据至地址2和地址3的2个字节
复制暂存存储器 把暂存存储器复制入非易失性存储器(仅地址2和地址3) 43h 读复制状态 2
重新调出E2 把存储在非易失性存储器内的数值重新调入暂存存储器(温度触发器) E3h 读温度“忙”状态
读电源 发DS18B20电源方式的信号至主机 B4h 读电源状态

注:
1.若器件在接收到温度变换命令之后从VDD引脚没有获取电源,则DS18B20的I/O引脚必须保持2s高电平,这样才能提供变换所需要的电源。
2.若器件接收到复制暂存存储器命令之后未从VDD引脚取得电源,则I/O引脚必须保持10ms的高电平,这样才能提供复制过程所需的电源。

第四章 硬件系统的设计及分析

4.1 硬件系统的整体设计
系统设计的重要部分之一就是硬件电路的设计,硬件电路设计的正确性是软件正常工作的重要保证,一旦完成硬件的制作就很难进行修改,故此在设计硬件的时候要彻底的对各个部分进行原理分析,保证电路的正确性。在设计硬件电路要考虑到CPU的处理能力、I/O口的分配、存储容量及速度、电平要求等。
基于51单片机的智能散热风扇系统的设计分为两部分:硬件部分和软件部分设计。硬件部分的设计包括电源模块电路、复位电路、晶振电路、温度采集电路、LCD1602液晶显示电路、矩阵键盘和独立按键电路、EEPROM掉电保存电路、AT24C02A红外一体化电路;软件部分包括主程序与中断程序、温度传感器DS18B20的数据测量和处理子程序、LCD1602液晶显示子程序、按键扫描子程序、基于IIC通信总协议的数据存取子程序、AT24C02A红外接收信号读写子程序。
单片机是整个系统的控制中心,控制各个模块完成特定的功能。硬件的设计采用模块化设计,这样降低了系统设计的复杂性,每个模块实现基本的特定功能,再将模块组合起来完成系统功能。
4.2 硬件的各个功能模块的设计与分析
4.2.1 电源模块电路设计
系统平稳运行的前提和基础是电源模块的稳定可靠,要想设计的电子系统完整而又精致,那么为整个系统提供电源供电模块就是首要需要考虑的问题。应用范围最广、使用时间最早的51系列单片机在实际使用过程中,会出现一个典型的问题就是,容易受到干扰导致程序跑飞,为单片机系统配置一个稳定可靠的电源供电模块就是克服这种现象出现的一个重要手段。通过计算机的USB口或使用外部稳定可靠的5V电源供电模块可以给电源供电模块供给电源。图4.1为电源电路设计图:

在这里插入图片描述

            图4.1  电源电路

图中的电源电路中接入了电源指示灯,SW1为电源开关,R1则为LED灯的限流电阻,防止电流过大烧坏LED灯,C1是电源的滤波电容。
4.2.2 复位电路的设计
一般单片机有两种复位方式:高电平、低电平复位。本设计设计的是高电平复位电路,如图4.2所示,进行复位操作,RST引脚被置为“1”,单片机复位有效;若在默认状态下RST端是低电平,这时单片机处于正常工作。图4.2所示的复位电路使用的就是阻容复位,当复位引脚端变为高电平时,该高电平维持的时间要长达两个机器周期及以上。

在这里插入图片描述

图4.2 复位电路

复位端外接一个电容和一个电阻,电容的另一端与VCC想接,电阻的另一端与GND相连,这样连接起来就可以实现上电复位。接通电源,其中的电容进行充放电可以保证时间达到复位有效,设计采用的电容是10uf的电极性电容,电阻的大小为10k欧姆。除了上述的一些元器件,还增加了一个按键开关,与电容并联,可以实现按键复位。上述复位电路的工作原理是在接入+5V电源的情况下就可以完成上电复位,要想进行按键复位,则复位引脚端为高电平才能进行,所以要先按一下KW1,这个瞬间复位端被置“1”,并且通过对电容的充电,高电平会被保持一段时间,从而完成了复位功能;松开按键时,电容就会放电使单片机恢复正常工作状态。
4.2.3 晶振电路的设计
晶振是单片机正常工作的重要因素之一,它也称为晶体振荡器。晶振的重要性就体现在它可以提供时钟源,而单片机系统执行所有指令就是以时钟源为基础的。单片机正常工作时,晶体振荡器提供的时钟频率和标准频率相一致;如果单片机没有正常工作,可能晶振引脚电压为0或5V而不是2V左右,这样就会导致晶振不能起振,从而单片机就不能工作。通常时钟频率越高,单片机执行指令的速度就越快。图4.3所示就是晶振电路,通过此电路单片机内部就可以产生时钟信号,从而控制单片机的运行。

在这里插入图片描述

图4.3 晶振电路

由图4.3可以看出,单片机的两个引脚(XTAL)外接两个22pf的电容和一个晶振,与芯片内部电路相结合就可以实现自振荡。电路中采用电容就是为了稳定振荡频率,使其接近晶振频率。一般单片机所需的时钟源是由晶振电路与芯片内部的锁相环电路配合作用产生的,所以在晶振不变的情况下,连接不同的锁相环电路,就可以产生不同的时钟频率,这就能满足子系统不同的频率要求。
4.2.4 温度采集电路的设计
当温度变换发生时,I/O线上必须提供足够的功率才能使DS18B20完成准确的温度变换。若DS18B20的工作电流较小时,要使I/O线有足够的驱动能力,10k的上拉电阻是远远不足的。在此条件下有两种方法可以确保DS18B20在其有效变换期内得到足够的电源电流。第一种方法就是发生温度变换时,用一个MOSFET把I/O线直接拉到电源上。在使用寄生电源方式时VDD引脚必须接到地。另一种方法是使用连接到VDD引脚的外部电源,如下图4.4所示,此方法不需要强上拉,换句话说,总线上主机在不向上连接的情况下,还能使线在温度变换期内保持高电平。需要注意的是接入外部电源工作时,GND引脚不可悬空。

在这里插入图片描述

图4.4 温度传感器驱动电路
4.2.5 LCD1602液晶显示电路的设计
字符型液晶显示模块由字符型液晶显示屏(LCD)、控制驱动主电路及其扩展驱动电路,少量的电阻、电容等装配在PCB板上而成的。
LCD1602的基本特点:1.液晶显示屏是以若干个5*8点阵块组成的,每个点阵块为一个字符位,字符行距和间距都为一个点的宽度;2.具有可显示192中字符的字符发生器ROM;3.具有80个字节的RAM和64个字节的自定义字符RAM;4.由+5V电源供电。
引脚功能:
VSS是电源地;VCC是+5V逻辑电源;V0是液晶驱动电源;RS为1是数据,为0是指令;R/W为1是读操作,为0是写操作;E是使能信号;D0~D7是数据总线。
1602的驱动电路包括了三个部分:数据口、控制口和电源。RS端与P2.4口相连接,R/W端与P2.5相连,E端与P2.6相连,数据口与P0口的八位数据线相连接,1602液晶显示电路如图4.5所示:

在这里插入图片描述

图4.5 LCD液晶显示屏驱动电路

4.2.6矩阵键盘和独立按键电路的设计
键盘是一种外部输入设备,设计的单片机系统可以通过外部设备进行一系列的设置控制。键盘有两种形式分别为编码和非编码。一般情况下都会选用非编码的键盘,因为其硬件电路比较简单,成本较低;而编码键盘与之相反,虽然使用方便但电路复杂。接下来要介绍的就是其中的两种键盘分别为独立键盘、矩阵键盘。
独立键盘的电路如图4.6.1所示,只有8个按键,每一个端口都有相对应的按键,开始端口都被赋予高电平,按下某个按键则对应的端口会被拉低,按此原理进行编程十分简易,但是按键比较少,应用的范围就受到限制,不及矩阵键盘使用广泛。
在这里插入图片描述

图4.6.1 独立键盘电路
矩阵键盘电路如图4.6.2所示,相对独立键盘电路比较复杂,编写的程序也比较繁琐,但同样利用了8个端口却有16个按键可使用,这就大大提高了利用率。要判断是否有按键按下或按下的是哪个按键,就需要进行键盘扫描,对每一行按键扫描判读就可以得到准确的位置。

在这里插入图片描述

图4.6.2 矩阵键盘电路
4.2.7 EEPROM掉电保存电路的设计

在这里插入图片描述

图4.7 AT24C02存储电路
AT24C02芯片遵循IIC协议(总线数据传输协议),对数据进行传送,如图4.7所示电路就构成了一个串行EEPROM存储单元。该芯片的体积小,而且具有写保护功能,即掉电情况下,数据不会丢失而是被保存起来,再次上电可以通过I2C总线读取数据,所以它被广泛地运用。其中会利用I2C总线协议,不仅简单而且有效;除此之外,它的接口简单,这就使得I2C总线不会占用大量的空间,不仅缩小了电路板空间还减少了芯片管脚,有利于降低互联网的成本。
I2C总线工作原理:I2C总线可发送和接收数据,它是由时钟SCL和数据线SDA构成的串行总线。其可实现双向传递,在IC与IC之间以及CPU与被控IC之间,传送率最高可达到100kbps,并联在这条总线上的各种被控电路都有唯一的地址,在信息的传输过程中,按照所需要完成的功能来决定I2C总线上并接的每一模块电路是主控器、受控器或是发送器、接收器。
4.2.8 1308红外一体化电路的设计

在这里插入图片描述

图4.8 红外接收一体化电路
红外线光谱是位于红色光之外,比红光的波长还长,波长范围是0.76~1.5um。红外遥控就是利用红外线进行信息传递的一种控制方法,它有很多优点如抗干扰、功耗小、成本低等,而且电路简单,容易编码和解码。图4.8所示的红外一体化电路就是整个红外遥控系统中接收的部分,主要是将接收到的红外信号进行放大解调,还原成原始编码并转换为TTL信号,单片机对此进行识别就可完成一系列的控制。除了接收部分,还有调制和发射部分。遥控器中有红外发光二极管,红外线就是由此发射出去的;将发射的数据和载波进行“与”操作就完成了调制部分。一个完整的红外遥控系统都包括上述三个部分。

第五章 软件系统的设计与分析

5.1软件系统的结构分析
基于51单片机的智能散热风扇系统的软件系统设计是基于Keil uVision4开发平台采用C51语言编写的,在这种开放环境下,不仅可以缩短开发周期,降低开发成本,而且还使得程序易于调试和维护,除此之外还具有可靠性高,可读性及可移植性好等优点。软件调试完全正确后将程序写入单片机上电工作,温度传感器将当前的温度值转化成二进制传送给单片机,单片机将采集的数据进行计算获得当前实际的温度值,之后把温度值及温度限值、速度等级发送给1602液晶进行显示,也可将温度限值存储到AT24C02中以便再次上电时直接读取数据。设计一个完整的系统,通常先将其分成多个模块,对每个模块进行设计编程,这样不仅容易编写而且易于管理,此系统主要包括以下几个模块:
1.主程序、中断程序;
2. DS18B20对温度采集和处理的子程序;
3.LCD1602液晶显示子程序;
4.按键扫描子程序;
5.基于IIC通信总协议的数据存取子程序;
6.1308红外接收信号读写子程序。
5.2 软件系统的程序设计
5.2.1 主程序与中断程序
主程序是对所有模块程序的结合利用,先对每个器件进行初始化,包括各种中断初始化等,之后根据系统要求功能进行程序的调用整合。主程序按照程序逻辑进行子程序的调用与执行,实现对温度的采集和数据的处理,温度数据的存储,温度相关数据及速度等级的显示,监测单元与上位机通信等模块的集中控制。具体流程图如图5.1所示:

在这里插入图片描述

              图5.1  主程序流程图

部分主程序:
void main (void)
{……
Init_Timer1();
TIM0init();//初始化定时器
EX0init();//初始化外部中断
LCD_Init();//初始化液晶显示屏
DelayMs(20); //延时
LCD_Clear();//清屏
IRcvStr(0xae,4,displayscope,16); //读取存储数据

while (1) //主循环
{ ……temperature=(float)temp*0.0625;//计算出温度值
……LCD_Write_String(0,1,displaytemp);//显示温度值
……LCD_Write_String(0,0,displayscope);//显示限值、等级
……if(auto_flag == 1){
PWM_Motor(temperature,temp_low,temp_high);}//自动调节温度
……}}
5.2.2 温度传感器DS18B20的数据测量和处理子程序
时间片是用来处理数据位以及指定进行何种操作的命令字,使用时间片可以读出和写入DS18B20的数据。主机产生读时间片时就从DS18B20中读取数据,要产生读时间片就需要主机将数据线端置为“0”。在出现下降沿也就是高电平变为低电平的时候,读时间片开始,过了15us之后就可以判断I/O端上是高电平还是低电平,若是经历了15us低电平,之后数据线释放变为原来的高电平状态,则读“1”;若是仍然是低电平并维持了60us,那么读“0”。所有时间片之间要求保证1us以上的恢复时间。流程图如图5.2所示:

在这里插入图片描述

               图5.2  温度采集子程序流程图

温度读取程序:
unsigned int r_temp()
{
unsigned char l=0;unsigned int h=0;unsigned int t=0;
DS18B20_Init ();
w_char (0xCC);//跳过读序列号的操作
w_char (0x44); //启动温度转换
DelayMs(10);
DS18B20_Init ();
w_char (0xCC);
w_char (0xBE);//读取温度寄存器
l=r_char ();
h=r_char ();
h<<=8;
t=l+h;
return(t);
}
5.2.3 LCD1602液晶显示子程序
在lcd1602液晶显示中,总共分为两行,第一行显示温度上限值、温度下限值和速度等级,第二行显示当前温度值。LCD液晶显示子程序设计流程图大致如下:

在这里插入图片描述

              图5.3  液晶显示子程序流程图

写入字符串函数程序:
void lcd_w_s(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0){w_com(0x80 + x);ox80第一行开始}
else{w_com(0xC0 + x);}
while (*s){w_data( *s);
s ++;}
}
5.2.4 按键扫描子程序
矩阵键盘的流程图:

在这里插入图片描述

                     图5.4  键盘驱动程序流程图

键扫描就是判断有无键按下,当扫描到有按键按下时,下一步的处理才可正常进行,否则就退出键盘处理程序。独立键盘扫描只需要读取I/O口的状态就可以判断是哪个键被按下,而矩阵键盘需要对按键进行扫描才可判断,一般扫描方法有两种:逐行扫描法和线反转法。
逐行扫描法:先从第一行开始,发送给改行一个低电平信号,如果该行线所连接的键没有被按下,则所有列线端口得到的信号全都是高电平,反之有键按下的话,列线端口得到的信号不全为“1”,之后每一行都按上述操作进行直到最后一行。本系统设计的矩阵键盘就是使用逐行扫描的方法。
线反转法虽然扫描速度比较快,但程序编写较为繁琐。先给行线上全是低电平信号,如果有键按下,此时读取的列线值中按键所在列上的值为“0”;之后就给列线全“0”信号,读取行线的输入值,行线连接按下键的值必为“0”,所以当一个按键被按下时,必定可以得到唯一的一对行列值,由此可以确定闭合键的位置。
按键按下和松开的瞬间,由于这是机械动作,所以其输出电压会产生波动,考虑到此干扰,在键盘扫描程序设计中应该进行按键消抖,使用的方法就是软件消抖法。软件消抖法就是采用延时(一般延时10~20ms)的方法避免按键的抖动,直到按键已经稳定地闭合或断开,这时才读出其状态。读出的状态可以得到闭合键的键码,根据键码得到相对应的按键,便于之后的操作。
矩阵键盘扫描程序:
#define keyp1 P1
unsigned char key_scan ()
{
unsigned char keyval;
keyp1 =0xf0;
if(keyp1!=0xf0)//判断是否按下按键
{
DelayMs(10); //去抖
if(keyp1!=0xf0)
{
keyp1 =0xfe; //扫描第一行
if(keyp1!=0xfe)
{
keyval = keyp1 &0xf0;
keyval +=0x0e;
while(keyp1!=0xfe);
DelayMs(10);
while(keyp1!=0xfe);
return keyval;
}
……//检测以下几行将e改为d、b、7
}
}
return 0xff;}
5.2.5 基于IIC通信总协议的数据存取子程序
I2C总线在传送数据过程中共有三种信号类型,它们分别是:开始信号、结束信号、应答信号。
开始信号:根据时序图可得,在SCL为高电平,SDA由高电平向低电平跳变时,开始传送数据;结束信号:SDA时序是与开始信号相反,在SCL为高电平,SDA由低电平跳变为高电平,数据传送结束;应答信号:在8位数据传送完成后,主机会产生一个响应时钟脉冲,表示接收到数据。一般传送一个字节,都是先送高位再低位,SCL线上需要9个脉冲,在SCL前8个脉冲高电平期间判断数据线SDA是1还是0,最后一个是用来作为接收确认信号的,也就是在第9个脉冲期间要有一个下降沿。SCL为低电平期间SDA状态没有影响,主要看SCL高电平期间SDA的状态。具体的时序如图5.5所示:

在这里插入图片描述

                      图5.5  IIC总线时序图

启动总线程序:
void Start_I2c()
{
SDA=1(结束0);
_Nop();
SCL=1;_Nop();……//省略4个,延时4.7us以上
SDA=0(结束1);
……//延时
SCL=0(结束不需要); //钳住IIC总线,准备发送或接收数据
_Nop();_Nop();
}
5.2.6 1308红外接收信号读写子程序
红外发光二极管发出的红外线经过调制后被红外一体化接收头接收,被其内部电路放大解调得到所需要的信号,单片机就可以识别该信号进行下一步的控制。
红外基带信号发送协议中先识别引导码,是9ms高电平加上4.5ms低电平,之后就是8位客户码和8位客户反码,最后是8位操作码和8位操作反码,传输时都是先低位后高位。解码的关键是识别“0”和“1”,根据位的定义可以发现,“0”和“1”均以0.56ms的低电平开始,高电平的宽度是区别0和1的关键,低电平是0.565ms的是0,低电平是1.685ms是1。
红外解码程序:
void ir_pro (void)
{…
unsigned char k=1;
for(i=0;i<4;i++)
{
for(j=1;j<=8;j++)
{ lorh =irdata[k];
外部中断0服务函数中可知irdata[k]
*//void EX0_ISR () interrupt 0
{…if(irtime<63&&irtime>=33)//判断引导码9ms+4.5ms
i=0;irdata[i]=irtime;irtime=0;i++;…
}
*//
if(lorh >7)
dat |=0x80;if(j<8){ dat >>=1;}
k++;}
IRcord[i]= dat;//i为0、1是客户码,2是数据码,3是数据反码
dat =0;
}

}

第六章 PWM脉宽调制技术

6.1 PWM脉宽调制技术简介
脉宽调制(PWM)其实就是一通过数字输出来控制模拟电路。利用电路中开关型器件接通、断开的变化,输出端产生可以替代所需波形的脉冲,该脉冲的频率不变、幅值相等,占空比可以调节。以正弦波为例,如图6.1所示,在正弦波的正半个周期中,输出了一系列与正弦波形对应的等值脉冲,如果按同一比例系数对这些脉冲的宽度进行调节,就可以改变逆变电路输出正弦波的电压、频率的大小。
电机的启动、停止很简单,它就是一个开关,0或者1的问题很简单,关键问题就在PWM脉宽调制。使用脉宽调制实际上就是为了调节功率,通过调节有效的作用时间来调节最终的功率,这样就可以对电机进行调速。直流电机调速就是调节两端的电压,只要改变两端的电压就可以实现速度的调节。通过图6.1所示的PWM波形,可以实现正弦半波的一个电压输出,这样就已经实现了调速功能。在PWM的实际工作波形中,一个下降沿到另一个下降沿,或者是一个上升沿到另一个上升沿之间的时间是固定不变的,变化的是高电平脉宽的时间,所以调节高电平的宽度即可。

在这里插入图片描述

图6.1 PWM波形
6.2 PWM调节电压
这里使用PWM调节电压,其实就是通过改变脉宽高电平宽度从而调节作用时间以此达到调节电压等参数,换句话说就是用改变电机电枢电压接通与断开的时间的占空比来改变电枢电压的平均值,从而控制电机转速。PWM调速原理如图6.2所示:

在这里插入图片描述

                   图6.2  PWM调速原理

在脉冲作用下,当电机接通时速度增加,电机断电时速度减小,若要控制电机的转速,则要按一定的规律改变通、断电时间。当电机全通时,它的转速最大,设为Vmax;假设占空比为D,那么就可以计算出电机的平均速度,Vd = Vmax * D,其中D = t1 / T。图6.3就展示了平均速度和占空比之间的关系。

在这里插入图片描述

             图6.3  平均速度和占空比的关系

从上图6.3中可以看出平均速度与占空比是非线性关系,正如图中实线部分展现的,是两者之间实际的函数关系。在此系统中可以近似看成虚线部分所展示的线性关系,就是根据上述计算公式计算所得,这样近似等效就可以把平均速度与占空比看成正比关系,电机电枢电压与控制波形的占空比成正比,结合两者则电机的速度与占空比成正比,占空比越大电机转速越大,反之越小,当占空比为1时电机的转速最大。

第七章 温度监测及调节系统的调试

7.1硬件系统调试
7.1.1 Altium Designer 绘制电路原理图
使用Altium Designer软件绘制电路图和PCB图时,要先完成一下这些准备工作:
1.新建工程文件:打开Altium Designer 软件,按照File—New—Project—PCB Project的命令执行,这样就可以建立一个新的工程文件,点击保存按钮,会弹出一个对话框,对文件命名并选择合适的路径进行保存;如下图所示:

在这里插入图片描述

        图7.1 工程新建图

2.新建原理图文件:右击左侧菜单栏中的PCB_Project1.PrjPCB,选择Add New to Project,之后有几种文件类型选择,点击Schematic就建立了一个原理图文件;如下图所示:

在这里插入图片描述

      图7.2 新建原理图操作

3.添加元件库:先找到一些常用的元件库,将这些需要的元件库拖进工程文件,就能装载这些元件到Library中;之后绘制电路图就可以直接从右侧Library窗口中选择需要的元件;与步骤2的操作,就在最后一步选择Schematic Library建立自己的元件库,在该页面中绘制需要的元器件并保存,之后可直接使用。
完成了上述步骤就可以进行设计电路,绘制原理图和PCB图4.放置元件:
1.选择元器件:在Library窗口中选择需要的元件,直接拖至图纸上;每一个元件都有相应的属性,双击图纸上的元件,弹出一个属性对话框,在该对话框中可以修改该元件的各种属性;
2.元件连接:有些元器件放置比较凌乱,先大概整理一下位置,连接时候再具体调整;执行Place—Wire命令,将元件之间连接,为了连接方便及美观,还可以在引脚端添加网络标号,这样也是正常连接的。
操作完成后绘制的原理图如下:

在这里插入图片描述

图7.3 基于单片机的智能散热风扇的设计
7.1.2 Altium Designer 绘制PCB布线图
绘制好原理图后下一步工作就是设计PCB板,具体步骤如下:
1.载入元件和网络:首先要新建PCB文件,与建立原理图的步骤相同,把最后选择Schematic改为PCB就可以了;之后选到原理图界面,执行Project—Compile Document命令,编译设计好的电路,出现错误就进行修改;如果电路没有问题就可以执行Design—Update PCB Document命令,则PCB文件中就会有连接好的元件。
2.规则设置:执行Design—Rules命令,会弹出一个属性框,其中Electrical、Routing、Plane这些都需要设置,使过孔、焊盘等一些参数符合规范,这可避免之后元件插不进焊接不了。
3.走线:先将刚导入的元件进行布局,将元件放置在合适的位置,尽量减小芯片大小,方便走线;之后就可以进行走线,有上层和下层之分,执行Place—Interactive Routing命令,并根据连线的提示进行走线,将所有线路都连接好。如果使用自动布线就会看起来不美观,通常都是按上述操作自己连接线路。
4.敷铜和检查:在Solder界面进行铺铜,执行Place—Polygon Pour命令即可敷铜;完成所有操作后就可以进行规则检查,执行Tools—Design Rules Check命令即可。
7.1.3硬件调试具体过程
在PCB图设计完成后,发给商家制作电路板,正常大概需要一个星期的时间。
拿到电路板的第一件事并不是直接开始焊接,需要检查印制电路板的正确性,打开自己设计的PCB图,对照实物板,首先分模块检查是否有遗漏的元器件焊盘,同时要关注焊盘印制的质量,是否容易脱落。
在确定印制电路板无缺印的前提下,开始检查自己所设计的元器件封装的尺寸和购买的实物电子元器件尺寸能否一一对应,在此步骤中同时也确定了自己所选择的电子元器件是否符合当初自己的设计想法。
完成上述步骤之后,接下来对照原理图和PCB图分模块进行,电气连接检查。将万用表打到检查短路的一档,红黑表笔分别在不同的焊盘,从单片机主电路开始,检查每条线路是否导通,有无断路情况。其中短路情况也需检查,尤其是5V和GND的短路的情况需要注意,一旦发生,必然会烧毁部分元器件。
焊接元件的顺序是先低后高、先贴片后直插的顺序进行,也就是先焊接电阻和电容等小的元器件,之后再焊接其他大的元件。若设计PCB图布线时疏忽,发生某个线路需要连接,自己却遗漏的情况,可以在后期才用漆包线在外部焊接的方法解决这个问题。焊接好之后,使用万用表检测电路,若发现问题要及时解决问题直至完全正确方可接通电源来检查电路的工作情况。
7.2软件系统调试
7.2.1 Keil uVision4 编程
软件的调试环境选择Keil uVision4软件,其使用接近于传统C语言的语法来开发,简单易学,这样可以大幅度提高工作效率和项目开发周期。其使用流程如下:
1.新建工程文件:Keil uVision4软件是通过工程来管理文件的,并且所有的代码编译和调试都是在工程内完成的,所以第一步就是要新建一个工程文件,执行Project—New uVision Project命令,在弹出的新建工程对话框中选择合适的存储路径和起一个名称并保存,之后又弹出一个对话框,点击Atmel,选择需要的单片机型号,由于STC89C52RC不在此列表中,故选择完全兼容的AT89S51单片机作为目标单片机,点击确定并在提示是否添加启动代码时选“是”,这样工程就建立完成了;
2.新建源文件:在左侧的菜单栏中右击Source Group1,选择Add New进行添加文件,此时会跳出一个对话框,可以在其中选择新建的源文件的文件类型,C文件选择扩展名为.c,C语言头文件选择扩展名为.h;
在这里插入图片描述

图7.4 新建源文件

3.工程的设置:对新建的工程需要进行一些设置才能满足开发的要求,右击Project Workspace窗口中的Target1选择Options for Target ‘Target1’,弹出工程设置窗口,在此对话框中需要设置两样,其中一项是晶振频率选择Target在Xtal(MHz)中填写12,另一项是在Output页生产HEX文件项,在Create HEX File项打勾即可,生成的HEX项的设置是烧写代码的必要过程;
在这里插入图片描述

图7.5 晶振频率选择
4.编译及调试:完成以上步骤后,选择Project—Rebuild all target files编译所有源文件,根据编译信息进行修改问题直到源文件完全正确。
7.2.2软件系统调试具体过程
为了降低编程难度并且提高代码的可移植性和维护性可以采用模块化编程的方法,根据系统各个部分的功能分别编写对应的驱动程序,并将每个模块调试好,在编写整个系统程序时在需要的地方调用子程序这也可以减轻负担。软件部分分为7个文件:18b20.c文件、1602.c文件、keypro.c文件、pwm.c文件、ir.c文件、iic.c文件以及main.c文件。
首先可以调试液晶显示模块,这样可以使得接下来的调试结果在显示屏上显示出来,更加直观及便于找出问题加以修改。接下来就进行温度传感器的调试,将采集到的温度值经过计算得到实际温度值并显示出来,在计算时注意浮点数的运算,严格进行数据类型转换,以免造成数据精度的下降。下一设计的就是键盘驱动程序,和红外接收解码程序,这两者都是属于外部调节来控制电机的转速,给每个键取一个相对应的数字,在按下任何一个键时,显示屏上要显示相对应的数字,这样就验证程序的正确性,若有错误修改至正确无误。调节好前面的程序就可以设计直流电机驱动程序,最后加上掉电保存的程序即可。
7.3基于51单片机的智能散热风扇系统的联合调试
完成模块程序的设计调试后编写主函数,即将各个模块合而为一,在需要的地方调用子程序,编写好所有程序就可以进行系统的调试。首先对监测单元进行调试,实现温度的采集和显示,之后就调节电机,在改变温度的情况下看直流电机是否改变转速,最后就是使用外部集成器件调节,在按下按键时看显示屏上的值是否改变以及电机转速的变化。

第八章 结论

经过几个月的研究设计,终于完成了预想的设计,基本达到毕业设计任务书上的所有要求。基于51单片机的智能散热风扇系统设计分为三个部分中央处理单元、控制单元、监测单元。监测单元采用ds18b20作为温度传感器,使用单片机STC89C52RC作为主控制器,协调各个单元工作,系统接电工作后主控制器先对各个模块进行初始化,之后主控制器向温度传感器发出控制命令进行温度采集,处理得到的数据通过lcd显示出来,当有外部信号(红外、按键)调节时,主控制器根据接收的信号进行相应数值的调整。
焊接及调试中遇到的问题:
1.由于自己不会结合使用单独的松香和不含松香的锡丝,因此第一次焊接时,出现了很多引脚虚焊的情况,第一块电路板几乎是不能稳定使用的,直到更换了含松香的锡丝才比较顺利的完成。
2.在焊接前的第一步检查线路的过程中发现,P2口有一条线在PCB图中漏画了,没有将其中的一个I/O连接至排针。解决方案:在设计时,自己将单片机底座个排针放置的很近,所以可以省去跳线得步骤,直接用焊锡丝在电路板底部将对应的两个引脚焊接在一起,然后用万用表检查线路是否已通。
3.第三个问题是比较严重的,由于自己之前没有设计过电源模块的经验,在选择直流电源的DC座后,没有分清DC座前后两个引脚哪个是接5V,哪个是接GND。直到所有模块焊接完成,通电测试时才发现这个问题,5V与GND直接短路,差点导致STC89C52单片机的烧坏。解决方案,将DC座左右相邻引脚连接的线路划断。这种做法只是减少了损失,确保其他模块能正常工作,而电源模块则成了“装饰”,需要通过引入外接电源给单片机供电。
4.在设计LCD1602电路时,考虑到液晶的正反插入问题,1602需要朝外摆放,但自己只考虑到上下位置,没有注意在实际使用中1602插入,将右边矩阵键盘的排针挡住了,造成1602液晶和矩阵键盘无法同时使用。需要同时用到1602液晶和按键时,只能选择独立按键。这个方面在后期需要改进。
在程序调试过程中遇到以下一些问题:
1.reference made to unresolved external :一般就是调用了没有声明的函数或者是不存在的函数所致的问题,对调用的函数进行声明,检查调用函数名称是否一致;
2.multiple public definitions :头文件中的声明需要加extern(不要初始化),之后还要在c文件程序中定义一下可加初始化;
3.segment too large :芯片内部RAM容量不够,需要占用空间较大的数据变量存储在外部RAM中即在定义变量时加上xdata;
4.unreachable code :无法执行到的代码,查看是否括号的位置放错了或者是已经跳出了程序。
本设计对大学所学的知识加以汇总应用,对理论知识进行实践,学以致用达到了预期的效果。这次的设计扩大了我的知识面,之前对于温度传感器、红外接收等都不知道,现在有大概的了解,在平时的课程设计中虽然有接触过单片机,学习了一些汇编语言,但是汇编语言写程序比较繁琐没有c语言简洁,此系统的软件设计就是使用了Keil uVision4软件,此软件中就使用了兼容51单片机c语言编写程序,在调试程序的过程中遇到了各种问题,通过网上搜索解决办法结合编写的内容进行调整,其中学到了很多知识,使得我对c语言的用法更加清晰,熟悉掌握书本上的知识点,不再是死记硬背而是通过实践理解消化。还有硬件部分的设计,通过查阅资料结合已有的电路图进行修改整合,最终完成系统电路的设计。

致谢

在这几个月中,感谢老师的指导提点,感谢学校给了我这次机会独立完成一个设计,为我之后的工作提供了有利的条件。这个过程中我发现要学习的东西非常多,一个知识点会结合很多方面,所以学习是永无止境的,只有不断积累知识,提高自身的综合素质才能顺应时代的潮流。还有很多同学也提供了帮助,不仅学习知识也学会动手,十分感激同学们。在学习或生活中还要学会互相帮助,懂得团体协作,这样就能事半功倍,而且还能发现自己的不足,学到他人的长处,总的就是要有团队合作意识。通过这次的实践,我也慢慢学会了自学,控制力也提高了很多,总之,在这次毕业设计中,我受益颇多,再次向同学、指导教师、学校致谢。

参考文献

[1]何宾.STC单片机原理及应用.清华大学出版社,2015.6
[2]李洪海等.传感器原理与监测技术.国防工业出版社.2015.2
[3]汤晓君,刘君华.多传感器技术的现状与展望.仪器仪表学报.2015.12
[4]刘海成.单片机应用系统设计原理与实践.北京航空航天大学出版社.2009.8
[5] Robert Ashby. Introduction to Microcontroller Basics. Designerys Guide to the Cypress PsoC.2005.6
[6] 王雷等.单片机系统设计基础.北京航空航天大学出版社.2012.5
[7]张俊.匠人手记.北京航空航天大学出版社.2008.6
[8]何立民.单片机应用选编.北京航空航天大学出版社.2006.5
[9]王为青,程国钢.单片机keil CX51应用开发技术人民邮电出版社.2007.2
[10] 关永峰,于红旗.单片机与嵌入式系统.电子工业出版社.2012.11
[11]Jack Ganssle Michael Barr. Embedded System Dictionary. CMP BOOKS.2006.1
[12]薛小玲.单片机接口模块应用与开发实例详解.北京航空航天大学出版社.2010.6
[13]郭慧等.单片机C语言程序设计完全自学手册.电子工业出版社.2008.10
[14]宋雪松,李冬明.手把手教你学51单片机:C语言版.清华大学出版社.2014.5
[15]冯帅.直流电机调速.西安交通大学.2009.9
[16]李宁,白晶,陈桂.电力拖动与运动控制系统.高等教育出版社.2014.12
[17] 王周缅,马良.双层PCB布线的混合蚂蚁优化方法.安徽大学学报.2007.3
[18]黄文杰,林超文.Altium Designer实战攻略与高速PCB设计.电子工业出版社.2015.7
[19]郭天祥.新概念51单片机C语言教程.电子工业出版社.2014.11
[20]谭浩强. C程序设计.清华大学出版社.2012.10

附录A:原理图
在这里插入图片描述

附录B:PCB图

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/529412.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 队列

目录 队列的应用场景 1、429. N 叉树的层序遍历 2、 103. 二叉树的锯齿形层序遍历 3、662. 二叉树最大宽度 4、515. 在每个树行中找最大值 队列的应用场景 广度优先搜索&#xff08;BFS&#xff09;&#xff1a;队列是广度优先搜索算法的核心数据结构。在BFS中&#xff…

allegro PCB设计心得笔记(二) -- ERROR(SPMHUT-144): Illegal arc specification

使用Allegro PCB Editor设计PCB&#xff0c;其中使用了中文丝印&#xff0c;设计完成后&#xff0c;进行Tools -> Database Check&#xff0c;提示如下错误&#xff1a; 对PCB文件进行反复检查&#xff0c;也没有找到具体问题&#xff0c;但是删除中文丝印封装后&#xff0c…

后悔没有早点看到这份产品说明书模板

产品说明书是连接产品与消费者的桥梁&#xff0c;它对产品具有多重好处。一份设计精良、内容准确的产品说明书有助于消费者全面了解产品&#xff0c;确保用户正确使用产品&#xff1b;减少消费者因误操作导致的故障&#xff0c;降低企业的售后服务成本&#xff1b;增强消费者对…

JAVA开发常见小问题整合

文章目录 1&#xff1a;身份证工具类相关方法1.1 身份证脱敏处理 2&#xff1a;字符串补零处理(此处是JAVA类的方法&#xff0c;并无引用StrUtil)3&#xff1a;springboot前后端分离&#xff0c;后端返回json字符串带斜杠问题处理4&#xff1a;WebUploader 文件上传组件 -编辑回…

Java学习笔记15——类型转换(基本数据类型)

Java语言&#xff0c;要求严格声明变量的类型。数据类型的转换是在所赋值的数据的数值类型和被变量的数据类型不一致时发生的&#xff0c;它需要从一种数据类型转换成另一种数据类型。 在Java中&#xff0c;对于除了boolean类型以外的7种基本类型&#xff0c;在把某个类型的值…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代&#xff0c;消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式&#xff0c;赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点&#xff0c;让您在…

​​​​​​​ARCGIS API for Python进行城市区域提取

ArcGIS API for Python主要用于Web端的扩展和开发&#xff0c;提供简单易用、功能强大的Python库&#xff0c;以及大数据分析能力&#xff0c;可轻松实现实时数据、栅格数据、空间数据等多源数据的接入和GIS分析、可视化&#xff0c;同时提供对平台的空间数据管理和组织管理功能…

大语言模型系列-GPT-3.5(ChatGPT)

文章目录 前言一、GPT-3.5的创新点二、GPT-3.5的训练流程SFT数据集RM数据集PPO数据集 三、ChatGPT的诞生总结 前言 《Training language models to follow instructions with human feedback&#xff0c;2022》 前文提到了GPT-3的缺点&#xff0c;其中最大的问题是&#xff1…

爬虫入门到精通_框架篇16(Scrapy框架基本使用_名人名言的抓取

1 目标站点分析 抓取网站&#xff1a;http://quotes.toscrape.com/ 主要显示了一些名人名言&#xff0c;以及作者、标签等等信息&#xff1a; 点击next&#xff0c;page变为2&#xff1a; 2 流程框架 抓取第一页&#xff1a;请求第一页的URL并得到源代码&#xff0c;进行下…

在用Java写算法的时候如何加快读写速度

对于解决该方法我们一般如下操作&#xff0c;不需要知道为什么&#xff0c;有模板&#xff08;个人观点&#xff09; 使用BufferedReader代替Scanner&#xff1a;Scanner类在读取大量输入时性能较差&#xff0c;而BufferedReader具有更高的读取速度。可以使用BufferedReader的r…

《C缺陷和陷阱》-笔记(4)

目录 一、边界计算与不对称边界 1.栏杆错误 2.程序简化 3.编写程序 4.移动字符 5.打印元素 二、求值顺序 一、边界计算与不对称边界 在C语言中&#xff0c;这个数组的下标范围是从0到9。一个拥有10个元素的数组中&#xff0c;它的元素的下标范围是从0到n-1。 例如&…

Buran勒索病毒通过Microsoft Excel Web查询文件进行传播

Buran勒索病毒首次出现在2019年5月&#xff0c;是一款新型的基于RaaS模式进行传播的新型勒索病毒&#xff0c;在一个著名的俄罗斯论坛中进行销售&#xff0c;与其他基于RaaS勒索病毒(如GandCrab)获得30%-40%的收入不同&#xff0c;Buran勒索病毒的作者仅占感染产生的25%的收入,…