智能遥控电风扇课程设计_第1页
智能遥控电风扇课程设计_第2页
智能遥控电风扇课程设计_第3页
智能遥控电风扇课程设计_第4页
智能遥控电风扇课程设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、电子与信息工程学院重庆三峡学院专业综合课程设计报告 题 目 智能遥控电风扇 系 别 电子与信息工程学院 专 业 电子信息工程 班 级 2011级1班 姓 名 学 号 201107014134 2014年 12 月 26 日智能遥控电风扇1、 设计目的实现对直流电机的控制来模拟风扇控制器;掌握单片机硬件和软件的综合设计方法。二、设计方案2.1信号调制及红外信号方案这部分的主要问题是载波的产生以及信号与载波的调制的方式。时下许多行业中的专业人士曾预言,软件无线电在不久的将来将成为一种无信通信的一种新的实现手段,它可以采用同一套通用的硬件设备,配备不同的软件即可实现不同模式,不同通信方式的通信,灵活

2、性强,成本大大降低,维护方面也大部分只是软件方面的维护,从而双可借助网络的力量进而发展出远程维护等一系列新 的维护方式和手段,可见其前景是如些之广。因此,在这种背景之下,本系统尝试将这种先进的设计理念注入本系统信号调制的实现手段中。可以使用单片机作为发射方的主控中心,载波的产生,信号的采集,信号编码,信号与载波的调制,可都由单片机完成,输出的调制波经外接的整形放大电路后发射出去。这种方式成本稍高,不过设计灵活,保密性也好,可扩展性也强,所以本系统采用此方案。本系统采用软件调制的方式,在硬件上,只需完成信号的保持及功率放大,信号的载波产生及载波与信号的调制则全部由软件完成。所以,由程序产生信号与

3、载波调制后的信号由微控制器引脚输出,采用CD40106进行缓冲放大并整形,经过三极管9013进行放大驱动红外发射管,使其发射红外光。2.2 电机调速方案此部分主要问题是电机的选择,调速方式的选择。采用单片机控制可控硅的导通角来调节电机速度,同时要用光耦将强电隔离开来,使电路更安全,这种方法可以实现无级调速,而且可以采用多种算法,比如直接PWM,svpwm算法等,同时也可以达到很精确的控制,便于显示控制。如图23。成本可能稍高。本系统采用此方案。2.3人机交互界面的选择人机交互界面主要有输入与输出,输入可以为键盘或红外遥控器,输出可以选择数码管或者液晶,数码管成本低,但显示信息较少,外观不是很好

4、,可以用在一些低端场合。液晶成本高,但显示信息量较多,外观较好,可以用在一些高端的场合,提高产品的附加值。因此,本系统采用液晶作为显示器件。3、 设计内容遥控发射部分  为了能远离距的控制电风扇,采用了红外遥控器。通常红外遥控器由发射和接收两部分组成,发射部分由单片机 80C2051等构成。接收部分由单片机89C51等构成。 工作原理及组成部分 (1)CPU 采用STC89C52RC单片机,STC89C52RC的功能:  和 MCS-8051产品兼容、2KB可重编程闪速存储器、耐久性:1000写/擦除周期、2.7V6V的操作范围、全静态操作:0Hz24MHz、两级加密程序存

5、储器、128×8位内部RAM、15根可编程I/O引线、6个中断源、可编程串行UART通道、直接LED驱动输出、片内模拟比较器、低耗空载和掉电方式。 (2)电源采用5v电源来提供电源。 (3)发射部分原理见图31所示。 图31遥控发射原理框图2.遥控发射部分具体功能 发射部分包括键盘、编码调制、红外发送器。使用89C2051芯片 将按键信号调制在 38KHz 的载波信号上通过三极管放大后发射出去。红外编码为: 全码 =引导码+系统码+数据码。89C2051 的 P1口构成键盘,用T1产生定时中断,产生一个38K的方波,作为红外线的调制基波。将发送的数据和载波进行逻辑与后,经过40106

