智能电风扇控制器设计单片机课程设计_第1页
智能电风扇控制器设计单片机课程设计_第2页
智能电风扇控制器设计单片机课程设计_第3页
智能电风扇控制器设计单片机课程设计_第4页
智能电风扇控制器设计单片机课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计设计题目:智能电风扇控制器设计neuq目 录序言一、 设计实验条件及任务.21.1、设计实验条件1.2、设计任务2二、 小直流电机调速控制系统的总体方案设计.32.1、系统总体设计.32.2、芯片选择.32.3、dac0832芯片的主要性能指标.32.4、数字温度传感器ds18b20.3三、 系统硬件电路设计.4 3.1、at89c52单片机最小系统.5 3.2、dac0832与at89c52单片机接口电路设计.6 3.3、显示电路与at89c52单片机接口电路设计.73.4、显示电路与at89c52单片机电路设计.8四、 系统软件流程设计.7五、 调试与测试结果分析.8 5.1

2、、实验系统连线图.85.2、程序调试,.8 5.3、实验结果分析.8六、 程序设计总结.10七、参考文献. 11附录.12 1、源程序代码.12 2、程序原理图.23序 言传统电风扇不能根据温度的变化适时调节风力大小,对于夜间温差大的地区,人们在夏夜使用电风扇时可能遇到这样的问题:当凌晨降温的时候电风扇依然在工作,可是人们因为熟睡而无法察觉,既浪费电资源又容易引起感冒,传统的机械定时器虽然能够控制电风扇在工作一定后关闭,但定时范围有限,且无法对温度变化灵活处理。鉴于以上方面的考虑,我们需要设计一种智能电风扇控制系统来解决这些问题,使家用电器产品趋向于自动化、智能化、环保化和人性化,使得由微机控

3、制的智能电风扇得以出现。本文介绍了一种基于at89c52单片机的智能电风扇调速器的设计,该设计主要硬件部分包括at89c52单片机,温度传感器ds18b20,数模转换dac0809电路,电机驱动和数码管显示电路,系统可以实现手动调速和自动调速两种模式的切换,在自动工作模式下,系统能够能够根据环境温度实现自动调速;可以通过定时切换键和定时设置键实现系统工作定时,使得在用户需求的定时时间到后系统自动停止工作。在日常生活中,单片机得到了越来越广泛的应用,本系统采用的at89c52单片机体积小、重量轻、性价比高,尤其适合应用于小型的自动控制系统中。系统电风扇起停的自动控制,能够解决夏天人们晚上熟睡时,

4、由于夜里温度下降而导致受凉,或者从睡梦中醒来亲自开关电风扇的问题,具有重要的现实意义。一、 设计实验条件及任务1.1、 设计实验条件单片机实验室1.2、 设计任务利用dac0832芯片进行数/模控制,输出的电压经放大后驱动小直流电机的速度进行数字量调节,并显示运行状态dj-xx和d/ a输出的数字量。巩固所学单片知识,熟悉试验箱的相关功能,熟练掌握proteus仿真软件,培养系统设计的思路和科研的兴趣。实现功能如下: 系统手动模式及自动模式工作状态切换。 风速设为从高到低9个档位,可由用户通过键盘手动设定。 定时控制键实现定时时间设置,可以实现10小时的长定时。 环境温度检测,并通过数码管显示

5、,自动模式下实现自动转速控制。 当温度每降低1则电风扇风速自动下降一个档位,环境低于21度时,电风扇停止工作。 当温度每升高1则电风扇风速自动上升一个档位。环境温度到30度以上时,系统以最大风速工作。 实现数码管友好显示。二、小直流电机调速控制系统的总体设计方案2.1、系统硬件总体结构数字温度传感器 电机驱动及电机执行电路dac0832at89c52调速调时s1键调速调时s2键led数码管显示模式切换键k1定时功能键k2图2.1系统硬件总体框图2.2、芯片选择1、at89c52芯片:选用该单片机作为智能电风扇控制部件,用来实现电风扇调速核心功能。2、74ls245芯片:用来驱动数码管。3、74

6、ls373芯片:锁存器,用来锁存输出的信号。4、74ls240芯片:八单线驱动器,缓冲输出的信号。5、dac0832芯片:片选地址是ff80h,aout1插孔作为模拟量的输出。6、8255芯片:可编程并行i/o接口芯片,用以扩展单片机的io口。7、led数码显示管:用来显示电机旋转的速度是加速还是减速。8、741:运算放大器。9、9014:npn型三极管。2.3、dac0832的主要性能指标 d/a转换的基本原理是应用电阻解码网络,将位数字量逐位转换为模拟量并求和,从而实现将位数字量转换为相应的模拟量。其性能指标为:()分辨率:相对分辨率,越大,分辨率越高()线性度()转换精度()建立时间()

