当前位置:文档之家› 课程设计——基于单片机的智能电风扇控制系统

课程设计——基于单片机的智能电风扇控制系统

智能风扇设计报告学院:信息工程学院专业:自动化基于单片机的智能电风扇控制系统第1节引言电风扇曾一度被认为是空调产品冲击下的淘汰品,其实并非如此,市场人士称,家用电风扇并没有随着空调的普及而淡出市场,近两年反而出现了市场销售复苏的态势。

其主要原因:一是风扇和空调的降温效果不同——空调有强大的制冷功能,可以快速有效地降低环境温度,但电风扇的风更温和,更加适合老人儿童和体质较弱的人使用;二是电风扇有价格优势,价格低廉而且相对省电,安装和使用都非常简单。

尽管电风扇有其市场优势,但传统电风扇还是有许多地方应当进行改良的,最突出的缺点是它不能根据温度的变化适时调节风力大小,对于夜间温差大的地区,人们在夏夜使用电风扇时可能遇到这样的问题:当凌晨降温的时候电风扇依然在工作,可是人们因为熟睡而无法察觉,既浪费电资源又容易引起感冒,传统的机械定时器虽然能够控制电风扇在工作一定后关闭,但定时范围有限,且无法对温度变化灵活处理。

鉴于以上方面的考虑,我们需要设计一种智能电风扇控制系统来解决这些问题。

1.1 智能电风扇控制系统概述传统电风扇是220V交流电供电,电机转速分为几个档位,通过人为调整电机转速达到改变风力大小的目的,亦即,每次风力改变,必然有人参与操作,这样势必带来诸多不便。

本设计中的智能电风扇控制系统,是指将电风扇的电机转速作为被控制量,由单片机分析采集到的数字温度信号,再通过可控硅对风扇电机进行调速。

从而达到无须人为控制便可自动调整风力大小的效果。

1.2设计任务和主要内容本设计以MCS51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。

另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。

本设计主要内容如下:风速设为从高到低6个档位,可由用户通过键盘手动设定。

② 当温度每降低3℃则电风扇风速自动下降一个档位。

③ 当温度每升高3℃则电风扇风速自动上升一个档位。

④ 10℃最低工作温度,当低于该温度时,电风扇自动停转。

⑤ 自动与手动的切换第2节 系统主要硬件电路设计2.1 总体硬件设计系统总体设计框图如图2-1所示图2-1 系统原理框图 对于单片机中央处理系统的方案设计,根据要求,我们可以选用具有4KB 片内E2PROM 的AT89C51单片机作为中央处理器。

作为整个控制系统的核心,AT89C51内部已包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个键盘输入温度显示单片机系统 电机控制模块数字温度传感模块最小系统。

整个系统结构紧凑,抗干扰能力强,性价比高。

是比较合适的方案2.2温度传感器模块设计温度传感器可以选用LM324A的运算放大器,将其设计成比例控制调节器,输出电压与热敏电阻的阻值成正比,但这种方案需要多次检测后方可使采样精确,过于烦琐。

所以我采用更为优秀的DS18B20数字温度传感器,它可以直接将模拟温度信号转化为数字信号,降低了电路的复杂程度,提高了电路的运行质量。

2.2.1 温度传感器模块组成本模块以DS18B20作为温度传感器,AT89C51作为处理器,配以温度显示作为温度控制输出单元。

整个系统力求结构简单,功能完善。

电路图如图2-2所示。

系统工作原理如下:DS18B20进行现场温度测量,将测量数据送入AT89C51的P3.7口,经过单片机处理后显示温度值,并与设定温度值的上下限值比较,若高于设定上限值或低于设定下限值则控制电机转速进行调整。

电路图见附录。

2.3电机调速与控制模块设计电机调速是整个控制系统中的一个重要的方面。

通过4905,使输出端电压发生改变,从而使施加在电风扇的输入电压发生改变,以调节风扇的转速,实现各档位风速的无级调速。

2.3.1 电机调速原理可控硅的导通条件如下:1)阳-阴极间加正向电压;2)控制极-阴极间加正向触发电压;3)阳极电流IA 大于可控硅的最小维持电流IH。

电风扇的风速设为从高到低6、5、4、3、2、1档,各档风速都有一个限定值。

在额定电压、额定功率下,以最高转速运转时,2.3.2 电机控制模块硬件设计电路图见附录。

