单片机课程设计_基于89C51的全自动洗衣机控制器设计

  • 格式:doc
  • 大小:4.65 MB
  • 文档页数:23

单片机系统课程设计成绩评定表设计课题基于89C51的全自动洗衣机控制器设计学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:基于89C51的全自动洗衣机控制器设计专业班级:学生姓名:学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书目录1概述 (4)2 总体方案设计 (5)2.1全自动洗衣机的工作流程 (5)2.2硬件组成 (5)3 硬件电路设计 (6)3.1 89C51 (6)3.2 晶振电路 (6)3.3 复位电路 (7)3.4 启动电路 (7)3.5注水电路,放水电路 (7)3.6洗涤电机控制电路 (8)3.7警报电路 (11)4 软件设计 (12)4.1 主程序流程图 (12)4.2 中断服务程序流程图 (14)4.3子函数流程图 (15)5 总结 (15)6 参考文献 (16)附录A (17)附录B (18)1概述当今社会,洗衣机已经渗透到各个家庭了,人们对于这种东西已经不会再陌生,也越来越离不开洗衣机。

洗衣机的便利让人们节省了许许多多的时间,而且洗涤之后的效果也比人手洗的更加干净。

而自从推出了全自动洗衣机之后,洗衣机变得更加可靠。

全自动洗衣机就是将洗衣的全过程(泡浸-洗涤-漂洗-脱水)预先设定好N 个程序,洗衣时选择其中一个程序,打开水龙头和启动洗衣机开关后洗衣的全过程就会自动完成,无需人操作,只需要按下开始按钮便可。

其工作原理可以简述为:洗衣机的洗涤过程主要是在机械产生的排渗、冲刷等机械作用和洗涤剂的润湿、分散作用下,将污垢拉入水中来实现洗净的目的。

首先充满于波轮叶片间的洗涤液,在离心力的作用下被高速甩向桶壁,并沿桶壁上升。

在波轮中心处,因甩出液体而形成低压区,又使得洗涤液流回波轮附近。

这样,在波轮附近形成了以波轮轴线为中心的涡流。

衣物在涡流的作用下,作螺旋式回转,吸入中心后又被甩向桶壁,与桶壁发生摩擦。

又由于波轮中心是低压区,衣物易被吸在波轮附近,不断地与波轮发生摩擦,如同人工揉搓衣物,污垢被迫脱离衣物。

其次,当衣物被放进洗涤液之后,由于惯性作用运动缓慢,在水流与衣物之间存在着速度差,使得两者发生相对运动,水流与衣物便发生相对摩擦,这种水流冲刷力同样有助于污垢离开衣物。

再次由于洗衣涌形状的不规则,当旋转着的水流碰到桶壁后,其速度和方向都发生了改变,形成湍流。

在湍流的作用下,衣物做无规则地运动并翻滚,其纤维不断被弯曲、绞纽扣拉长,衣物相互相摩擦,增大了洗涤的有效面积,提高衣物的洗净的均匀性。

简单来说,洗衣机的洗涤功能主要来源于两大原理,相对运动和离心力。

相对运动是指在电机实行正转时,突然反转,使的本来正转的衣物与反转的衣物相互摩擦或者与带有洗衣液的水相撞从而去除污渍。

离心力是指衣物随着水的旋转方向而逐渐离开中心,从而能使得衣物贴近桶壁。

2 总体方案设计2.1全自动洗衣机的工作流程(1)注入水,待水面达到一定高度的时候将停止注水,触发启动信号;(2)单片机收到启动信号之后,对单片机的I/O口进行分配,用I/O口的高低电平来控制电机。

此过程是用单片机控制电机的正反转,正反转时间相同,以达到除去污染物的功能;(3)应用定时器控制其工作时间,洗涤时间为30分钟;(4)当定时时间到了,可以停止洗涤了;(5)放水,启动放水电机;(6)此步骤为脱水过程,脱水过程就是让电机正转,定时5分钟;(7)脱水完成之后,将停止电机运作。