7、温度系数。dac0832引脚功能图如图2.2图2.2 数模转换dac0832引脚功能 1、di0di7:8位数字信号输入端; 2、!cs:片选端;ile: 数据锁存允许控制端,高电平有效; 3、!wr1:输入寄存器写选通控制端。当!cs=0、ile=1、!wr1=0时,数据信号被锁存在输入寄存器中。4、!xfer:数据传送控制 5、!wr2 :dac寄存器写选通控制端。当!xfer=0,!wr2 =0时,输入寄存器状态传入dac寄存器中 6、iout1:电流输出1端,输入数字量全“1”时,iout1最大,输入数字量全为“0”时,iout1最小。 7、iout2:d/a转换器电流输出2端,iou

8、t2+iout1=常数。 8、 rfb:外部反馈信号输入端, 内部已有反馈电阻rfb,根据需要也可外接反馈电阻。 9、vcc:电源输入端,可在+5v+15v范围内。 10、dgnd:数字信号地。 11、agnd:模拟信号地2.4. 数字温度传感器ds18b20ds18b20“一线总线”数字化温度传感器支持“一线总线”接口,测量温度范围为-55+125,在-10+85范围内,精度为0.15。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。ds18b20可以程序设定912位的分辨率,精度为0.15

9、,温度采集具有准确性、实时性。ds18b20的管脚排列如下:dq为数字信号输入/输出端;gnd为电源地;vdd为外接供电电源输入端(在寄生电源接线方式时接地)。如图2.3所示。图2.3数字温度传感器ds18b20引脚图ds18b20检测的温度高于一定值时,单片机引脚输出高电平,打开电风扇,当温度低于一定值时,单片机引脚输出低电平,控制电风扇停止转动。在此区间,每升高一度,风扇转速档位加一,风扇转速与档位的关系如表2.1所示:表2.1 风扇转速与档位的关系环境温度低于21.021.0-21.922.0-22.923.0-23.924.0-24.9转速档位01234环境温度25.0-25.926.

10、0-26.927.0-27.928.0-28.929.0以上转速档位56789三、系统硬件电路设计3.1、at89c52单片机最小系统:at89c52已包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高。图3.1为at89c52芯片最小系统。一方面,单片机要通过i/o口中接收输入信号,另一方面要通过i/o口控制数码管的初始化、显示方式以及要显示的字符。因此,设计必须以单片机为核心,显示器为外围设备。硬件上,单片机通过电路板电路与液晶显示电路相连;软件上,单片机要下载完整

11、的程序对二者进行适时的控制。图3.1 at89c52芯片最小系统图3.2.系统程序电路主程序cup电路图:at89c52单片机p0、p2口扩充电路图如图3.2:图3.2 at89c52系统管脚扩充图3.3、dac0832与at89c52单片机接口电路设计实验电路使用逻辑器件实现地址译码,地址ff80h接入数模转换器dac0832片选段,通过数模转换后的模拟量通过运放放大驱动电机驱动,其电路图如图3.3所示:图3.2 dac0832与at89c52单片机接口及电机控制电路3.4、显示电路与at89c52单片机电路设计实验电路使用io扩充芯片8255及锁存芯片74ls245对六个数码管选通控制显示

12、。显示部分电路图如图3.3所示:图3.3 数码管显示部分电路图四、系统程序流程设计4.1、系统程序流程框图如图4.1图4.1 程序流程图 五、调试与测试结果分析5.1、实验系统连线图a、p3.0、p3.1、p3.2、p3.3分别连按键k1、k2、s1、s2b、ds18b20 数据线连 p3.4c、将dac0832驱动电路aout接至直流电机d、将p0口接至dac0832数字输入端e、将地址译码器电路(ff80h)接至dac0832片选端5.2、程序调试 程序上电时,直流电机默认以中档5档工作,系统默认工作在手动模式下。数码管显示当前环境温度和电机运行档位。当按下按键s1(p3.2)时,直流电机

13、以加速转动,同时数码管显示档位速度,当速度达到最大时,继续按下键s1第5个数码管会显示“”表示系统已达到最大风速当按下按键s2(p3.2)时,直流电机以减速转动,同时数码管显示档位速度,当速度达到最小时,继续按下键s2第5个数码管会显示“”表示系统已达到最小风速。当按下系统模式控制切换键k1可以实现模式的切换,在自动模式下,数码管第一位显示“a”字样,表示工作于自动模式下,此时电机的转速由环境温度决定。并且显示环境温度和当前温度下电机运行档位。当按下定时键k2时,数码管闪烁的显示“000”,当按s1时,定时时间增加,数码管闪烁显示定时时间。按s2键时,定时时间减少,同时数码管也闪烁显示定时时间