2.4温度显示与控制模块设计温度的显示通过LED灯来显示其变化,在表盘上,共有8个LED指示灯。

分别为自动或手动,1级风苏、2级风速等。

LED会随着温度以及操作的不同会进行相应的显示。

2.5键盘控制系统模块设计矩阵键盘是3*3的,接在P2口进行相应的控制,主要的操作是进行手动自动切换、风速手动调节等,同时,在相应的键盘操作下,在LED显示部分,进行相应的操作显示。

这样做的目地可以简化操作,并且很简单的便可以达到控制目的。

电路图见附录。

2.6稳压电路模块的设计为了保证单片机在正常电压下正常工作,我们采用7805来进行5V的稳压工作。

电路原理图如下:电路图见附录。

第三节系统软件设计在程序设计上,我们主要设计了四个模块,主程序模块、温度扫描模块、电机控制模块和键盘扫描模块。

主程序主要涉及到对温度采集及键盘采集回来的数据进行综合性的处理。

温度扫描模块,则结合温度传感器的原理,写出了采集温度用的函数。

电机控制,通过延时实现了模拟的PWM波,对速度进行了分档。

键盘扫描,则采用定时中断的方法,隔100ms时间进行一次扫描。

具体思想见附录1.结束语首先,通过这次应用系统设计,在很大程度上提高了自己的独立思考能力和单片机的专业知识,也深刻了解写一篇应用系统的步骤和格式,有过这样的一次训练,相信在接下来的日子我们都会了,而且会做得更好。

我所写的系统主要根据目前节智能化电风扇技术的发展趋势和国内实际的应用特点和要求,采用了自动化的结构形式,实现对电风扇转速的自动控制。

系统以单片机AT89C51为核心部件,单片机系统完成对环境温度信号的采集、处理、显示等功能;用Protel软件绘制电路原理图和PCB电路印刷板图,由Protues软件进行访真测试,利用MCS51汇编语言编制,运行程序该系统的主要特点是:1)适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不同用户对最适合温度的要求,实现对最适温度的实时监控。

2)系统成本低廉,操作非常简单,随时可以根据软件编写新的功能加入产品。

操作界面可扩展性强,只要稍加改变,即可增加其他按键的使用功能。

本系统在当今提倡人性化设计和健康产品的环境下具有非常好的市场前景。

本设计在模拟检测中运行较好,但采样据不太稳定。

功能上的缺憾是对于两个档之间的临界温度处理不好,并且档位太少。

还有待改进。

