吸油烟机的设计一、概述吸油烟机是广泛应用于厨房的重要的电气设备,吸油烟机性能的好坏将直接影响厨房的环境,因此也将影响人的健康。
随着现代科学技术的发展,吸油烟机将会有更广阔的应用领域,所以得到设计理想的吸油烟机也显得尤其重要。
吸油机控制电路的设计理念已相当成熟,根据对吸油烟机风扇电机转速不同的要求,可以用不同的方法来设计。
吸油烟机的设计既可以采用纯模拟电路,也可以采用数字电路,还可以采用数模混合电路。
吸油机可以采用数码管显示运行状态,也可以采用LCD液晶显示器。
该吸油烟机采用轻触式开关控制,并结合照明灯的亮和熄灭来控制油烟机风扇的转动。
照明灯开关按键一个B1,照明指示灯一个LED1,吸油烟机风扇转动按键两个B2、B3,对应这两个按键指示灯两个LED2、LED3,吸油烟机功能开关按键B4,对应指示灯LED4。
设计要求如下:1、按一下B1,LED1变亮,同时吸油烟机的照明灯打开,再按一下B1,LED1熄灭,对应照明灯熄灭。
2、B2和B3都能控制吸油烟机风扇的转动,但这两者控制吸油烟机的转速不同,按一下B2,LED2变亮、风扇高速转动,此时按一下B3,LED3变亮,LED2熄灭,风扇低速转动,B2不再控制风扇,再按一下B2则LED2变亮,LED3熄灭,风扇又高速转动,B3不再控制风扇,也就是说在同一时间里,B2和B3中只能有一个按键能控制风扇转动。
3、按一下B4,LED4变亮,这是可以按B2或B3控制风扇转动,再按一下B4则LED4熄灭,LED2、LED3熄灭,B2、B3不再起作用,在LED4不亮的状态下,按B2或B3不起作用,而B1则不受影响。
二、吸油烟机的方案设计在现代电子技术领域中,实现吸油烟机的控制电路的方法多种多样,可以通过纯硬件电路来实现,也可以采用硬件和软件结合的电路来完成。
以下列举了几种比较常用可行的方案,通过对比从中选择一种比较好的方案。
1吸油烟机的两种设计方案方案一:给予分立元件的吸油烟机控制电路基于分立元件的吸油烟机的控制系统主要由控制电路、键盘模块、指示灯模块以及电机驱动电路组成。
其原理方框图如图1所示。
图1基于分立元件的吸油烟机的原理方框图方案二:基于AT89C51微处理器的吸油烟机控制电路基于AT89C51的吸油烟机的控制系统主要由AT89C51微处理器、指示灯电路模块、键盘模块、LED显示器模块、复位模块等组成。
其原理方框图如图2所示。
基于基于AT89C51微处理器的吸油烟机控制系统的工作原理:以AT89C51微处理器为核心,通过软件编程实现电机控制的高低速切换。
一旦有按键操作,则引起单片机中断,在中断服务子程序里,根据相应的按键,执行的电机控制动作和指示灯显示。
同时,本系统扩展了一个时钟电路,能够显示时间。
2方案比较设计过程中,方案的选择必须与实际情形联系起来,从各方面考虑设计的可行性,即不仅要考虑其先进性也要考虑其实现的可能性,综合寻求最佳方案。
基于分立元件的吸油烟机采用纯硬件实现控制,故而电路结构复杂,所应用的集成IC 较多,功能实现起来比较麻烦,而且电路稳定性不高。
基于微处理器AT89C51的吸油烟机采用硬件和软件相结合的方式实现控制,电路简单,功能完善,所应用的集成IC 较少,稳定性较高。
经过上述方案的比较,结合各种因数综合考虑后,本设计采用方案二。
三、吸油烟机的硬件设计方案1电极控制模块电机控制电路的主要功能是完成吸油烟机风扇在高速转动与低速转动之间的切换。
其工作原理:微处理器在确认风扇转动按键B2被按下后,则单片机的P1.6置为高电平,三极管V8导通,继电器KA2吸合,常开触点KA2闭合,直流电机电枢回路通电,风扇电机低速转动;当按下按键B3后,则将单片机的P1.7置为高电平,三极管V7导通,继电器KA1吸合,常开触点KA1闭合,电阻R18被短路,此时电枢回路的总电阻小于KA1断开时的总电阻,而端电压保持不变,所以电枢回路的电流增大,故而风扇电机转速增大。
电机控制电路图如图3所示。
图3 电机控制电路原理图图5 指示灯电路原理图2 键盘模块根据设计要求,在本系统中共需要7个按键,照明灯按键B1、风扇转速控制键B2、B3,功能选择键B4、电子时钟设置调整键B5~B8。
为了节省I/O 资源,采用2×4键盘电路,键位的列线(输入线)连到P1.0~P1.2,行线(输出线)连到P1.2~P1.5,而2根列线则通过74LS08“与”门相连后,连到INT0端。
初态时,P1.2~P1.5全部为0,没有键压下时,INT0为高电平;当键位上有任一键压下,INT0端变低,向CPU 发出中断请求,执行中断服务程序扫面键盘。
键盘电路原理图如图4所示。
3指示灯模块指示灯电路的主要功能是指示当前吸油烟的工作状态。
当按键B1被按下时,将P3.0置为低电平,发光二极管V1点亮。
指示灯电路原理图如图5所示。
4复位电路模块复位电路采用STC813组成的看门狗电路。
它和单片机的连接电路如图6所示。
看门狗定时器对微处理机提供了独立的保护系统,当系统出现故障时,在可选的超时周期之后,STC813看门狗将发出RESET 信号,使CPU 自动复位。
利用STC813的低电压监测电路,可以保护系统免受低电压的影响,当Vcc 低到转换点以下时,系统复位,并一直保持到Vcc 返回并且稳定为止。
5 时钟模块若采用直接驱动法驱动6个七段显示器,共须6×8=48条I/O 线,而采用解码器驱动也要6×4=24条I/O 线,形成I/O 口的浪费。
所以采用扫描显示法,再加上TTL 七段显示译码器74LS48和3-8译码器74LS138,只需要7条I/O线,图4 键盘电路原理图图6 复位电路原理图可节省硬件。
时钟电路原理图如图7所示。
图7 时钟电路原理图四、吸油烟机的软件设计1初始化程序和主程序模块初始化程序流程图如图8所示,初始化程序部分主要使系统进入复位初始化的状态值。
具体过程为:设置中断优先级IP,选择定时器0的工作方式,并且设置初始值,开外部中断0,时钟显示寄存器初始化,使之全部显示为0,键盘端口初始化,指示灯显示初始化。
主程序流程图如图9所示,具体过程为:主程序调用初始化程序后,处于等待状态,当外部中断0产生中断,则调用外部中断0服务子程序,当外部中断0没有产生中断时,则调用定时器0服务子程序。
图8 初始化程序流程图2定时器0中断服务程序模块定时器0中断程序工作过程:定时器0每隔4ms 中断,一次中断相当于一个计数,每中断一次则计数加1。
当计数为250次时,则表示1s 到了,调用计时子程序,秒变量加1,再判断秒变量是否到60,如果到了60,则说明一分钟到了,分变量加1,同理判断时变量是否1小时到了,若计数到了则将相关变量清除为0。
同时调用显示子程序和子程序来对显示器进行扫描,从而显示时间数据。
定时器中断服务子程序的流程图如图10所示。
图9 主程序流程图3时钟程序模块时钟程序设计主要包括计时子程序CLOCL 、显示子程序DIS 、显示准备子程序READY 三部分。
计时子程序CLOCK 主要功能:每隔1S 判断秒变量、分变量、时变量寄存器的值,当秒、分变量寄存器的值超过60则清零,而时变量寄存器的值超过24则清零。
显示子程序SCAN 的主要功能:将列扫描值和显示数值送到P2口。
图10 定时器0中断程序流程图 图11计时子程序CLOCK 流程图显示准备子程序DIS 的主要功能:分别将显示的秒、分、时数值转换程十进制数值暂存到寄存器20H ~25H 。
计时子程序CLOCL 、显示子程序DIS 、子程序REDAY 的程序流程图分别如图11、图12和图13所示。
4外部中断0服务程序外部中断0中断服务程序的功能是:当有键按下时,通过“与”门触发外部中断0中断,调用键盘扫描子程序获取键值,根据键值执行相应的动作。
外部中断0的服务程序流程图和键盘扫描子程序流程图分别如图14、图15所示。
图12显示子程序DIS 流程图图13 显示准备子程序READY 流程图图14中断0服务程序流程图图15键盘扫描程序流程图五、仿真及调试1程序调试及问题分析在编写应用程序的过程中,无论是谁都难免出现一些或大或小的错误,尤其是我们这些编程不是很厉害的学生,在编程过程中必然会产生错误,所以编好初稿后必须进行程序调试。
程序调试过程确实不是一个容易的过程,我把程序在WAVE 6000集成实验环境下编辑好后一编译发现二十几处错误,有些是丢了冒号,或使用的是中文式的冒号,有些是宏汇编出错了等等错误。
2仿真测试在Proteus 6.9S环境下进行仿真,仿真效果如图16、图17所示。
图16吸油烟机仿真图一Array图17 吸油烟机仿真图二六、结束语做了两周的课程设计,有很多的心得体会,有关于单片机方面的,更多的是关于人与人之间关系方面的。
我们组一共有四个人,我单片机学的不太好,为此还是搞的很认真。
开始几天我白天在电子阅览室查找资料,晚上在图书馆查看一些有关书籍,有时还请教我们的指导老师。
经过老师的多凡讲解讲解使我得到了很大的收获。
所幸的是,我得到了很多同学的帮助。
我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我理论联系不了实际。
以前的汇编语言没学好,一开始的程序这块儿就要令我不知所措了。
后来请教我们班的同学和老师,在他们的帮助下和大家的共同努力之下,终于写出了程序。
在此次课程设计中,我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。
51的引脚及其功能,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。
在这个过程中又发现了以前连电路当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,不要想那些如果,还是准备自己的,做好我现在能做的吧。
还好,验收还算成功,但是我觉得对我来说已经很好,代表了我真实的水平,我觉得我对单片机的一些知识在这个动手的过程中真的是从无到有增长的。
同时我也尽量不去想别人得了多少分,没有什么不平衡的,有些人付出的是努力,有些人付出的是风险代价,其实这也没有什么不一样,这一点我早就了解。
最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后补一补汇编语言。
有什么问题请教下以前的那些老同学好了。
附录A吸油烟机的程序清单HOUR EQU 2AH ; 存放小时变量MIN EQU 2BH ; 存放分钟变量SEC EQU 2CH ; 存放秒钟变量GN_FLAG EQU 20H.5 ; 功能选择标志位ORG 00H ; 主程序起始地址LJMP MAIN ; 跳至主程序ORG 03H ; INT0中断起始地址LJMP INT0 ; 跳至中断子程序INT0ORG 0BH ; TIMER0中断起始地址LJMP TIMER ; 跳至TIMER0中断子程序TIMER**********************************************************主程序*********************************************************MAIN: MOV SP,#70H ; 设置堆栈在70HMOV 28H,#00H ; 显示寄存器初值为00MOV HOUR,#08H ; "时"寄存器初值为09HMOV MIN,#00H ; "分"寄存器初值为00HMOV SEC,#00H ; "秒"寄存器初值为00HMOV P2,#0FH ; 键盘端口初始化,行线置0MOV P3,#0FFH ; 指示灯初始化CLR GN_FLAG ; 功能标志位清零MOV TMOD,#01H ; TIMER0工作方式1MOV TL0, #60H ; 定时4MSMOV TH0, #0F0H ;MOV IE, #83H ; 中断使能SETB PX0 ; 中断0优先级高SETB IE0 ; 中断0跳变触发方式MOV R4, #250 ; 中断250次SETB TR0 ; 启动定时器0AJMP $ ; 等待中断********************************************************************外部中断0处理子程序******************************************************************** INT0: PUSH ACC ; 将ACC的值暂存于堆栈PUSH PSW ; 将PSW的值暂存于堆栈AGAIN: MOV P2,#0FHJNB P2.0,ZHIX0JNB P2.1,ZHIX1AJMP EXITZHIX0: MOV P2,#0F0HCALL DELAYJNB P2.4, B5JNB P2.5, B6JNB P2.6, B7JNB P2.7, B8JMP EXITZHIX1: MOV P2,#0F0HCALL DELAYJNB P2.4, B1JNB P2.5, B2JNB P2.6, B3JNB P2.7, B4JMP EXITB1: CPL P3.0 ; 照明灯点亮或熄灭JMP EXITB2: JB GN_FLAG, BB2CALL DELAYJB GN_FLAG, BB2JMP EXITBB2: CPL P3.1 ; 电机低速转动CLR P1.7JMP EXITB3: JB GN_FLAG, BB3JMP EXITBB3: CPL P3.3 ; 电机高速转动CLR P1.6JMP EXITB4: CPL P3.5 ; 电机功能选择CPL GN_FLAGJMP EXITB5: MOV A,SEC ; 将秒寄存器的值载入AADD A,#01H ; A的内容加1DA A ; A做十进制调整MOV SEC,A ; 将A的值存入秒寄存器CJNE A,#60H,EXIT ; 是否等于60秒,不是跳至N1MOV SEC,#00H ; 是则清除秒寄存器的值为00JMP EXITB6: MOV A,MIN ; 将分寄存器的值载入AADD A,#01H ; A的内容加1DA A ; A做十进制调整MOV MIN,A ; 将A的值存入分寄存器CJNE A,#60H,EXIT ; 是否等于60 分?不是则跳到N3 MOV MIN,#00H ; 是则清除分寄存器的值为00JMP EXITB7: MOV A,HOUR ; 将时寄存器的值载入AADD A,#01H ; A的内容加1DA A ; A做十进制调整MOV HOUR,A ; 将A的值存入秒寄存器CJNE A, #24H,EXIT ; 是否等于24?不是则跳到N5MOV HOUR,#00H ; 是则清除时寄存器的值为00JMP EXITB8: JMP EXITEXIT: POP PSW ; 至堆栈取回PSW的值POP ACC ; 至堆栈取回ACC的值RETI********************************************************************TO定时中断处理子程序********************************************************************TIMER: PUSH ACC ; 将ACC的值暂存于堆栈PUSH PSW ; 将PSW的值暂存于堆栈MOV TL0, #60H ; 计时到重新赋初值MOV TH0, #0F0H ;DJNZ R4,X2 ; 计时1S是否到?未到则跳到X2MOV R4,#250 ; 到了重新给R4赋值CALL CLOCK ; 调用计时子程序CLOCKCALL DIS ; 调用显示子程序DISX2: CALL SCAN ; 调用扫描子程序SCANPOP PSW ; 至堆栈取回PSW的值POP ACC ; 至堆栈取回ACC的值RETI ; 返回********************************************************************扫描子程序********************************************************************SCAN: CLR RS0CLR RS1 ; 选择工作寄存组0MOV R0,#28H ; (28H)为扫描指针CJNE @R0,#6,X3 ; 扫描完6个显示器?不是则跳至X3MOV @R0,#00H ; 是则扫描指针为0X3: MOV A,@R0 ; 扫描指针载入AADD A,#20H ; A加上常数20H(显示寄存器地址)=各时间显示区地址MOV R1,A ; 各时间显示时间地址存入R1MOV A,@R0 ; 扫描指针载入ASWAP A ; 将A的高低4位互换(P1高四位为扫描值,低四位为显示值)ORL A,@R1 ; 扫描值加显示值MOV P1,A ; 送至P1口显示INC @R0 ; 扫描指针加1RET ; 返回*********************************************************************计时处理子程序*********************************************************************CLOCK:MOV A,SEC ; 秒寄存器的内容载入AADD A,#01H ; 加1 秒DA A ; A做十进制调整MOV SEC,A ; 存入秒寄存器CJNE A,#60H,X4 ; 是否超过60秒?不是则跳到X4MOV SEC,#00H ; 是则秒位清零MOV A, MIN ; 分寄存器的内容载入AADD A,#01H ; 加1分DA A ; 做十进制调整MOV MIN,A ; 存入分寄存器CJNE A,#60H,X4 ; 是否超过60分?不是则跳到X4MOV MIN,#00H ; 是则分位清零MOV A,HOUR ; 时寄存器的内容载入AADD A,#01H ; 加1时DA A ; 做十进制调整MOV HOUR,A ; 存入时寄存器CJNE A,#24H,X4 ; 是否超过24时?不是则跳到X4MOV HOUR,#00H ; 是则时位清零X4:RET ; 返回*********************************************************************显示准备子程序*********************************************************************DIS: SETB RS0CLR RS1 ; 选择工作寄存器2MOV R1,#20H ; (20H)为显示寄存器,R1=20HMOV A,SEC ; 将秒寄存器的内容存入AMOV B,#10H ; 设B的累加器的值为10HDIV AB ; A除B ,商(十位数)存入A,余数(个位数)存入BMOV @R1,B ; 将B 的内容存入(20H)INC R1 ; R1=21HMOV @R1,A ; 将A的内容存入(21H)INC R1 ; R1=22HMOV A,MIN ; 将分寄存器的内容存入AMOV B,#10H ; 设B的累加器的值为10HDIV AB ; A除B ,商(十位数)存入A,余数(个位数)存入BMOV @R1,B ; 将B 的内容存入(22H)INC R1 ; R1=23HMOV @R1,A ; 将A的内容存入(23H)INC R1 ; R1=24HMOV A,HOUR ; 将时寄存器的内容存入AMOV B,#10H ; 设B的累加器的值为10HDIV AB ; A除B ,商(十位数)存入A,余数(个位数)存入BMOV @R1,B ; 将B 的内容存入(24H)INC R1 ; R1=25HMOV @R1,A ; 将A的内容存入(25H)RET ; 返回********************************************************************延时子程序********************************************************************DELAY: MOV R6,#10 ;5毫秒延时D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETEND附录B 吸油烟机的电路原理图。