图2-1-12.2硬件组成硬件功能图图2-2-13 硬件电路设计各元件电路分析3.1 89C51单片机是本次设计的核心部分,通过对单片机进行编程,从而实现I/O口电平的高低变化,以此来控制要控制的对象;3.2 晶振电路单片机的工作需要时钟,而晶振电路是给单片机提供时钟的一个外部电路;图3-13.3 复位电路复位电路是当单片机运行时需要恢复至原始状态时而需要设计的电路,实际设计时,只需要给RESET一个10ms以上的高电平就可以实现复位了;图3-23.4 启动电路启动电路比较简单,给I/O口一个低电平即可动作;图3-33.5注水电路,放水电路如下图所示,单片机P1.2、P1.3口通过1K上拉电阻给8050NPN型三极管的基极供电,M1为供水电机,M2为放水电机;图3-43.6洗涤电机控制电路该部分电路可设计成两种电路,一种是控制直流电机,另一种是用直流电路控制交流电机。

1控制直流电机法图3-5该控制电路为控制直流电机法,这是一个典型的H桥电路,当P1.0输入高电平时,Q21导通,此时Q63的基极得到一个低电平,Q61截止,Q63导通。

P1.1输入低电平,Q22截止,Q60基极得到一个高电平,Q60导通,Q62截止,此时电机M10得到一个向左的电流,此时为反转,正转则反之。

此法简单容易控制,不过有缺点,因为受到三极管的耐压限制,只能运用于低压直流电机上,实际可靠性不高。

2 直流电流控制三相交流电动机法图3-6图3-7这种方法需要用到电气控制,用直流中间继电器控制交流接触器的线圈通断。

该部分分为两个电路,一个直流部分,一个交流部分。

直流部分见图3-6,交流部分见图3-7。

当P1.0口为高电平,Q20导通,KA1无电流通过,KM1不得电。

当P1.0为低电平,Q20截止,此时KA1线圈得电吸合,KA1常开闭合,KM1得电,此为正转,反转则控制P1.1口为0,P1.0为1。

经查证,该款直流中间继电器MY2NJ-DC24V额定电压220V AC,最大开关电压250V AC,线圈吸合电流为36.9mA,当Q20截止时,流过KA1上的电流I= 24V/250=96mA>36.9mA,所以是可以吸合的。

3.7警报电路当P1.4口输出一个低电平,Q34导通,此时蜂鸣器响起,触发警报,提示已经完成工作。

4 软件设计4.1 主程序流程图图4-1-1图4-1-1便是本次全自动洗衣机设计电路的主函数部分,总体思路比较简单。

对外部中断0的初始化和对定时器0的初始化。

首先是设置定时器0的工作方式,选定为工作方式1。

定时器工作方式1是16位定时器,有高八位和低八位。

选定为定时器,令D2位为0,GATE位为门控位,在本次设计中没用到,使之置0。

由图4-1-3可以知道,当M1=0,M0=1时,工作方式为1,于是应该使TMOD的值设定为0000 0001 B,即是01H。

图4-1-2图4-1-3第二步则是装初值。

装初值之前,必须要了解51单片机的计数/定时方法。

51单片机的定时器是从65536(假设是方式1)到0从高到低的顺序来进行计数定时的,于是TH0=(65536-要定时的时间)/256,TH0为高八位数据;同样可以得到低八位TL0=(65536-要定时的时间)%256。

第三步设置TCON。

因为要用到外部中断0,所以需要把外部中断0的触发方式选择一下。

IT0是选择外部中断0的触发方式位,当IT0=0时为电平触发方式,当IT0=1时为边沿触发方式。

一般常用的外部中断触发方式为边沿触发方式,即是IT0=1。

图4-1-4第四步是设置中断允许寄存器IE。

在主函数中,总共需要打开四个中断允许位,外部中断0中断允许位,定时器0中断允许位,总中断允许位。

需要做的只是让ET0=1,EX0=1,EA=1即可。