附录1:主程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned int#include "wendu.h"#include "dianji.h"#include "jianpan.h"//extern uint speed;//extern unit anjian[9];main(){uint tmp;EA=0;P0=0xff;dianji_kou=1; //dian ji chu shi wei gaoanjian_clear1();anjian[0]=1;anjian_dingshi_init();EA=1; //EA shi nengwhile(1){anjian_saomiao_1();if(anjian[0]==1){tmp=DS18B20_Tmp_Read();if(tmp<=0x00a0){P0=0x00; //<10cspeed_0();}else if(tmp>0x00a0&&tmp<=0x0140){P0=0x7f; //10--20cspeed_2();}else if(tmp>0x0140&&tmp<=0x0170){P0=0xbd; //20--23cspeed_3();}else if(tmp>0x0170&&tmp<=0x0190){P0=0xdd; //23--26cspeed_4();}else if(tmp>0x0190&&tmp<=0x01d0){P0=0xed; //26--29cspeed_5();}else if(tmp>0x01d0&&tmp<=0x0200){P0=0xf5; //29--32cspeed_6();}else {P0=0xf9; //>35cspeed_7();}}if(anjian[1]==1){P0=0xfe;anjian_saomiao_1();if(anjian[3]==1){P0=0x7e; //<10cspeed_1();}else if(anjian[4]==1){P0=0xbe; //10--20cspeed_2();;}else if(anjian[5]==1){P0=0xde; //20--25cspeed_3();}else if(anjian[6]==1){P0=0xee; //25--30cspeed_4();}else if(anjian[7]==1){P0=0xf6; //30--35cspeed_5();}else if(anjian[8]==1){P0=0xfa; //>35cspeed_6();}else speed_0();}else { P0=0xff; speed_0();}}}温度采集程序:///sbit TMDAT= P3^7;/////////////////////////dian ji/////////////////////////////////////sbit TMDAT= P3^7;void Delay(int useconds){int s;for (s=0;s<useconds;s++);}uchar Reset_Bus(void){uchar presence;TMDAT=0;Delay(29);TMDAT=1;Delay(3);presence=TMDAT;Delay(25);return(presence);}void Write_Bit(char bitval) {TMDAT=0;if(bitval==1) TMDAT=1;Delay(5);TMDAT=1;}void Write_Byte(char val) {uchar i;uchar temp;for (i=0;i<8;i++){temp=val>>i;temp&=0x01;Write_Bit(temp);}Delay(5);}uchar Read_Bit(void){uchar i;TMDAT=0;TMDAT=1;for(i=0;i<3;i++);return(TMDAT);}uchar Read_Byte(void){uchar i;uchar value=0;for (i=0;i<8;i++){if(Read_Bit()) value|=0x01<<i;Delay(6);}return(value);}uint DS18B20_Tmp_Read(void){uint TEMP;uchar TEMP_LSB,TEMP_MSB;Reset_Bus();Write_Byte(0xCC);Write_Byte(0x44);Delay(5);Reset_Bus();Write_Byte(0xCC);Write_Byte(0xBE);TEMP_LSB=Read_Byte();TEMP_MSB=Read_Byte();TEMP=TEMP_MSB;TEMP=TEMP<<8;TEMP=TEMP|TEMP_LSB;return(TEMP);}电机调速程序:sbit dianji_kou=P3^6; //P3^6控制电机void sudu(uint x){uint i;dianji_kou=0;for(i=0;i<5001;i++){if(i==x){dianji_kou=~dianji_kou;}}}void speed_0(void){sudu(0);}void speed_1(void){sudu(500);}void speed_2(void){sudu(700);}void speed_3(void){sudu(800);}void speed_4(void){sudu(1000);}void speed_5(void){sudu(1200);}void speed_6(void){sudu(1500);}void speed_7(void){sudu(1800);}sbit dianji_kou=P3^6; //P3^6控制电机void sudu(uint x){uint i;dianji_kou=0;for(i=0;i<5001;i++){if(i==x){dianji_kou=~dianji_kou;}}}void speed_0(void){sudu(0);}void speed_1(void){sudu(500);}void speed_2(void){sudu(700);}void speed_3(void){sudu(800);}void speed_4(void){sudu(1000);}void speed_5(void){sudu(1200);}void speed_6(void){sudu(1500);}void speed_7(void){sudu(1800);}键盘采集程序:/*p2^0 p2^1 p2^2p2^3p2^4p2^5*/sbit KeyIn1 = P2^3;sbit KeyIn2 = P2^4;sbit KeyIn3 = P2^5;sbit KeyOut1 = P2^0;sbit KeyOut2 = P2^1;sbit KeyOut3 = P2^2;uint anjian[9];void anjian_dingshi_init(){TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256; //100MS// EA=1; //KAI ZONG ZHONG DUANTR0=1; //T0 YUN XU }void anjian_clear1(void){char i;for(i=0;i<9;i++){anjian[i]=0;}}void anjian_clear2(void){char i;for(i=3;i<9;i++){anjian[i]=0;}}void anjian_saomiao_1(void){KeyOut1 = 0;KeyOut2 = 1;KeyOut3 = 1;if (KeyIn1 == 0){anjian_clear1();anjian[0]=1;}if (KeyIn2 == 0){anjian_clear1();anjian[1]=1;}if (KeyIn3 == 0){anjian_clear1();}while(KeyIn1 == 0||KeyIn2 == 0||KeyIn3 == 0);KeyOut1 = 1;KeyOut2 = 0;KeyOut3 = 1;if (KeyIn1 == 0){anjian_clear2();anjian[3]=1;}if (KeyIn2 == 0){anjian_clear2();anjian[4]=1;}if (KeyIn3 == 0){anjian_clear2();anjian[5]=1;} while(KeyIn1 == 0||KeyIn2 == 0||KeyIn3 == 0);KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 0;if (KeyIn1 == 0){anjian_clear2();anjian[6]=1;}if (KeyIn2 == 0){anjian_clear2();anjian[7]=1;}if (KeyIn3 == 0){anjian_clear2();anjian[8]=1;} while(KeyIn1 == 0||KeyIn2 == 0||KeyIn3 == 0);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;anjian_saomiao_1();}附录2:电源模块:温度传感器模块:键盘模块:电机模块:。

相关主题