序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的温控风扇设计
摘 要
现代社会中,众多的工业生产、日常生活都离不开温控风扇的应用,其在工程建设的散热系统、手提电脑处理器降温等有着突出的作用。本命题对温控风扇系统进行了解释说明,单片机为其核心构成部分,通过温度传感器DS18B20获取温度信息,与系统设置的温度做比较,判断使用ULN2803电机做成的风扇系统对元件进行散热处理,同时能通过判断设定温度与采集温度的温差大小,来确定风扇系统的转速,采用LED八段数码管实现温度显示功能。
关键词:单片机、DS18B20、温控、风扇
第一章 各单元模块的硬件设计
本设计的主要硬件包含:①型号为DS18B20的输出离散型号的数字温度传感器;②型号为AT89C52的CMOS 8位单片机;③5位发光二极管封装的数码管显示器④风扇直流电动机;⑤型号为ULN2803驱动器。其他电子元器件包含:①多种不同阻值的电阻器;②多种不同电容量的电容器;③多个晶体振荡器;④各类电压源以及电流源;⑤多个按键;⑥多个DIP开关。
1.1 系统器件简介
1.1.1 DS18B20单线数字温度传感器简介
DS18B20属于DALLAS公司开发的一款数字温度传感器产品,该产品性能稳定、体积紧凑、功率损耗低、适用范围广,能够采集环境的温度信息并以数字信号的形式进行输出。若在一些微观领域使用DS18B20进行温度的测量,则可以充分发挥它的功能。
其工作特性如下:第一,可以对环境的温度信息进行捕捉,并将这些信息转化为离散的数字信号,信号的输出端仅设有一条线路,DS18B20在该线路上以串行通信的方式将数字信号传输于中央处理器CPU,在这个过程中,还可以进行循环冗余效验,保证了数据传输的准确性以及稳定性;第二,以摄氏度为单位,DS18B20的测温区间为[-55,125],在区间[-10,85]内,DS18B20可以控制在0.5摄氏度以内的测量误差;第三,DS18B20温度分辨率设有0.5℃ 9bits、0.25℃ 10bits、0.125℃ 11bits、0.0625℃ 12bits这4个级次,即最高采样位数为12bits,显示温度的最小变化量为0,0625摄氏度;第四,DS18B20“一线总线”的模式,可以实现使用一条线路与MPU进行半双工通信;第五,多个DS18B20可以连接于一根接线上,构成温度监测网络,对环境温度进行大范围的监测;第六,DS18B20工作时,以V为单位,其两段的电压值区间为[3.0,5.5][3]。
它的内部包含4个核心器件:①64 bits的只读存储器;②用于采集温度信息的传感器;③温度高位与温度低位的触发报警器④寄存器。DS18B20含有引脚(3个),其中DQ端用于输出数字信号,GND端用于接地,VDD端用于外接电源的输入。
1.1.2 达林顿反向驱动器ULN2803简介
本文主要对基于单片机的温控风扇进行设计,电机在需要一定的驱动电流才能正常工作,因此需引入相应的驱动电路。本设计选取ULN2803作为电机工作电流的驱动器。反向驱动器ULN2803的硬件接口较少,可以简化系统开发者的安装操作流程,并为本系统的风扇直流电动机提供充足的工作电流,ULN2803的本质为CMOS器件中的接口型集成芯片,1~8脚为输入端,11~18脚为输出端,可集中驱动8路小型直流电机。在本系统中,AT89C52的8个I/O口与ULN2803的8路输入进行连接,输入TTL高电平,进而实现对8个相应电机的控制。
ULN2803的内部由8路NPN达林顿管构成,并采用合适的形式进行封装,包含18个管脚,1脚至8脚为输入端口,可接收TTL电平以及CMOS电平;11脚至18脚为输出端口,可输出充足的电压以及电流;9脚为GND端,用于接地;10脚为供电输入端口,接正极电源。若在1~8脚中输入5V的TTL高电平或者输入6V至15V的CMOS高电平,那么对应的11~18脚最高输出电压可以达到50V,相应的电流可达500mA,以摄氏度为单位,ULN2803可正常运行的温度限值区间为[0,70],本设计将选取工作电压为12V的直流电机,因此ULN2803符合该电机的驱动条件。
1.1.3 AT89C52单片机简介
AT89C52属于COMS 8位单片机,由制作商爱特梅尔公司推出,是一款性能极佳、工作电压低的单片机产品。AT89C52的组件使用爱特梅尔的NVM技术制作,可兼容Intel 8051系统,内部装有8 bits CPU、容量为8KB的ROM、容量为256B的RAM。AT89C52功能强大,适用于各种不同系统的开发,它含有40只管脚,对应的功能如下:
VCC:作为供电输入端口,接5V电压。
GND:用于接地端或0线。
P0.7~P0.0:P0端共含有八只管脚,从P0.0至P0.7位数逐渐上升。P0.7~P0.0包含两种使用情况:①若AT89C52不连接外部存储器,且确保P0口功能的正常,则需要在P0的引出端中插入一个电阻并输入高电平,进而实现中央处理器通过P0端与外部设备进行数据交换以及信息传输的功能。②若AT89C52外部接有存储器,那么在中央处理器与外部存储器进行数据传输时,相应引脚会先传输外部存储器的低八位地址信号,再传输中央处理器对应的读写信息 [4]。
P1.7~P1.0:P1端包含了P1.7~P1.0这8个管脚,属于插入了上拉电阻的半双工通信I/O接口,具备一般I/O端的功能,能够用于传输I/O信息,不同之处在于P1端内部预先插入了上拉电阻,因此P1端可直接通路使用。在使用AS语言进行编程时,可以通过P1端对AT89C52的EPROM的低八位地址信息进行输入。
P2.7~P2.0:P2端包含了P2.7~P2.0这8个管脚,属于插入了上拉电阻的半双工通信I/O接口,具备一般I/O端的功能,传送用户的输入/输出数据,此外,P2还能与P0.7~P0.0管脚的②功能配合使用,实现外接存储器高八位地址信号的传输功能,输出16位地址信号,进而协同选取外接存储器的存储元集合,不足之处在于,二者配合使用时无法输出中央处理器对外接存储器的读写信息。对于一些其他不同的51机,P2.7~P2.0脚还能够与P0.7~P0.0脚协同使用,输入单片机内部EPROM的高四位地址信号。
P3.7~P3.0:P3端包含了P3.7~P3.0这8个管脚,属于插入了上拉电阻的半双工通信I/O接口,在对P3端进行写1操作后,其将输出高电平。P3端具备一般I/O端口的功能,可以让CPU与外部设备进行数据的输入与输出, P3口也作为一些特殊功能端口使用,如下所示:
图1.1 AT89C51单片机
P3.0:RXD(串行数据接收口)
P3.1:TXD(串行数据发送口)
P3.2:(外部中断0输入)
P3.3:(外部中断1输入)
P3.4:T0(记数器0计数输入)
P3.5:T1(记时器1外部输入)
P3.6:(外部RAM写选通信号)
P3.7:(外部RAM读选通信号)
ALE/:地址锁存器允许/编程线,在访问片外存储器时在ALE/
线上输出高电位脉冲,此时外部存储器在引脚P0.7~P0.1的地址为低八位地址。该低八位地址是外部存储器专门用于外部地址的锁存器。为了上述工序完成后更好地储存读取相关数据,单片机自动进入以ALE/
线上输出频率为1/6晶振频率的脉冲序列
:是读取外部程序存储器的先通信号,CPU从外部获取指令时,
在一次工作周期中仅仅释放两次有效信号。但存在一种特殊情况,那就是读取外部存储器相关数据的过程中,不会释放
信号。
/VPP:允许访问片外存储器/编程电源线。程序存储器的选取是由电平状态决定的
当处于高电平状态时,只选用片内程序存储器;当
处于低电平状态时,只选用外程序存储器。在固态存储器与动画编辑器工作过程中,
经常性地使用12V编辑电压(VPP)。
1.1.4 LED数码管简介
在本系统中,温度由五根LED管表示。LED管又名数码管,由八段具有发光功能的二极管组成,根据外界条件的变化,这八段具有发光功能的二极管可以组成成千上万种不同的组合。如下图2.1.2所示,其中标有字母a-g的二极管根据不同的发光组合可以用来表示数字0-9或字母A-F;标有dp的二极管则表示小数点。一般而言,LED管结构主要分为两类:①共阴极结构;②共阳极结构;其具体的结构设计图如图2.1.2(a)、(b)所示。两种结构不同的地方在于这八段二极管终端接连的差异,通过观察和分析两者的结构设计图可以得出,共阳极结构中,八段二极管与阳极相连接;共阴极结构中,八段二极管与阴极相连接。控制电平的高低状态可以使得二极管按照预先设定的组合发光,以此表示具体的数字组合或者字母组合,最终形成一段字形码,又称为段选码[5]。
图1.2 七段LED数码管
表1.1段LED的段选码表
显示字符 | 共阴极段码 | 共阳极段码 | 显示字符 | 共阴极段码 | 共阳极段码 |
0 | 3fH | C0H | 8 | 7fH | 80H |
1 | 06H | F9H | 9 | 6fH | 90H |
2 | 5bH | A4H | A | 77H | 88H |
3 | 4fH | B0H | B | 7fH | 83H |
4 | 66H | 99H | C | 39H | C6H |
5 | 6dH | 92H | D | 3fH | A1H |
6 | 7dH | 82H | E | 79H | 86H |
7 | 07H | F8H | F | 71H | 8EH |
在采用共阴极结构的单片机中,给“a、b、c”三个二极管输入高电平时,即这三个二极管同时发光时就会显示数字“7”。其具体操作为在P0输入端输入段选码07(H),即00000111就可以显示数字“7”。其他数字与段选码的相互关系如上表2.1.1所示。
1.2 各部分电路设计
1.2.1 开关复位与晶振电路
复位不仅在单片机中发挥着非常重要的作用,还在外部组成结构之一的I/O接口电路中发挥着至关重要的作用。因此,需要设计一个具有复位功能的开关,除此之外,该开关还需同步单片机系统和外部I/O接口电路,以此简化整个操作过程。另外,借助XTAL1和XTAL2引脚有利于确保石英晶体以及微调电容接触状态良好。按照以上方法设计的具有复位功能的开关示意图如图2.2.1所示。具体功能如下:当按触S1时,单片机系统进行复位,此时电容C1、C2、C3以及电阻R2、R3都参与了整个复位过程。
图1.2 系统复位与晶振电路
1.2.2 独立键盘连接电路
该独立键盘拥有两个具有特定功能的按钮,分别为:S2和S3。其中S2和单片机系统的P13接口相接;S3和单片机系统的P14接口相接。当单片机系统通电并按下S2、S3任一按钮之后,P1处会显示实时的电平状态。此时可以通过按触两个按钮调节初始温度大小,S2按钮为减按钮,S3为加按钮,每一次按触的变化值都是单位1,按触后系统会计算出最终的初始温度值。其接线图如下:
图1.3 独立键盘连接电路
1.2.3 数码管显示电路
本设计制作中选用5位共阴极数码管作为显示模块,它和单片机硬件的接口如图2.2.3所示。该5位共阴极数码管按顺序可分为DS1、DS2、DS3、DS4以及DS5。其中DS1~3作为前3位共阴极数码管,其主要负责测量温度的工作。一般而言,其能测量的温度范围在0℃至100℃之间,另外,在该测量范围内,其最终测量的温度精准度控制在±0.1℃。除此之外,初始温度值由后2位数码管DS4、DS5显示,而且改2位数码管有且仅有显示温度初始值得功能,其可显示的初始温度值区间为[0,99]。其各线路的衔接如下图2.2.3所示。通过观察下图,可以发现5位数码管借助a-g以及dp线与单片机相连接,其接口也是按照字母顺序对接单片机的P00-P07接口。除此之外,还需要给单片机P0接口处添加一个电阻为10K的电阻R,有利于精准地控制电平状态。
图1.4 数码管显示电路
1.2.4 温度采集电路
内部计数时钟周期是DS18B20温度转换器的技术核心,当内部计数时钟周期正常运作时,DS18B20温度转换器才具有测量温度的功能。高温系数振荡器发出的门周期是后续计算低温系数振荡器时钟信号一个重要参数。此外,以-55℃作为一个权届值,然后预先设定相关数值与-55℃相对应,再以该权届值为界限,若当计数器输出结果为0时,高温系数振荡器还处于震荡状态,则表明此次测量的温度大于-55℃,此时原先存在在显示屏的温度值就会加1℃。重复以上过程直至高温系数震荡器停止震荡,该时显示屏显示的数值为温度的测量值。除此之外,该数值会被换算为16位二进制的表示形式储存在内部存储器。当需要读取温度测量值时只需要向系统输入相关指令 [6]。
单片机有利于DS18B20温度转换器实现其测量温度的功能。因此,在实际使用情况中,往往将DS18B20温度转换器的信号线与单片机的I/O线相连接。除此之外,单片机的I/O接口还可以同时与多个DS18B20温度转换器相连接,提高单片机的使用效率,有利于测量多点温度值[7]。其具体连接模式如下图2.2.4所示:
图1.5温度采集电路
1.2.5 风扇电机驱动与调速电路
本系统由AT89C52通过I/O端进行PWM脉冲的输出,再使用ULN2803将输出的电流电压参数放大至适宜的值,ULN2083与电机链接并发挥驱动作用,最终使工作电压为12V的直流电机正常运作并实现电机转速的调控功能。
通过PC机的如键盘等终端设备进行目标环境温度值的设定,并使用51机相关软件将目标温度控制值转化为AT89C52的操作指令,进而使AT89C52的1.7引脚输出用于调控电机转速的PWM脉冲,该脉冲在其电流电压参数由ULN2803放大后可用于对电机的控制电路进行驱动,通过这些流程后最终可实现风扇电机的启动、关停以及工作频率的自动化调控功能[8]。若外界的温度值上升,那么风扇的工作频率也将上升,随之转速上升;若外界的温度值降低,那么风扇的工作频率也将下降,随之转速降低;若外界温度低于目标温度值,那么风扇将停止运作;若外界温度高于目标温度值,那么风扇将重新运行,进而实现风扇电机转速根据环境温度的自适应调节功能。
电机的驱动与控制电路见图2.2.5,从该图中可以清晰地看到VCC输入+12V直流电压至MOTOR-DC,同时MOTOR-DC与ULN2803的输出端OUT7管脚连接;ULN2803的输入端IN7管脚与AT89C52的TXD引脚相接,同时GND脚接地,COM口接+12V的VCC输入电压,此时AT89C52的TXD脚将输出PWM脉冲,通过ULN2803的放大作用实现对MOTOR-DC的启动、关停以及工作频率的调控功能。
图1.6 风扇电机驱动与调速电
本设计选取了工作电压为12V的直流电机,若ULN28031的1~8脚输入5V的TTL高电平或者输入6V至15V的CMOS高电平,那么对应的11~18脚最高输出电压可以达到50V,相应的电流可达500mA,以摄氏度为单位,ULN2803可正常运行的温度限值区间为[0,70]。因为本设计采用了51系列单片机AT89C52,其I/O端输出TTL高电平,满足ULN2803的使用要求,所以能够选取ULN2803作为电机的驱动器件。
第二章 系统调试
2.1 软件调试
2.1.1 按键显示部分的调试
首先,按照设计方案编写了系统程序:P0端口与数码管相连,P1端口与键盘接口相接,P2端口用于控制LED位码,用于控制键盘的使用功能和数码管的显示。此种情况下,并未显示编译出现错误,但在模拟调试中,数码管显示出现乱码情况,数码管上显示的设定温度也不正确,通过按键调节设定温度时显示器上的温度并没有发生任何的变化。
通过对每一个部件进行查找和分析原因所在之处,发现键盘程序存在一定的问题,即键盘扫描程序并没有安装相应部件来防止震动现象的出现。这是因为当键盘中的某个按键被按下和松开时,因为惯性的原因按键均会出现一定程度的震动,致使单片机对此现象做出错误的判断,导致在通过按键来改变设定温度时出现故障,甚至某种程度上使其不工作。为了消除此类问题的发现或者减轻此类问题对仪器的影响则需要增加消除抖动部分在按键扫描程序中,即当按键被释放时延迟判断时间增加,其目的是用来确保按键是完全按下还是完全释放。
数码管不能显示准确的主要原因是所有数码管段码都是通过P0端口传输的,而数码管屏幕认可的模式是动态扫描。然而,该系统程序中现有的寄存器没办法存储显示段码,导致P0端口传输段码时产生混淆,无法识别正确的段码。这就是为什么有必要向系统添加一个连接或设置程序的段代码空间的原因。
在键盘扫描程序中上加入防震程序以加长按键的延迟判断时间,在数码管显示程序中加入可以用于保存段码的寄存器后,数码管显示并未出现乱码现象且可以正常显示,按键也可以正常工作且没有延迟现象发生,在模拟调试时取得了很好的效果。
2.1.2 传感器DS18B20温度采集部分调试
由于数字温度积分传感器DS18B20集成度高,给软件设计和调试带来很大的方便。其体积小、能耗低、精度高,为检测仪器的精度和稳定性提供了支持和可能。软件使用P3.1端口作为数字温度输入端口,但必须在数字信号输入出现之前对其进行处理,因此这里有温度转换程序,此程序经过编程和软件设计之后可以实现对外部环境连续测温。但是也存在一定的问题,即由于硬件LED数量的限制,此处仅显示部分默认温度的整数部分。
现阶段市面上的温度转换程序会将检测到的外界环境温度以10倍的形式在显示屏上显示,以解决温度传感器只显示测得的外界环境的整数部分而不显示小数点后的数字的问题,然后将其作为三位整数进行数字处理,例如将28.5更改为285,使编码变得更加简单方便,加快了编程的速度。
2.1.3对电动机调速部分进行调式
在本设计中,使用了一个达林顿驱动器ULN2803来驱动直流发动机,它可以驱动八台发动机。直流电软件将端口设置为P3.1端口以输出不同形式的PWM波。达林顿驱动器ULN2803驱动直流发动机运行。通过软件的程序任务定义,不同形式的PWM波在不同的温度下输出,从而通过不同的方式对对电风扇的发动机进行控制。一般情况下,外界环境温度高于系统设定温度时发动机会主动开始转动或转速自动增加,反之发动机不会转动或停止。此外,当外部温度与固定温度之差较大时,发动机转速会较高,因此工作循环会增加。
在该系统中,风扇的发动机转速可以达到四级调速。将温度传感器检测到的温度与系统温度的默认值进行比较,可以实现速度的转换执行。当检测到的温度比默认温度升高5摄氏度时,风扇的发动机转速升高一个阶段。
2.2 硬件调试
2.2.1 按键显示部分的调试
系统的按键部分功能如下:(1)按一下P1.3键时显示屏上的最后两个数字显示设定温度增加1℃;(2)按一下中间的P1.4键,最后两个LED数字显示温度降低1℃。但当按键时间过长时,系统设定的温度却不是增加1℃或减少1℃的情况,一般情况下是在呈现先增加后减少的变化特点。经调查分析,造成这种情况的主要原因可能是系统中加入的防震程序设定出现问题使增加按键释放时延迟判断时间过长,故在此基础上有所改变,具体改进方法是适当增加按键释放时的相应延迟时间,但同时控制时间不宜太久,否则密钥将无效。
系统显示部分的主要功能如下:环境温度包括整数和小数两部分以前三位LED显示屏上的数字出现,最后两位LED数字显示按键设置的所需温度。结果表明LED显示屏的显示效果非常好,可持续性很强。
2.2.2温度采集部分调试
将DS18B20芯片连接到P3.1端口。通过对应系统板右下角的三个端口,特别是VCC、P3.1和GND,芯片可以直接插入此插针上。这一步操作的目的是为了使后续操作更加简便。在系统调试中,为了验证DS18B20是否能在系统板工作,通过合上手掌或握住芯片进行检测。如果结果显示LED屏幕上的前两个数字的温度迅速上升,则表明DS18B20可以在系统板工作,反之则不能在系统班上工作。因DS18B20有三列,在调试过程中需要看每一列的对应位置是否正确,避免使芯片不能正常工作甚至烧坏如果连接了芯片。
2.2.3 电动机调速电路部分调试
电动机调速电路部分的调试重点在于调试相关软件的设计开发,因为该电路部分外侧的电路主要用于将外界接收的PWM信号放大而驱动电机转动。一般情况下在P3.1端口设置在系统软件,其目的是使电动机转动放大的PWM信号占空比。当外部环境温度高于系统的设定温度时,发动机转速会自动增加或开始转动。若系统中的热源温度显著高于外界环境温度或测温芯片DS18B20离热源距离较近几乎相接触时,发动机的转速会一直升高且转速会越来越快,当发动机的转速达其所能达到的最高值时转速将不再升高。当热源距离测温芯片DS18B20较远时,发动机的转速会逐渐下降,当发动机的转速达到一个最低临界值且此时将系统设定的温度升高并使设定温度高于外部环境温度时,发动机的转速一直下降直至变为0。此电路调试系统中选用的发动机是额定电压为12 V的直流发动机,选用的电源是输出电压最高值为5 V的单片机电源。在调试过程中,采用原直流发动机5V进行调试,发现控制效果客观。
2.3 系统功能
2.3.1 系统实现的功能
单片机系统可以用来检测环境中的温度变化,直流电机的流量循环变化可以通过环境温度的变化来控制,从而使发动机产生不同转速。同时,本系统可以根据键盘中的按钮来调节和设定不同的温度以增大设定温度和外部环境温度的差值来控制发动机的转速。当外部环境温度高于系统所设定的温度时,不同占空比的PWM信号可以通过单片机中的不同输出端口输出此信号以达到控制发动机启动转动的目的,研究发现发动机转速随着外部环境温度与系统设定温度的差值变化而变化,一般规律为差值越大转速越快,反之发动机停止转动。另外,此系统还具有另外一大优势便是动态显示当前所处的环境温度和设定温度,并可以通过键盘按钮设定当前温度。
2.3.2 系统功能分析
整个系统由按键和复位回路、数码管显示回路、温度检测回路和发动机驱动回路五部分组成。一是温度检测回路也就是整个系统中最重要的部位,其主要的功能是用于准确无误地测定所处环境的温度并将其传输给单片机,对环境温度及时进行评估以控制发动机的转速。二是发动机驱动回路,此部分采用了达林顿变化驱动器ULN2803以实现从单片机中输出的波形不同的PWM转化为不同的平均输出电压,以达到更好的控制发动机的转速;三是数码管动态显示回路,该部分的主要作用是可以实时显示所测得的环境温度和设定温度,键盘部位则可以自主调节设定温度而DS18B20可以测定外部环境温度,然后记录环境温度和设定温度并将其连续及时显示。
主程序流程图
Keil C51软件的使用界面
Proteus使用界面
Proteus仿真效果图一
Proteus仿真效果图二
Proteus仿真效果图三
Proteus仿真效果图四