图4-1-5最后一步就是等待中断服务函数的到来,在C 语言中可以用while (1);来实现。

4.2 中断服务程序流程图触发外部中断0响应P1.2拉低,洗衣机注水打开定时器0,开始计时标志位是否为0计时50ms 后,触发定时器0中断响应是重装初值num 计数加1Num 是否为20是令num 为0,num1,num2,num4,num5,num6都加1标志位是否为1是否标志位是否为2标志位是否为3否否是是标志位是否为0否是注水电机打开,5min 后标志置1标志位是否为1否标志位是否为2标志位是否为3洗涤开始,驱动电机正反转,5S 一次正转,持续30min 后标志置2放水电机打开,放水完成后脱水,脱水完成标志置3洗涤完成,驱动蜂鸣器10S ,清空所有Num ,关闭定时器,标志清零是是是否否结束否否图4-2-1如图4-2-1所示,这是整个控制程序的中心部分,中断服务函数。

总共采用了两个中断源,一个是外部中断0,一个是定时器中断0。

总体思路是从按键中检测是否有按键按下,然后打开注水开关,而后打开定时器开始计时。

每隔50ms进入一次定时器中断。

以1s为基准,让50ms循环20次便得到1s,而后以1s为基准,需要定时多长的时候就直接可以使用1s基准。

注水完成之后便是洗涤过程,启动电机的正反转,持续30min,正转反转一次5s。

洗涤过程完成之后,打开放水电机,放水5min,放水完成之后脱水,脱水完成启动警报,结束。

程序详细运行过程:检测是否有键盘按下,如果有,则触发外部中断0,在外部中断0函数内部使P1.2输出低电平,打开注水电机,打开定时器0,开始计时。

直到5min后停止注水,标志位置1。

当标志位置1时,开始进行洗涤过程。

驱动电机正反转,正转置P1.1为1,反转置P1.0为0;反转置P1.1为0,P1.0为1。

正反转各五秒,一个周期为10秒,总共要持续30min,也即是需要循环180次。

当洗涤30min之后,应该令标志位置2。

当标志位为2时,放水电机打开,定时5min。

完成后进行脱水处理。

脱水处理的主要办法是令电机正转5min。

5min后标志位置3。

当标志位为3时,打开警铃,告知已经完成洗涤,响铃10s。

响铃完成之后,标志位清零。

所有数据复位,定时器关闭,回到主函数等待下一次中断响应。

4.3子函数流程图子函数比较简单,主要有注水电机的驱动程序,洗涤时正反转电机的驱动程序,放水电机的驱动程序,脱水时电机的驱动程序以及驱动蜂鸣器的程序。

这些子函数比较简单,都是进行一个I/O口的高低电平输出,然后用定时器进行延时。

在此处便不作流程图,子程序见附录。

5 总结本次设计相当来说比较简单,对单片机的控制要求不高,只是使用到了中断系统,定时器和几个I/O口,最难的是对硬件电路的设计。

硬件电路设计中最难搞的一点就是参数的选取,对于一个完整的电路图而已,要取得电路中的元件参数是难点。

对于不同的电压,要选取什么信号的三极管,其最大开关电流是多少,放在电路中会不会烧坏,电阻要选多少才能有效限流等等这些问题,都是一些初学者比较难以搞懂的东西。

尤其是交流控制直流那部分,一开始有些想不通,我曾经尝试过用一个NPN 型三极管当开关,在集电极处直接接交流负载(交流负载为一个电阻和一个交流接触器线圈串联,而且有24V AC供电),在交流电路和直流电流之间用一个电容连接。

(该电容是用来阻挡直流电进入交流电路的)后来觉得不妥,因为即使三极管基极输出高电平,集电极处该有低电平,但是,对于交流电而已,电容本身也是一个阻抗,而且电容一般是uF级别,非常小,从而得到的阻抗也不小,从而可能导致电容上分担了大部分电压,使通过线圈的电流并未减小到线圈释放的程度,从而无法关断电机。