基于单片机实现的小风扇.docx
- 文档编号:8513000
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:26
- 大小:250.41KB
基于单片机实现的小风扇.docx
《基于单片机实现的小风扇.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的小风扇.docx(26页珍藏版)》请在冰豆网上搜索。
基于单片机实现的小风扇
一、设计任务及要求…………………………………………1
1.设计任务……………………………………………………1
2.设计要求……………………………………………………1
二、作品特色……………………………………………………2
三、设计思路……………………………………………………2
1.调速功能……………………………………………………2
2.自然风功能…………………………………………………3
3.显示功能……………………………………………………4
4.定时功能……………………………………………………5
5.防倾倒功能…………………………………………………6
6.USB接口实现………………………………………………7
7.遥控功能……………………………………………………7
四、调试问题及解决方案………………………………………7
1.三极管放大电路无法带动小风扇转动………………………………7
2.防倾倒功能中断无法实现中断……………………………………8
3.遥控无法实现…………………………………………………8
五、软件设计及源程序…………………………………………9
1.软件设计……………………………………………………9
2.源程序………………………………………………………10
六、总结………………………………………………………20
七、参考书目…………………………………………………21
一、设计任务及要求
1.设计任务
制作一个小型风扇
2.设计要求
1、基本要求:
1)实现高速,低速档选择。
(能明显感觉到风力变化即可)
2)使用USB供电
3)实现自然风功能。
自然风是指一段时间高速,过一段时间改为低速,如此往复。
2、发挥要求:
1)可以用遥控器遥控
2)可以设定定时关机
3)风扇倾倒时可自动关闭
4)其他创新功能
二、作品特色
本作品以89C52芯片作处理器,以小直流电机为风扇的动力,使用USB接口提供电源,外壳以木板为主,有较强的机械性能.本作品可实现以下功能:
1.空档、低速、高速、自然风由个档位可自由切换.2.定时控制换档功能:
用户可以设置一定的时间,风扇在设定的时间过后会自动切换到用户指定的档位上.3.倾倒自动关闭风扇并报警.
关键词:
89C52,光控防倾倒,数码管显示,人性化定时。
三、设计思路
1.调速功能
方案一:
利用给风扇串联电阻分压降流来实现调速功能;
方案二:
利用单片机模拟输出PWM波作为控制信号,利用放大电路调速。
经比较,选用方案二。
本作品是基于8051单片机,单片机内部定时器可以输出占空比可调的方波,通过改变P3.6口输出的不同占空比不同的方波,可以方便实现高速和低速转换。
利用三极管做开关电路。
无级调速功能:
放大电路部分串联一个电位器(100Ω),当阻值在0-100Ω之间变化时,由于Vb在2.8-3.3V之间,故由Ic=Vc/Rc(Vc 同时,风扇的高速档、低速档、自然风档同样适用。 参数计算: Hfe=300,Ic=180-250mA,Vb=Vcc-1.0-Vbe=3.3V 则Ib=Ic/hfe=0.7mA Rb=Vb/Ib=4.7KΩ。 Rc=Vc/Ic≈10Ω(Rc为滑动变阻器,用于无级调速 2.自然风功能 单片机定时器可以调节高速和低速转换的频率,从而实现自然风功能,程序如下: while(mode==3)//自然风 { TR1=1; shijian(); keyscan(); P1_0=0; P0=0xfe; if(m==0) di(); else gao(); } voiddi()//低速,占空比70% { feng=0; delay1ms(7); feng=1; delay1ms(3); } voidgao()//高速,占空比100% { feng=0; delay1ms(10); feng=1; } /*定时中断1*/ voidtimer1()interrupt3using1 { n++; if(n==100) { n=0; m=~m; } } 自然风是通过交替调用高速与低速两个函数来实现的,再用定时器设定高低速切换时间就可实现自然风了。 3.显示功能: 显示模块由发光管和数码管组成,发光管可以显示当前档位,分为停止、低速、高速、自然风四个档位。 数码管可以显示定时时间,显示控制由单片机软件控制。 原理: 数码管动态显示原理。 4.定时功能 定时功能的实现主要用现单片机的计时中断0。 该作品除了简单的定时外,还有定时控制功能,例如: 在某一时刻风扇正在低速运作,通过设定计时器可使风扇在N时间后自动跳到任意一档。 N由用户设定。 定时功能由单片机定时计数器中断实现,程序如下: /*定时中断0*/ voidtimer0()interrupt1using1 { timecount++; TH0=(65535-50000*T)/256; TL0=(65535-50000)%256; if(timecount==20) { timecount=0; second--; if(second<0) { if(minute==0) { second=0; minute=0; TR0=0; mode=hou; xianshi=0; } else { second=59; minute--; } } } } 5.防倾倒功能 方案一: 利用机械开关和风扇座重力实现开关功能,缺点是稳定性不好。 方案二: 利用光敏元件结合单片机中断实现让风扇停止转动功能。 方案三: 利用防倾倒开关,缺点是对材料性能要求较高。 经比较选择方案二。 利用光敏电阻在黑暗和光照条件下阻值不同,与一个定值电阻串联后,在亮度变化时会产生一个高低电平跳变,将跳变输入单片机外部中断口,利用软件控制P3.6口电平,从而控制风扇停止转动。 参数测量及计算: 光敏电阻在有光照时电阻约为5KΩ-8KΩ之间,黑暗条件下阻值可达10MΩ。 利用这个变化,串如阻值为100K的电阻,两电阻之间的电位可以实现高低电平跳变。 6.USB接口的实现 USB输出电压为5V,电流为500MA。 USB接口有四个引脚,两个数据传输,两个电源,本作品中只使用两个电源引脚。 经测量,小风扇正常工作电压为1.2V-1.7V,电流为180mA-250mA。 所以完全可以带动小型风扇。 7.遥控功能 利用PT2262和PT2272红外编码和解码电路,解码后输出电平信号输入单片机I/O口,通过扫描程序实现对单片机的控制。 四、调试问题及解决方案 1.三极管放大电路无法带动小风扇转动 原因分析: 小风扇启动电流过大,USB电源无法满足 解决方案: 更换三极管和电阻之后仍无法解决,更换功率较小的风扇。 测试结果: 更换小风扇工作电压为2V-5V,工作电流为120-180mA。 按设计思路中计算方法计算后最终确定电路图及元件参数如图。 定值电阻R3=20Ω是为保证电动机两端电压而加的保护电阻。 2.防倾倒功能中断无法实现中断 原因分析: 电阻串联电路接至中断口(P3.2)时,无法使P3.2置低电位,原因是单片机I/O口有一定的输出电流,使光敏电阻两端的电压恒大于3V,无法置低电位。 解决方案: 通过与非门电路实现,与非门的引脚输出电流较低,高电平输出≥3.4V,低电平<0.3V.直接与单片机IO口连接时可以不受IO口电流的影响。 修改后电路如下,由于TTL门电路的输入高电平≥2.3V左右低电平为<1.5V,所以输入的高低电平不一定为严格的5V和0V。 同时为保证较弱光照时与非门输出低电平,所以R=2KΩ。 测试结果: 经测试,可以实现光控防倾倒功能。 附: TTL门直流参数 参数名称和符号 规范值 单位 测试条件 直流参数 通导电源电流 ICCL <14 mA VCC=5V,输入端悬空,输出端空载 截止电源电流 ICCH <7 mA VCC=5V,输入端接地,输出端空载 低电平输入电流 IiL ≤1.4 mA VCC=5V,被测输入端接地,其他输入端悬空,输出端空载 高电平输入电流 IiH <50 μA VCC=5V,被测输入端Vin=2.4V,其他输入端接地,输出端空载。 <1 mA VCC=5V,被测输入端Vin=5V,其他输入端接地,输出端空载。 输出高电平 VOH ≥3.4 V VCC=5V,被测输入端Vin=0.8V,其他输入端悬空,IOH=400μA。 输出低电平 VOL <0.3 V VCC=5V,输入端Vin=2.0V, IOL=12.8mA。 扇出系数 NO 4~8 V 同VOH和VOL 交流参数 平均传输延迟时间 tpd ≤20 ns VCC=5V,被测输入端输入信号: Vin=3.0V,f=2MHz。 3.遥控无法实现 故障: 红外接收头输出端没有电平变化。 红外发射管管脚电压变化范围不大 原因分析: 可能原因: 1.电路有问题;2.电路是按照PT2262-1R芯片设计的,芯片不适合。 解决方案: 改用简单红外发射电路,发射电路由三极管放大电路组成,通过开关控制发射管通断,接收头导通,输出端电位由高到低变化,通过管脚扫描程序,实现循环控制风扇运行在各档位。 测试结果: 实现档位控制功能,但无法实现遥控定时。 最终实现功能: 实现高速,低速档选择,自然风功能,可以用遥控器遥控档位,可以设定定时关机、定时换挡,防倾倒功能,数码显示定时功能,无极调速。 不完善之处: 遥控无法直接档位选择,没有实现遥控定时功能;防倾倒在黑暗条件下无法正常运行;无极调速操作人性化程度不够。 五、软件设计及源程序 1.软件设计: 本作品的程序全部都由自已编写的,设计时的步骤如下: 1,总体规划,对要求的功能进行分析. 2,划分模块,主函数用mode参数将程序划分为四个模快,分别代表四个档位. 3,细化模快,在每个模快编写函数以实现相应的功能. 4,检查修补.检查程序,主要检查模快与模块之间的联接与切换. 5,下载调试.检查软硬件之间的衔接有没问题. 2.源程序: #include sbitP0_0=P0^0; sbitP0_1=P0^1; sbitP0_2=P0^2; sbitP0_3=P0^3; sbitP0_4=P0^4; sbitP0_5=P0^5; sbitP0_6=P0^6; sbitP0_7=P0^7; sbitP1_0=P1^0; sbitP1_1=P1^1; sbitP1_2=P1^2; sbitP1_3=P1^3; sbitP1_4=P1^4; sbitP1_5=P1^5; sbitP3_2=P3^2; sbitP3_3=P3^3; sbitfeng=P3^6; sbitSPK=P3^7; /*******函数声明*****/ voidinit();//初始化 voiddelay1ms(unsignedint);//延时程序 voiddi();//低速运行程序 voidgao();//高速运行程序 voidkeyscan();//键盘扫描 voidshijian();//倒计时显示 voidshow(intwei,intshu);/*数码管显示*/ /*****变量声明*******/ codeunsignedcharm_ucLedTab[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xC6,0xa1,0x86,0x8e,0xff };/*数码管十六进制编码表*/ codeunsignedcharLedTab[]= { 0xef,0xf7,0xfb,0xfd,0xfe }; codeunsignedcharhouTab[]= { 0xf7,0xfb,0xfd,0xfe,0xff }; staticunsignedintnum[4]={16,16,16,16}; staticintminute,second,mode=0,xianshi=0,h,hn,hou,m,n,hongwai; unsignedcharfrq; doubleT=1; inttimecount=0; voidmain() { init(); while (1) { while(mode==0)//空档 { shijian(); keyscan(); feng=1; P1_0=0; P0=0xf7; } while(mode==1)//低速 { shijian(); keyscan(); P1_0=0; P0=0xfb; di(); } while(mode==2)//高速 { shijian(); keyscan(); P1_0=0; P0=0xfd; gao(); } while(mode==3)//自然风 { TR1=1; shijian(); keyscan(); P1_0=0; P0=0xfe; if(m==0) di(); else gao(); } while(mode==4) { inti; feng=1; TR1=1; P1=0x00; P0=((P0>>1)|(P0<<7)); for(i=0;i<60;i++) { frq++; delay1ms (1); } } } } /*数码管显示*/ voidshow(intwei,intshu) { intb; P0=0xff; P1=LedTab[wei]; P0=m_ucLedTab[shu]; for(b=0;b<105;b++); P0=0xff; P1=0xff; } /*延时程序*/ voiddelay1ms(unsignedintcount) { unsignedinti,j; for(i=0;i for(j=0;j<120;j++) ; } voidinit()//程序初始化 { EA=1; TMOD=0X11; /*定时50毫秒*/ TH0=(65535-50000*T)/256; TL0=(65535-50000)%256; ET0=1; /*定时50毫秒*/ TH1=(65535-50000*T)/256; TL1=(65535-50000)%256; ET1=1; TR1=1; /*外部中断0*/ //P3_2=0; EX0=1; IT0=1; //EX1=1; //IT1=1; frq=0x00; } voiddi()//低速,占空比70% { feng=0; delay1ms(6); feng=1; delay1ms(4); } voidgao()//高速,占空比100% { feng=0; delay1ms(10); feng=1; } voidshijian() { if(xianshi==0) { //这里.... P1_1=1; P1_2=1; P1_3=1; P1_4=1; } if(xianshi==1) { //这里.... show(0,minute/10); show(1,minute%10); } if(xianshi==2) { //这里.... show(2,second/10); show(3,second%10); } if(xianshi==3) { //这里.... show(0,minute/10); show(1,minute%10); show(2,second/10); show(3,second%10); if(h==0) { P1_0=0; P0=houTab[hou]; } else { P1_0=0; P0=houTab[4]; } } } /*外部中断0*/ voidbaojing()interrupt0using1 { mode=4; P0=0xfe; } /*外部中断1*/ voidhongwai1()interrupt2using1 { hongwai=0; EA=0; mode++; if(mode>3) { mode=0; } hongwai=0; EX1=0; EA=1; } /*定时中断1*/ voidtimer1()interrupt3using1 { if(mode==4) { TH1=0xfe; TL1=frq; SPK=~SPK; } else { n++; hn++; hongwai++; { TH1=(65535-50000*T)/256; TL1=(65535-50000)%256; } if(hn==10) { hn=0; h=~h; } if(n==200) { n=0; m=~m; } if(hongwai==20) { //hongwai=0; //EX1=1; } } } /*定时中断0*/ voidtimer0()interrupt1using1 { timecount++; TH0=(65535-50000*T)/256; TL0=(65535-50000)%256; //TR0=1; //shijian(); if(timecount==20) { timecount=0; second--; if(second<0) { if(minute==0) { second=0; minute=0; TR0=0; mode=hou; xianshi=0; } else { second=59; minute--; } } } } voidkeyscan()//键盘扫描 { inttemp; P2=0xff; temp=P2; //temp=temp&0x3c; while(temp! =0xff) { delay1ms(5); temp=P2; //temp=temp&0x3c; while(temp! =0xff) { temp=P2; switch(temp) { case0xfb: { //这里... if(xianshi==3) hou=0; else { //P1_3=0; //P0=0xbf; mode=0; } } break; case0xf7: { //这里... if(xianshi==3) hou=1; else { mode=1; } } break; case0xef: { //这里... if(xianshi==3) hou=2; else mode=2; } break; case0xdf: { //这里... if(xianshi==3) hou=3; else { mode=3; } } break; case0xfe: { //这里... if(xianshi==1) { minute++; if(minute>59) minute=0; } elseif(xianshi==2) { second++; if(second>59) second=0; } } break; case0xfd: { //这里... xianshi++; if(xianshi==3) { TR0=1; TR1=1; } if(xianshi>3) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 实现 风扇