6、整形,用三极管驱动红外发射管发射。 3.2.2 电风扇接收控制板 1.工作原理及组成部分: 红外接收部分包括光电转换放大器、解调、解码电路。 (1)CPU板将单片机、控制、键盘组合在一起完成了人机对话。 用 AT89C51单片机来作主芯片控制,采用红外HS0038B接收头,用双向可控硅MOC3025控制电机调速,具有红外遥控功能。 (2)电源部分:交流220V经变压器降压为16V,经整流桥整流后再由三端稳压器LM7805稳压,供给接收控制板。 (3) 电风扇控制板框图32图32电风扇控制板框图2.设计方案 (1)工作方式:分为手动和遥控两种方式。有四种吹风模式。(1)红外遥控输入在 P3.2(

7、INT0),面板按键在P3.3(INT1)。液晶和LED指示灯显示状态信息,四、电路设计与描述1.电路分析和设计发射部分整体电路连接图,如图4-1图4-1发射部分整体电路连接图电路大概可分为七部分组成,分别是最小系统电路、电源电路、单片机与数码管电路、直流电机驱动电路、红外接收电路、LED接收指示电路以及按键电路。2. 电路虚拟仿真图4-2至图4-6图4-2打开开关不工作仿真图图4-3一级风仿真图图4-4二级风仿真图图4-5三级风仿真图图4-6四级风仿真图五、程序设计5.1遥控发射部分软件设计遥控发射部分主要功能是有按键按下,将按键值发送到接收方,这当中要完成键盘读取,载波的产生,编码调制,最

8、终输出调制波。采用中断的处理程序完成整个系统的操作,当有按键按下时,产生外中断,外中断处理完成键盘读取,接着定时器0中断服务子程序负责编码,定时器中断服务子程序负责产生载波并且将载波与信号调制,调制波经引脚输出。主程序只负责延时10s,若无按键按下,则进入休眠状态,以节省电能。主程序和外中断0服务子程序流程,见图51:图51主程序和外中断0服务子程序流程图定时器0和定时器1中断服务子程序流程,见图5-2图52定时器0和定时器1中断服务子程序流程图5.2 接收控制部分软件设计这部分的程序设计主要有液晶的显示驱动,电机调速算法的实现,红外接收,及键盘读取。5.2.1.红外接收和键盘读取都采用外中断

9、来响应输入,这样可以简化程序设计。当有红外输出或者键盘输入时,外中断和外中断1响应输入,当有红外输入时,配合定时器0完成接收工作,当有键盘输入时,在外中断0中完成键盘读取。5.2.2液晶驱动程序设计(1)1602LCD 的指令说明及时序:1602 液晶模块内部的控制器共有11 条控制指令,如表53所示:表53 控制命令表1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电平)指令1:清显示,指令码01H,光标复位到地址00H 位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移

10、 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4 位总线,低电平时为8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7 的点阵字符,高电平时显示5x10 的点阵字符。指令7:字符发生器RAM 地址设置。指令8:DDRAM 地址设置。指令9:读忙信

11、号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。(2)LCD1602的时序操作 读写操作时序分别如图54,图55所示图54读操作时序图图55写操作时序图(3)1602LCD 的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置(4)液晶显示程序流程图

12、可以这样设计,如图56;详细代码参见附录。图56液晶显示操作流程图5.2.3.电机调速程序实现电机调速采用直接PWM算法,在程序中的实现大致方法就是,产生一个基本频率的方波,配合定时器控制方波的占空比来控制可控硅的导通角,从而达到调节电机转速的目的。实现的流程框图如下:图57电机调速程序实现流程框图采用直接PWM算法控制电机转速,再配合定时器,可以产生出多种多样的吹风模式,比如上文提到的自然风,睡眠风等模式;可以自己设计什么时候吹什么样的风,同时也实现了电机的无级调速。5.2.4.主程序流程图,见图58:图58主程序流程图5.2.5.外中断0(键盘输入)和外中断1(红外接收)服务子程序流程,其