14、。再次按下k2键后,闪烁停止,定时开始,数码管显示定时剩余时间。5.3、实验结果分析 电机运行正常时即可实现调速现象,按键的消抖使得调速现象更加明显。按键s1实现电风扇加速运行,按键s2实现电风扇减速运行。系统模式控制切换键k1可以实现模式的切换。定时键k2实现定时设定和定时确定。适当的控制按键,就可以实现所需要的效果。六、程序设计总结两周的单片机课程设计让我受益匪浅,无论从知识技能上还是团队合作方面。上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在课程设计使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让

15、我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在qq群里讨论或者是同学之间相互帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。我们组的题目是智能电风扇控制器设计,基本要求是实现电机速度的控制,并且通过数码管显示出来。由于我在学院的创新实验室有过一年多的编程经验,因此在实验箱上实现基本功能并没有很大难度,基本功能实现后,我们组想到了使设计更加智能化和多功能化,于是我们加入了数字温度传感器温度采集和自动控制,以及定时功能。并通过程序设计,实现比较人性化的数码管显示。在整个程序设计和电路设计调试过程中

16、,遇到了不少问题,最终也和组员共同解决了。主要的问题有:l 仿真和实际的电路调试有一定的出入,在仿真上按键能够很好的工作,但是在实际的电路调试过程中,按键往往不大灵敏,常出现按一下,系统反应多次的问题,最后通过延时时间的调整,使得按键较好的工作。l 由于数码管采用动态显示方式,延时扫描时间的不恰当使得数码管显示出现跳动或者不稳定的问题,通过延时时间的正确设置和对整体程序的分析,使数码管的显示稳定正常。l 随着系统功能的增加,程序变的复杂,调试起来对程序的分析带来了一定的难度,最后通过功能函数的模块化使得程序更加清晰和易更改。将数字温度传感器的函数单独设在一个c文件中,采用多文件编译的方式,也增

17、加了程序的易移植性。l 程序的要完全运行正确,不仅要弄清楚电路图,尤其是各接口的接法,还要注重每个小的细节,因为往往一个很小的错误,使得程序出现一些无法预料的结果,在程序的调试过程中,我们组出现了将=错写为了=,结果当然运行不出来。单片机是很重要的一门课程,学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习。 七、参考文献1陈海宴. 51单片机原理及应用. 北京:北京航空航天大学出版社,2012.2郭天祥. 51单片机c语言教程. 北京:电子工业出版社,2005.3胡启明,葛祥磊. proteus从入门到

18、精通. 北京:电子工业出版社,2012. 4 张兆明.基于at89s52单片机的自动温控电风扇设计.测控技术, 2009, 03(210820). 附录1:系统程序系统主函数/*设计题目:智能电风扇控制器设计设计者: 设计功能:1. 系统分为自动模式和手动模式,通过自动控制手动控制切换键k1(p3.1)可以实现电机转速控制,并用数码管显示其工作在何种状态。2. 手动状态可以通过s1、s2(p3.2加,p3.3减)实现9级风速增减调速,并通过数码管显示。3. 通过ds18b20可以实现风扇附近环境温度的检测,温度精确到0.1摄氏度,并通过数码管可以显示实时温度当系统工作切换到自动控制状态时,系统

19、根据环境温度自动控制转速的快慢。4. 两种工作状态下,均可以通过定时设置功能键k1(p3.0)可以实现风扇定时工作,通过时间增减键(p3.2加,p3.4减)实现定时时间设定时间到后风扇停止工作系统连线 p3.0、p3.1、p3.2、p3.3分别连按键k1、k2、s1、s2 ds18b20 数据线连 p3.4 系统参数: 1.转速档位 (本参数为仿真参数)共分为9个档位,从低到高为1-9档,通过数码管显示,对应电机两端电压分别为1.31v、2.62v、3.93v、5.24v、6.55v、7.86v、9.17v、10.5v、11.8v2.温度参数系统使用的ds18b20可以实现0.0625摄氏度的

20、精度。通过四舍五入,数码管显示可以实现0.1摄氏度的精度。3.自动模式下环境温度与转速关系环境温度范围与转速关系为:21以下,停止;21-22 1档;22-23 2档;23-24 3档;24-25 4档;25-26 5档; 26-27 6档; 27-28 7档;28-29 8档;29以上,9档 4.定时时间参数系统共设置7个定时时间,分别为1min,5min,10min,30min,1h,2h,5h*/#includereg51.h#include ds18b20.h#include /用于访问绝对地址#include #define uchar unsigned char#define ui

21、nt unsigned int#define on 1#define off 0#define confirm 2#define timegrade1 1/定时等级分别设置为1分钟,5分钟,10分钟,30分钟,1小时,2小时,5小时#define timegrade2 5#define timegrade3 10#define timegrade4 30#define timegrade5 60#define timegrade6 120#define timegrade7 300#define add xbyte0xff23 /控制寄存器#define pa xbyte0xff20 /位选为

