《智能电风扇论文(毕业论文毕业设计).doc》由会员分享,可在线阅读,更多相关《智能电风扇论文(毕业论文毕业设计).doc(20页珍藏版)》请在三一办公上搜索。
1、智能电风扇设计摘要:本系统主要实现小型智能电风扇的设计。其主要具有以下功能:可实现无级调速,风扇的转速和工作模式可以自行设计;关机自动记忆设置的参数;可通过LCD显示日期、时间、温度、风扇转速、运行模式等;能够实现红外遥控风扇的工作方式。该系统主要包括时间测量、温度测量、风速测定、红外发送、红外接收、单片机系统、矩阵键盘、PWM电机驱动等模块,经测试,其工作状态良好。关键字: 智能风扇 无级调速 红外遥控 PWM电机Abstract: This system is mainly to achieve a small smart fan design. Has the following mai
2、n functions: to achieve variable speed, fan speed and mode can be designed; off to remember the setting of parameters; through the LCD display date, time, temperature, fan speed, operation mode; to achieve infrared remote fan works. The system includes a time measurement, temperature measurement, ve
3、locity measurement, infrared transmitter, infrared receiver, single-chip systems, matrix keyboard, PWM motor drive modules, tested, good working order.Keywords: infrared remote control PWM intelligent variable speed fan motor目录一、系统方案与论证21. 方案选择21.1 电机驱动21.2 红外遥控发送和接收21.3 风扇测速21.4 键盘电路的设计21.5 时钟22. 系
4、统描述3三、电路与程序设计41.电机驱动电路设计42. 红外发送和接收电路43.测速电路设计54. 键盘55 时钟电路设计66. 程序流程图6四、测试方法及测试结果71.测试条件72. 测试仪器73. 测试方案74. 测试结果71.电机驱动测试72.测速电路83.测温和时钟电路测试8结束语8参考文献8附录8一、系统方案与论证1. 方案选择1.1 电机驱动方案1:使用L293、L298等专业驱动芯片。方案2:采用H桥式驱动电路方案论证:本系统采用H桥式驱动电路。其主要部分包括四个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管,根据不同三极管对的导通情况,电流可能会从左至右或者 从右
5、至左流过电机,从而控制电机的转向。1.2 红外遥控发送和接收 分析:红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。 接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制。方案论证:系统使用555振荡器产生38KHz的载波与按键产生的调制波调制通过扩流电路驱动红外二极管发光,而接收电路则采用HS003
6、8接收管和其简单的外围电路组成。1.3 风扇测速分析:风扇测速是通过直射式光电开关来实现的。方案论证:本系统通过采用OS285B10光电开关实现风扇测速,后接LM393比较器,扇叶经过光电开关则返回低电平,否则返回高电平从而实现测速。1.4 键盘电路的设计分析:按照要求,键盘模块要求具有总线扩展方式和串行接口方式。总线接口方式可以通过外接锁存器芯片,由P2口控制芯片片选实现。串行接口方式则有SK5278专用串行接口芯片完成方案论证:系统中的数据总线是双向的,其驱动器也要选用双向的,如74LS245。74LS245也是三态的,有一个方向控制端DIR,DIR=1时输出(AnBn),DIR=0时输入
7、(AnBn)。1.5 时钟因为该系统要实现掉电计时、保存数据和自动开关机功能,因此要选择专用时钟芯片。本系统使用DS12C887专用使用芯片,其具有以下特点:在没有外部电源的情况下课工作10年;自带晶体振荡器及锂电池;可准确计时;有二进制码和BCD码代表时钟和闹钟信息等。 2. 系统描述系统主要包括电机驱动、红外遥控、键盘模块、扇测速和时钟五个模块。其工作模式为:由单片机输出PWM波给电机两个输入端口之一,通过不同端口输入控制电机正传或者翻转。电机驱动输出接风扇电机控制风扇转动。测速则是通过把OS25B10卡在风扇边缘由其外围电路驱动,把比较结果输出给单片机。单片机同时管理和控制红外遥控电路:
8、通过按键送给红外发送电路不同的调制波(基波),然后采集和处理红外接收电路的输出,从而决定PWM波的占空比,进而控制风扇的风速和运行模式。此外由单片机小系统板上的DS18B20温度传感器监测外界温度,通过单片机控制,在液晶上显示。单片机时钟温度测量键盘红外发射红外接收PWM电机风扇风速测量液晶显示图 1 系统整体框图三、电路与程序设计1.电机驱动电路设计电路工作原理分析:要使电动机旋转,只需要将高电平施加在“正向”输入端,另一端则不需要施加信号。同时利用脉宽调制信号可以控制电机转动速度。当Q2的基极为高电平时,Q2导通,Q3也导通,此时电流从正电源端经Q3、Q2到地,流过电动机的电流方向是从右向
9、左,此时电动机转动方向称之为“正转”,反之,则称为翻转。2. 红外发送和接收电路电路说明:本系统把红外发射和单片机小系统做在了一个PCB板上。单片机小系统主要由晶振、复位电路和单片机组成。红外发送部分则是通过555触发器产生38KHz的载波,经过与案件产生的基波相调制,驱动红外二极管发光。红外接收电路则是使用HS0038接收器,其特点为红外接收一体化,即将遥控信号的接收、放大、检波、整形集于一身,并且输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作,方便使用。3.测速电路设计电路说明:改电路中前端得光电开关为直射式光电传感器。通过把光电开关卡在风扇边缘,当扇
10、叶经过光电开关直射光则被挡住,而经过扇叶空隙时,光电开关完成直射。后向比较器则是采集和比较光电开关的输出,分析并且产生高低电平反馈送给单片机。单片机计算在一定时间内高低电平的个数,再由风扇固有的扇叶数,从而得到风速的值。4. 键盘图 2 可控增益放大原理图电路说明:系统采用矩阵键盘作为单片机的外部键盘和红外遥控的控制键盘。该键盘使用总线方式控制,由P0口输出数据,经过双向锁存器74LS245到各个按键。由P2口分配端口作为控制端口。5 时钟电路设计6. 程序流程图本系统软件部分任务重大,包括温度换算与显示,日期、时间的设计与显示。驱动输入PWM波的生成与调节,风速的计算和显示以及风扇工作模式的
11、设置与选择,红外遥控的控制。主程序流程图如下所示。 开始初始化显示温度时间速度提示 等待定时器、外部中断 进入不同的 处理程序显示温度、时间、模式、速度图 3 主函数程序流程图四、测试方法及测试结果1.测试条件正常条件下即可测试2. 测试仪器1 数字万用表2 DH1723-1直流四路稳压电源 3 DS1052E示波器3. 测试方案首先分模块逐个测试,修正每个模块存在的问题,确定各个模块没有差错再按照整体方案和设计连接号单片机和键盘,红外发送和接收,驱动和风扇以及风速测量部分。把程序下载到单片机,使用直流稳压电源给驱动等各个需要外部供电的模块提供输入电压。观察风扇的工作情况。再调节PWM波的输出
12、,记录风扇风速情况。然后按键选择风扇的工作模式,观察和记录风扇风速等。同时观察液晶显示,实时温度,时间和风速。4. 测试结果1.电机驱动测试此部分测试主要是通过直流稳压源万用表来完成的。由直流电压源的一路输出12V给驱动电路提供工作电压。另一路则模拟平均的PWM波,输出给驱动电路的一路输入,另一路则由排线短接。驱动输出接风扇电机。风扇正常运行, 测试结果分析:该部分是成功的。较好的满足的题目要求。2.测速电路此部分测试主要是通过直流稳压源万用表来完成的。连接好硬件电路,接入OS25B10,驱动电路和风扇,通过示波器观察测速电路输出。测试发现,两部分组合,输出比较标准的方波。测试结果分析:与预期
13、的结果相符合,该电路工作正常。3.测温和时钟电路测试这两部分的测试主要是通过单片机、液晶与两部分电路连接,通过观察液晶显示来实现的,两部分硬件电路很简单,主要通过程序的调试和修改来完成。测试结果分析:观察液晶显示测出,这两部分均能够正常在液晶上面反映出来,均能正常工作。结束语经过前面几轮课题的训练,本次课题做起来要得心应手得多。不过在做的过程中还是遇到了不少的问题。尤其是在硬件测试的时候。比如说键盘模块,一开始最后一列按键怎么都不能正常工作,因为按键电路很简单,所以检查发现有一处线有细微的断裂,经过修改才可正常运行。还有驱动,因为把散热便与地焊接在了一起,而其又是经过螺丝与大功率三极管的集电极
14、连接起来的,致使两片三极管不工作。软件测试开始时,发现程序时钟不能下载到小单片机,通过再三的尝试发现复位键接线有误导致其一直复位。由于前期工作花费了大部分时间,留给测试的时间相对较少,这是一个误区,测试其实是最具考验的部分,找出问题一般需要花费大部分时间。这当然也是因为我们经验不足而致,总之,吃一堑长一智,这是一个经验积累的过程。另外感谢实验室老师们的辛苦工作和同学们的热情帮助,这更是课题成功必不可少的因素。参考文献1 高吉祥.全国大学生电子设计竞赛培训系列教程.电子工业出版社.20072 黄智伟.全国大学生电子设计竞赛系统设计.北京航空航天大学出版社.20063 陈尚松.电子测量与仪器.电子
15、工业出版社出版.20054 刁鸣等.常用电路模块分析与设计指导.清华大学出版社.20075 康华光.电子技术基础(模拟部分).高等教育出版社.2005.076 刁鸣等.常用电路模块分析与设计指导.清华大学出版社.20077 长德,李华,李东. MCS51/98系列单片机原理与应用.机械工业出版社.19978 谢自美等.电子线路设计.实验.测试(第二版).华中科技大学出版社.20009 Paul Scherz.实用电子元器件与电路基础(第二版).电子工业出版社.2009.0410 高吉祥等.全国大学生电子设计竞赛培训系列教程.电子工业出版社.2007附录附录一:驱动电路PCB附录二:键盘PCB附
16、录三:单片机和遥控发送PCB附录四:程序设计/*接收*/void int0init ( ) IT0=1; EX0=1; EA=1;void timer1 ( ) interrupt 2 irtime+; cesu+;void int0 ( ) interrupt 1 if ( startflag ) if ( irtime17 ) bitnum=0;irdatabitnum =irtime;irtime=0;bitnum+;if ( bitnum=9 ) bitnum=0;ireceok=1; else startflag=1; irtime=0; void irpros ( ) uchar
17、zhi,i,k=1; for ( i=0;i1; if ( irdatak3 ) zhi=zhi|0x80; k+; ircode=zhi; /最终接收值 irprosok=1;void jieshou ( )if (ireceok ) irpros();ireceok=0; if ( irprosok ) irprosok=0;switch ( ircode ) case 1: speed+; break; case 2: speed-; break; case 5: direction=0; break; case 6: direction=1; break; case 9: TT2=0;
18、 moshi+; if ( moshi5 ) moshi=0; break; default: break; if ( speed20 ) speed=0; /*液晶*/void put_char(uchar ch) while(busy=1); P0=ch; wr=0; cs573=0; _nop_(); req=0; while( busy=1); req=1;void Screen_Con(uchar command) /整屏清屏0xF4 整屏上移0xF5 下移0xF6 左0xF7 右0xF8 反白0xFA 0xE5put_char(command); void Display_StrC
19、har(uchar command,uchar x,uchar y,uchar *p) /0xE9 行位置0-7 列位置0-14 中文代码ASC2代码 结束符 /0xEB 行坐标0-112 列坐标0-232 中文代码ASC2代码 结束符put_char(command);put_char(x);put_char(y);while(*p!=0)put_char(*p);p+;put_char(0x00);/*时钟*/void write_ds(uchar add,uchar date) dscs=0; dsas=1; dsds=1; dsrw=1; P0=add; dsas=0; dsrw=0;
20、 P0=date; dsrw=1; dsas=1; dscs=1;uchar read_ds( uchar add ) uchar ds_date; dsas=1; dsds=1; dsrw=1; dscs=0; P0=add; dsas=0; dsds=0; P0=0xff; ds_date=P0; dsds=1; dsas=1; dscs=1; return ds_date;void set_time ( ) write_ds( 0x0a,0x20); write_ds( 0x0b,0x26); write_ds(0,0);/秒 write_ds(1,0);/秒闹钟 write_ds(2,
21、0);/分 write_ds(3,0); /分闹钟 write_ds(4,0); /小时 write_ds(5,0); /小时闹钟 write_ds(6,0); /星期 write_ds(7,0); /日期 write_ds(8,0); /月份 write_ds(9,0); /年 /*EEPROM*/unsigned char eeprom_read(unsigned int addres);void eeprom_write(unsigned int address,unsigned char wdata);void eeprom_eares(unsigned int addres);/扇区
22、擦除。void eeprom_eares(unsigned int addres)/扇区擦除。 /ADDRESS 0x2A00 ,第二扇区 unsigned i; isp_addrl=addres; /低位地址 isp_addrh=addres8; /高位地址 isp_contr=0x01; isp_contr=isp_contr|0x80; /设时间与充ISP操作。 isp_cmd=0x03; /扇区命命令 isp_trig=0x46; /触发 isp_trig=0xb9; /触发启动。 for(i=0;i8; /高位地址 isp_contr=0x01; isp_contr=isp_cont
23、r|0x80; /设时间与充ISP操作。 isp_cmd=0x02; /写命令 isp_trig=0x46; /触发 isp_trig=0xb9; /触发启动。 for(i=0;i8; /高位地址 isp_contr=0x01; isp_contr=isp_contr|0x80; /设时间与充ISP操作。 isp_cmd=0x01; /写命令 isp_trig=0x46; /触发 isp_trig=0xb9; /触发启动。 for(i=0;i0;i-) DS=0; value=1;DS=1; if(DS) value|=0x80;delay(10); return(value);void wr
24、byte(uchar dat)uchar i;for (i=8; i0; i-) DS=0; DS=dat&0x01; delay(10); DS=1; dat=1;uint rdtemperature ( ) uchar a,b;uint temp; init_DS18B20();wrbyte(0xCC); / 跳过ROMwrbyte(0x44); / 启动温度转换delay(100);init_DS18B20();wrbyte(0xCC); /跳过ROMwrbyte(0xBE); /(读取温度寄存器) 前两个就是温度a=readbyte(); /低八位b=readbyte(); /高八位t
25、emp=(b*256+a)*6.25;/传感器返回值除16得实际温度值,再乘100,得两位小数return temp;/*测速*/void int1init ( ) IT1=1; EX1=1; EA=1;void int1 ( ) interrupt 2 if ( startcesu) numm+; if ( numm=11 ) sudu=cesu*0.256/1000/11*100; else startcesu=1;cesu=0; /*PWM波*/void timer0( void ) interrupt 1 _nop_(); TH0=(65536-500)/256; /定时0.5ms ,
26、PWM波周期为20ms TL0=(65536-500)%256; T+; TT2+; switch ( moshi ) case 0: speed=10; break; /中风,默认模式 case 1: speed=20; break; /强风 case 2: speed=5; break; /弱风 case 3: /睡眠风 if ( TT210000 ) speed=13; else speed=7; TT2=10100; case 4: /自然风 if ( TT210000 & TT210000 ) speed=7; else TT2=0; if ( T=speed *2) pwmvalu
27、e=0; if ( T=40 ) T=0; pwmvalue=1; if ( direction =0 ) /正转 pwm1=pwmvalue;pwm2=0; else pwm1=0; pwm2=pwmvalue; void timer0init ( ) TMOD=0x21; TH1=0x00; TH1=0x00; EA=1;/或者IE0x82 ET0=1; /或者IE0x82 TR0=1;/或者TCON0x10 ET1=1; TR1=1; /*主函数*/uchar table2=0123456789;uchar table=当前温度是 . C;uchar table1=v= . ;void
28、xianshi_c( uint num ) uchar temp; temp=num/1000;table10=table2temp;temp=(num%1000)/100;table11=table2temp;temp=(num%1000)%100/10;table13=table2temp;temp= (num%1000)%100%10;table14=table2temp;Display_StrChar(STR_CHAR,0x00,0x00,table); /0,16,32,48,64,80,96,112void xianshi_s( uint num ) uchar temp; tem
29、p=num/1000;table12=table2temp;temp=(num%1000)/100;table13=table2temp;temp=(num%1000)%100/10;table15=table2temp;temp= (num%1000)%100%10;table16=table2temp;Display_StrChar(STR_CHAR,0x01,0x00,table1); /0,16,32,48,64,80,96,112 void main()uint wd=0;Screen_Con(LIGHT_SET);wd=rdtemperature ( ); xianshi_c( wd ) ;timer0init ( ); int0init();int1init ( );while ( 1 ) wd=rdtemperature ( ); xianshi_c ( wd ) ; xianshi_s ( sudu); jieshou ( );