13、他主要功能是根据输入(红外输入或键盘输入),控制系统的一些控制参量比如风量,吹风模式,开关机。图59.外中断0和外中断1子程序流程图程序代码:#include <REGX52.H> /头文件#define uchar unsigned char #define uint unsigned int/*定义IO端口*/#define Key1 P3_2/调速按键(停止,1级风,2级风,3级风,4级风)#define SMG_XSP0/数码管显示#define IAP2_5/直流电机控制端口#define IBP2_4/直流电机控制端口#define IR1P3_3/红外接收端口#def

14、ine LEDP1_0/定义接收指示灯uchar AddData=0;/定义自增变量uchar HeardData=0; /定义接收到数据的高位变量bit ExeFlag=0; /定义可执行位变量uchar flag=0;/风量等级标志位(0:停止、1:1级风、2:2级风、3:3级风、4:4级风)uchar code Data=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/数码管 0 1 23 4 5 6 7 8 9 void delay_anjian(uint time)/延时去抖uint x,y;for(x=time;x>0;x

15、-)for(y=110;y>0;y-);void Init()/系统初始化/*定时器工作方式*/TMOD=0x11;/T0和T1:工作方式1EA=1;/打开总开关/*定时器0初始化(红外)*/ET0=1;/打开定时器0中断 TH0=0xff; /时间大约为25uS TL0=0x19; TR0=1; /同意开始定时器0PT0=1;/T0高优先级/*定时器1初始化(产生PWM控制电机转速)*/ET1=1;/使能T1中断TH1=0xf8;/定时2msTL1=0xcc;TR1=0;/关闭定时器1/*外部中断1初始化*/EX1=1; /同意开启外部中断1 IT1=1; /设定外部中断1为低边缘触发

16、类型PX1=1;/外部中断1 高优先级void Key_cl()/按键处理if(Key1=0)/调速按键按下delay_anjian(5);/延时去抖if(Key1=0)/再判断按键是否按下while(Key1=0);/等待按键松开flag+;/风量等级标志位加1if(flag=5) flag=0;/让flag值控制在0到4之间void Out_cl()/风量输出处理switch(flag) case 0: SMG_XS=Dataflag; IA=0; IB=0; TR1=0; break;/停止case 1: SMG_XS=Dataflag; TR1=1; break;/1级风case 2:

17、SMG_XS=Dataflag; TR1=1; break;/2级风case 3:SMG_XS=Dataflag; TR1=1; break;/3级风case 4: SMG_XS=Dataflag; IA=1; IB=0; TR1=0; break;/4级风default: break;void IR1_cl()/红外接收处理static uint i=3000;/定义变量i=3000while(i-)/i为0到3000之间的一段时间 if(IR1=0)/判断延时期间是否有红外信号输入ExeFlag=1;/将可执行标志位置1i=3000;/i设置3000if(ExeFlag=0)/判断可执行标

18、志位EX1=1; /开启外部中断1ExeFlag=0; /可执行标志位置0void main()/主函数入口Init();/系统初始化while(1)/主循环IR1_cl();/红外接收处理Key_cl();/按键处理Out_cl();/风量输出处理void Time1() interrupt 3/调速定时器1中断服务函数static uchar a=1;/定义变量a=1TH1=0xf8;/定时2msTL1=0xcc;switch (flag)case 1: if(a=1) IA=1; IB=0; else IA=0; IB=0; break;/25%转(1级风)case 2: if(a<

19、;=2) IA=1; IB=0;else IA=0; IB=0; break;/50%转(2级风)case 3: if(a<=3) IA=1; IB=0; else IA=0; IB=0; break;/75%转(3级风)default:break;a+; /a加1while(a=5) a=1;/a保持在1到4之间void Timer0_IR1() interrupt 1 /红外定时器0中断服务函数 TH0=0xff;/时间大约为25uS TL0=0x19; AddData+;/自增变量加1void Int1_IR1() interrupt 2/红外接收外部中断1服务函数static u