22、8255,a口#define pb xbyte0xff21 /段选为8255,b口#define da xbyte0xff80 /p0对应的地址unsigned char tflag; /定时器时间标志unsigned char timegrade;/风扇定时等级unsigned int timego,time,t1flag; /风扇定时时间标志位int temp_t,temp_t_a; /采集温度值以及采集的温度绝对值uint volt_d=140,volt_a;bit secflag = 0;bit auto = off; /定义自动控制允许位uchar tc = off; /定义定时功能

23、允许位bit ch_full = 0; /定义调档以最大或者最小标志位bit tbzf = 0; /定义温度低于0时标志位uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x8b,0xbf,0xff; /共阳数码管编码表uchar code wei=0x01,0x02,0x04,0x08,0x10,0x20;void delayms(uint z);void initial(void);void ti

24、me_set(void);void display(uchar aa,uchar bb);void handle_display(void);void key_check(void);void anto_control_speed(void);void temptrans(void);void delayms(uint z) /延时函数uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display(uchar aa,uchar bb) /显示子程序pa=weiaa; /位选pb=tablebb; /段选delayms(2);void initial(

25、void)ex0 = 1; /开外部中断0ex1 = 1; /开外部中断1ea = 1; /开总中断it0 = 1; /下降沿触发中断0it1 = 1; /下降沿触发中断1tmod = 0x11; th0 = (65536-20000)/256; tl0 = (65536-20000)%256;th1 = (65536-50000)/256; tl1 = (65536-50000)%256; et0 = 1; tr0 = 1; et1 = 1;void handle_display(void)/操作时数码管显示,包括温度,档位,定时时间和剩余时间uchar i,j; volt_a=volt_d

26、/28;display(0,volt_a); /数码管输出档位 if(tc = off) /为设置时间时初始状态 if(tbzf=1)display(5,22);/在数码管1显示温度为负display(4,temp_t_a/100); /数码管输出模拟量十位display(3,temp_t_a%100/10+10); /数码管输出模拟量个位display(2,temp_t_a%100%10); /数码管输出模拟量一位小数 else time_set();for(j=80;j0;j-) display(4,(time-timego)/100); /数码管输出模拟量十位display(3,(tim

27、e-timego)%100/10); /数码管输出模拟量个位display(2,(time-timego)%100%10); /数码管输出模拟量一位小数display(0,volt_a); if(tc = on)for(i=100;i0;i-)display(4,23); /数码管输出模拟量十位display(3,23); /数码管输出模拟量个位display(2,23); /数码管输出模拟量一位小数display(0,volt_a); void key_check(void) /按键扫描函数unsigned char temp;temp=p3&0x03;if(temp != 0x03)del

28、ayms(30); if(temp != 0x03) /当p3.4和p3.5按下时 if(temp=0x01) /模式设置键被按下 auto=auto; else if(temp=0x02) /定时设置键被按下tc+;if(tc=3)tc=0; void temptrans(void)if(secflag = 1) secflag=0;temp_t=rd_temperature()/10;if(temp_t=300) volt_d=252;void time_set(void)if(tc = on) switch(timegrade)case 0:time=0;break;case 1:tim

29、e=timegrade1;break;case 2:time=timegrade2;break;case 3:time=timegrade3;break;case 4:time=timegrade4;break;case 5:time=timegrade5;break;case 6:time=timegrade6;break;case 7:time=timegrade7;break;else if(tc = confirm)tr1 = 1;display(5,22);elsetime=0;tr1 = 0;/关闭定时器2timego=0; if(timego=time)&(tc = confir

30、m)/定时时间到tc =off;/关闭时间显示标志tr1 = 0;/关闭定时器2timego=0;/定时后已运行时间清零volt_d=0; /定时时间到后,风扇停止转动void main() initial();while(1) temptrans();if(auto = off) /当系统为手动控制时子函数if(ch_full=1)display(1,22);/在数码管1显示一横线,表示档位已经最大或者最小 da= volt_d; /把数字量赋给数模转换器handle_display();if(auto = on)/系统为自动控制时函数display(5,20);/显示自动控制允许标志da=

31、 volt_d;anto_control_speed();handle_display();void ex0() interrupt 0 /外部中断0子程序delayms(200); if(tc = off)|(tc = confirm) /如果不是时间设置时,实现风扇调速if(volt_d0)ch_full=0;volt_d-=28; else ch_full=1;else/如果时间设置标志位打开,则定时设置 timegrade-;void isr_t1(void) interrupt 3th1 = (65536-50000)/256; tl1 = (65536-50000)%256; t1flag+; if(t1flag = 1200) t1flag = 0;timego+; 数字温度传感器ds18b20部分头文件#ifndef _ds18b20_h#define _ds18b20_h#include reg51.h#include intrins.hsbit dq = p34;bit init_ds18b20(void);void dela

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论