20、int RecvData=0;/定义接收红外数据变量static uchar CountData=0; /定义红外个数计数变量LED=1; /接收指示灯置1(熄灭) if(4=AddData)/0 /判断接收到的数据是0 RecvData=RecvData | 0; /判断到0就将当前位写0 RecvData=RecvData << 1; /将当前位向左移动1位 else if(8=AddData)/1 /判断接收到的数据是1 RecvData=RecvData | 1; /将当前位写1 RecvData=RecvData << 1; /将当前位向左移动1位 Count

21、Data+; /将红外接收位计数器加1 if(CountData=8) /判断是否接收到8位数据 HeardData=RecvData; /是8位数据时,则将数据暂存到高位变量中 else if(CountData=16) /判断是否接收到16位数据 ET0=0; /关闭红外定时器0 EX1=0; /关闭红外外部中断1 AddData=0; /定时时间间隔变量清零 if(HeardData=226 | HeardData=112)/判断用户码是否正确 LED=0; /用户码正确,接收指示灯置0(点亮)HeardData=RecvData; /取出接收到的低八位数据 switch(HeardDa

22、ta) /判断低八位数据的值下列那一位 case 32: /电源 /说明按下了电源键 flag=0;/风量等级标志位为0 (停止) break; /返回 case 0: /1 /说明按下数字1键 flag=1;/风量等级标志位为1 (1级风) break; /返回 case 8: /2 /说明按下了数字2键 flag=2;/风量等级标志位为2 (2级风) break; /返回 case 4: /3 /说明按下了数字3键 flag=3;/风量等级标志位为3 (3级风) break; /返回 case 12: /4 /说明按下了数字4键 flag=4;/风量等级标志位为4 (4级风) break;

23、 /返回 RecvData=0;/将接收到的数据清零 CountData=0; /将接收计数器清零 HeardData=0; /将接收高低数据变量清零 return; /返回 AddData=0; /将定时器计数器清零ET0=1; /打开定时器0中断六、系统运行、调试和结果分析1.软件仿真调试软件仿真调试有两种仿真调试方式,一是在用开发工具KEIL自带的仿真器来仿真调试,在编译连接完成后,单击或者“DEBUG”“START/STOP DEBUG SESSION”或者按CTRL+F5即可进入KEIL的仿真调试环境,如图61图61用KEIL调试程序图在这个仿真环境中,它的结构大概是这样的,它提供很

24、多的观察工具以窗口的形式呈现给用户,比如左边的寄存器察看窗口可以察看寄存的值,下左方的窗口可以输入命令行,可以观察变量值,也可以中途改变变量值,这相当于仿真过程中的输入等变化。右下的窗口可以观察内存的变化,正中的窗口是程序运行的主窗口,可以运用软件调试常用的手段,比如单步调试,设置断点等方法控制程序的运行。此外还有其他的一些工具,比如定时器,IO口的察看工具,可以观察也可以改变相应寄存器的值,如图62,图62 在KEIL里调试运行图总之,具有强大开发能力的KEIL,在它的仿真环境中,即具备了软件调试各种手段,同时又融合了窗口形式的硬件仿真平台,将这两者无缝地结合在一起,为用户构建了一个虚拟的软硬件协同仿真调试的平台。另一种方法是软件仿真与系统仿真同时完成的方法,这里用到两个工具,一个是上面提到的强大的KEIL,另一个是PROTEUS电路分析实物仿真软件。3.系统安装与调试最后的安装与调试要从电源部分开始,首先要将电源安装调试完成。在这过程中要注意安全,因为这是和强电直接打交道的。发射部分和接收部分的各部分调试可以分割开来一个模块一个模块地调试,在这过程中可以分别编写测试这些模块的测试代码以验证电路是否正常工作,到最后确定每个模块都已经

温馨提示

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

评论

0/150

提交评论