摘 要
伴随着计算机数字技术领域的进一步深入发展,单片机以产品体积更小、功能也全面、价格更为低廉、开发较为
方便实用的独特优点,被用户广泛接受应用于进行各种数字智能硬件控制软件的开发。它是主要的应用于智能仪器仪
表,工业领域的自动控制过程、交通运输行业、家用电器(例如:冰箱,洗衣机,空调等等),通信领域以及航天航
空领域等。
用STC12C5A60S2单片机作控制器,用keil 编写洗衣流程,用 Proteus仿真观测洗涤,漂洗,脱水等功能的实
现。该设计系统主要部件由外部电源模块、单片机模块和若干外部的硬件电路模块共同组成。电源模块可以给单片
机系统提供一个5v级的工作直流电压源;单片机系统通过单片机程序编程来控制洗衣机设备的各种工作,主要是由
STC12C5A60S2系列单片机、按键、蜂鸣器、LED指示灯、PNP型差分放大电路组成的;外部控制硬件电路有主要是三极
管,继电器,,继电器,1602LCD组成。外部硬件电路实现后,只要给STC12C5A60S2单片机载入软件程序后,就可以实
现你所需要的功能。
虽然它与当今市面上功能多种多样的全自动洗衣机系统没有可比性,但是却也拥有一定程度的实用性。同时还能
够利用C语言进行编程,实现了洗衣机生产自动化。
关键词: STC12C5A60S2;继电器;控制系统;电机控制
1 绪论
1.1 课题开发背景
自改革开放40年到现在,我国经济赶超日本德发英,随之发展迅猛的是科学技术,人们的生活也开始多样化,
各种应用型机械的使用越来越普遍。在从前,手洗衣服要占据我们很多时间,因此洗衣机的诞生解放了我们的双
手,即使是在寒冷的冬天,只要动动我们的手指,两分钟就能完成一个小时才能完成的事情,这就很好的缓解了家
务劳动的压力。目前的洗衣机市场更新换代是很快的,各种类型,各种功能的洗衣机也是层出不穷,市场前景也是
一片光明,因此对于洗衣机的选择,在功能和品牌上人们会有更多的要求。目前的洗衣机的功能也是多种多样,这
也意味着,设计者们必须有更高的专业能力和知识水平,才能设计出更符合人们需求的洗衣机。
自2001年12月11日中国正式成为世贸组织成员国起,中国正式与世界接轨,国外的品牌涌入中国,为适应我们
中国的市场,开始研发满足我们需求的技术,同时也为我们国内带来了很多新的技术,带动上下游企业竞争,因此
在洗衣机行业也爆发了新一轮的技术改革,主要在于“绿色环保,节约水资源,节约电能”的追求。目前能够在市
场上活跃的洗衣机品牌也大多都是能够满足基本需要需求且在“绿色”这方面能够做到精益求精的企业。按ZDC互联
网消费调研中心提供的最新研究报告数据表明,海尔已占据国内市场的半壁江山,其余像小天鹅,西门子,美的等也
是比较红火的品牌。
1.2 国内外现状及水平
1.2.1洗衣机的分类
半自动洗衣机:需要人为多次操作,可以一边洗衣一边甩干,并手动可以多次洗衣;
全自动洗衣机:能自动实现洗涤、漂洗、脱水等所有功能,而且在洗衣过程中不需要人为干预。
全自动洗衣机按照不同的工作方式进行区分,一般分为波轮式、滚筒式和搅拌式。这三种洗衣机在世界范围
内,并不是交错混合在全球市场中,而是分布在不同的地区。第一台波轮式洗衣机是日本发明。波轮式洗衣机都是
上开门式的。在中国,东南亚地区大部分居民使用的是波轮式洗衣机。滚筒洗衣机是侧开门式的洗衣机。滚筒式洗
衣机市场主要在南美洲和欧洲等主要穿纯毛,棉的地区。搅拌式洗衣机是美国人发明并广泛应用于美国,在中国市
场比较难见。滚筒式居多占全球洗衣机市场的52%,波轮式和搅拌式分别占33%、15%[1]。以下是关于波轮式、滚筒
式和搅拌式洗衣机的论述。
(1) 滚筒式洗衣机
滚筒式洗衣机主要洗衣特点是节水,这类洗衣机采用了控制水量大小的节水技术,如果其洗涤一次用水约
70100公升,那么同等洗衣任务下,波轮洗衣机约用水180240公升。通过对比可以看出,滚筒洗衣机用水量约为波
轮洗衣机的40%~50%。而且有高温洗涤功能,具有一定的灭菌效果。同时,高温可以使洗衣服中的酶的活性提高,可
以充分使用洗衣粉,从而节约洗衣粉的用量。
(2) 波轮式洗衣机
在洗衣机市场中,滚筒式洗衣机的价格是要比波轮式洗衣机要高很多的,并且波轮式洗衣机就能够基本满足中
国的洗衣需求,基于这一层关系就注定了波轮式洗衣机在中国会更加受到欢迎。虽波轮式洗衣机在节水节能方面比
滚筒式洗衣机要差,但是由于价格相对便宜。但是其缺点也相当明显,波轮式洗衣机洗衣相对比较暴力,护理性也
没有那么强,但是据有业内人士表示,尖端洗涤技术的革新,一直是洗衣机行业发展的主导力量,其所表现出的洗
衣方式更加注重健康和个性化,已在市场发展中倍受欢迎[2]。
(3)搅拌式洗衣机
搅拌式洗衣机之所以在美国盛行,在中国几乎很少见,其根本是因为搅拌式洗衣机洗衣能够一次性洗涤很多的
衣物,美国人的风格就是攒一大堆衣服然后一起洗,而且其洗衣效果最好,比较省洗衣粉,洗洁均匀,不磨损、省
电。但是和之前的两种洗衣机对比起来较容易缠绕,而且噪音很大。而且价格也相对比较高。
1.3 设计的目的和意义
目前的洗衣机市场更新换代是很快的,各种类型,各种功能的洗衣机也是层出不穷,市场前景也是一片光明,
因此对于洗衣机的选择,在功能和品牌上人们会有更多的要求。同时也要求研发者们有更高的技术要求,能够做出
更加符合人们智能洗衣机。现在农村人民也逐渐富裕,对于全自动洗衣机的需求也越来越大,这也促进洗衣机的革
新和功能多样性及对基于单片机的洗衣机控制系统设计进行深入研究。而本次设计的洗衣机也是为了满足某些用户
的需求而服务,但也能够满足基本的洗衣过程而开发。并在研发过程中将单片机控制技术应用到实际中,提高对单
片机的了解,同时提高实践能力,为以后对单片机研发打下良好的基础,我相信通过亲身设计能够从中得到收获和
成长。
2 设计方案
2.1 方案选择
2.2.1方案1 PLC设计
PLC主控模块(如图2-1)以PLC编程设计电气控制系统,硬件设计人机界面,选择洗衣机工作模式,实现控制洗
衣机电机工作,传感器组成用来采集检测数据的检测系统。
人机界面人机界面控制系统PLC
检测系统
2.2.2方案2 STC12C5A60S2单片机设计
图2.2 单片机控制系统
基于单片机控制芯片的开发设计,以STC12C5A60S2系列单片机主板模块为其控制核心器件,电源模块、时钟模
块、复位模块、显示控制模块、按键式控制输出模块等单元和步进式电机输出控制模块组成。通过单片机编程实现
洗衣机运行。
2.2.3方案论证与选择
对于方案一PLC可编程控制器它的功能强大,可以作为洗衣机的控制系统,但是由于价格昂贵,不经济,制作难
度比较大,所以放弃这个方案。方案二基于单片机设计,电路的绘制简单明了,功能多样设计起来比较容易创新,
体积较小,操作方便;因此,具有比较强的创造价值。故本次设计采用方案二。
2.2 设计任务
2.2.1主要内容
基于STC12C5A60S2单片机设计了一个洗衣机控制器,扩展了外部控制电路[3],实现洗衣功能。
2.2.2 主要功能:
(1)标准洗涤模式:“标准涤”程序为开机或复位后默认选中程序。选择该程序时,标准洗指示灯点亮,预设执
行动作顺序为“进水→洗涤2分钟→排水→脱水3秒→进水→漂洗2次→排水→脱水5秒→报警3秒→程序执行结束复
位”。
(2)快速洗涤模式:选择该程序时,快速洗涤指示灯点亮,预设执行动作顺序为“进水→洗涤1分钟→排水→
脱水3秒→进水→漂洗1次→排水→脱水5秒→报警3秒→程序执行结束复位”。
(3)自编程洗涤模式:选择该程序时,自编程指示灯点亮,预设执行动作与快速洗涤相同,但可使用K2~K6按
键修改洗涤时间、漂洗次数、脱水时间;洗涤时间修改范围05分钟,增减梯度单位为30秒;漂洗次数修改范围03
次,循环递增;脱水时间修改范围0~10秒,增减梯度单位为1秒。
(4)有八个按钮。第一个是洗衣机程序选择键K1,按K1键可循环选择“标准洗涤、快速洗涤、自编程”洗衣程
序;选择“标准洗”和“快洗”洗衣程序时K2K6按键不可用;选择“自编程”洗衣程序时,可使用K2K6按键自定
义洗衣程序。第二个(K2)到第六个(K6)是编程键,当按下K1选择“自编程”洗衣时可用。K2、K3增减洗涤时间,
每按1次增/减30秒;K4循环递增选择漂洗次数;K5、K6增减脱水时间,每按1次增/减1秒。第七个是洗衣程序运行/
暂停切换键K7,选择好洗衣程序后,第一次铵K7键启动执行洗衣程序,之后每按一次,程序在运行和暂停之间相互切
换,直到洗衣程序执行结束。第八个是洗衣机的强制复位键K8,任何时候按K8键,系统停止任何程序执行,复位到
初始状态。
(5)进水时进水指示灯亮,执行进水动作5秒,此时电机不动作;排水时排水指示灯亮,排水指示灯点亮,电机
不动作,排水时间固定为5秒;洗涤时洗涤指示灯亮,电机按照“正转5秒→停3秒→反转5秒→停3秒”循环工作,洗
涤执行时间由洗衣程序决定;漂洗时漂洗指示灯亮,电机按照“正转5秒→停3秒→反转5秒→停3秒”顺序运行为漂
洗1次,执行完毕指示灯熄灭;漂洗执行次数由洗衣程序决定,多次漂洗时在相邻的两次漂洗动作之间需插入“排水
→脱水3秒→进水”动作;脱水时脱水指示灯亮,电机正转,脱水执行时间由洗衣程序决定;执行完毕排水和脱水指
示灯熄灭。
2.3 洗衣机的设计方案
本设计是基于对整个洗衣过程进行控制的。该系统以整个洗涤流程为基础,对进水、洗涤、漂洗、排水、脱水
等各环节进行监控。控制实现包括电源电路,单片机控制以及外部的硬件电路。该供电线路由三端一体化的固定稳
压器7805供电。通过单片机编程体现洗衣机的工作过程。主要由STC12C5A60S2单片机、PNP型差分放大器、LM324电
压比较器、按键、蜂鸣器、LED指示灯组成。
2.3.1 按键
洗衣机面板上一共有8个按钮K1、K2、K3、K4,K5,K6、K7、K8。
K1:洗衣机功能选择键(可选择标准洗涤,快速洗涤,自编程洗涤);
K2:洗涤时间增加键(选择按下自编程洗时工作,每次增加30秒);
K3洗涤时间减时键(选择按下自编程洗时工作,每次减少30秒);
K4漂洗次数键(选择按下自编程洗时工作,最多三次);
K5脱水时间增加键(选择按下自编程洗时工作,每次增加1秒);
K6脱水时间减时键;((选择按下自编程洗时工作,每次减少1秒);
K7启动/暂停键;
K8强行复位键;
2.3.2 设计总方框图
图2.3.2 设计总方案图
2.4 控制系统的功能
按下洗衣机功能键,在标准模式、快洗模式和自编程模式中选择。再次按启动按钮,清洗工作开始,进水电磁
阀开始进水,进水完成后,开始清洗,在规定的时间内,电动机进行正转、停止、反转、停止循环运动,电机驱动
皮带进行清洗;清洗完成后,马达停止工作,排水电磁阀开始放水;一段时间后,进行脱水操作,电动机启动高效
率的正向旋转,完成脱水程序后,关掉排水阀,同时电动机停止工作,接着进水电磁阀重新开启,再进水,洗衣机
进入冲洗状态,清洗完毕,进行放水,放水一段时间后,进行脱水,在脱水过程完成后,关掉排水电磁阀,切断马
达电源,同时蜂鸣器发出提醒使用者洗衣过程结束的声音。
3 元器件的选择
3.1 洗衣机类型的选择
3.1.1. 波轮上开门洗衣机的优点
(1)用电少,干净,操作方便,可随时添加衣物,且容量大,体积小。
(2)洗衣更方便,更快捷适合于多数国人,并且市场消量相对也大。
(3)噪音小,洗涤时间短,价格便宜
3.1.2. 波轮上开门洗衣机工作原理
通过电机驱动洗涤桶底的波轮,使衣物上下不停地转动,使衣物与衣物之间、衣物与桶壁之间产生轻微的摩
擦,并在洗涤液的帮助下,完成清洁。
考虑到波轮上开门洗衣机的诸多优势,本文选用了波轮上开门式洗衣机。
3.2 1602LCD液晶模块
LCD1602液晶显示是可调节的点阵型液晶模块,可以显示数字、英文大小写字母和一些普通的符号,具有16×2
个字符的显示丰富内容,还可以显示8个自定义字符。LCD1602的诸多优点使其经常用于便携式仪表和低功耗应用系
统中。由于LCD1602识别16进制的ASCII码,故其可以直接给程序赋值。器件内部有各种指令功能,同时还有复位电
路。同时有80字节显示数据存储器DDRAM,内置1925×7点阵的字型的字符发生器CGROM,8个可由用户自定义的5×7
的字符发生器CGRAM[4]。
1602LCD采用16脚接口,引脚功能定义如下图:
引脚号 符号 引脚说明 引脚号 符号 引脚说明
1 VSS 电源地 9 D2 数据端口
2 VDD 电源正极 10 D3 数据端口
3 VO 偏压信号 11 D4 数据端口
4 RS 命令/数据 12 D5 数据端口
5 RW 读/写选择端 13 D6 数据端口
6 E 使能信号 14 D7 数据端口
7 D0 数据端口 15 BLA 背光源正极
8 D1 数据端口 16 BLK 背光源负极
表3.2.1 引脚功能定义
LCD1602的基本操作分为四种:
RS RW E D0-D7输出
0 0 高脉冲 无
0 1 高脉冲 字
1 0 高脉冲 无
1 1 高脉冲 数据
主要技术参数指标:
显示容量 16x2个字符
芯片工作电压 4.5~5.5V
工作电流 2.0mA(5.0V)
模块最佳工作电压 5.0V
字符尺寸 2.95x4.35(WXH)mm
表3.2.2 参数指标
显示模块的方案比较。
方案 LCD1602 数码管
优点 辐射小,可以显示字符、图片等,低耗能,控制简单 亮度高,成本低,显色性好
缺点 本身不发光,显色性不好,不适合做图,图像还原不好 不能显示字符、图片,耗电
表3.2.3 显示方案比较
由于在本设计中,要求可以显示洗涤时间,脱水时间,漂洗时间,总洗衣时间四个时间,使用LCD1602显示比较清晰
明了,且LCD1602的低功耗、控制简单、显示画面稳定和成本较低等诸多优点。
3.3 洗衣机电机的选择
3.3.1.洗涤-脱水电机
根据市场上的不同品牌的洗衣机,发现在400-500转/分钟内,要达到最佳的清洗效果,就必须以1400-1500转/分钟的转速来降低衣物的损伤,并使其达到最佳的脱水效果。电动机的功率由电动机的速度求出,其计算步骤如
下。
(1)电机的速度:
电动机的满载转差率为1~6% ,转差率取 ,频率 。
当工作在漂洗或者洗涤时的电机:电机低速运转,定子极对数 ,套入公式得转速 。
当工作在脱水时的电机:电机高速运转,定子极对数 ,套入公式得转速 。
(2)电机转动时必须克服转矩 , 角速度 力矩 (滚筒的半径)
洗衣机转动过程中衣服和滚筒之间的摩擦力 , 衣物重量(含水) 摩擦系数
洗涤漂洗时电机的转矩: ;
脱水时电机的转矩:
(3)电机的功率:
洗涤漂洗时电机的功率:假设: 套入公式得:
脱水时电机的功率:假设: 套入公式得:
3.3.2洗涤-脱水电机的原理
为了改善洗衣效果,避免衣物纠缠,需要两个方向的水力驱动,所以清洗-脱水马达均采用双向马达。为了适应
洗衣机的洗涤速度和脱水速度,该马达具有双重速度。其将两组具有不同磁极的线圈排列在马达的定子上。采用鼠
笼式转子,能够实现对两组定子绕组的自动调整。由于这种电动机在低转速下的时极数较多,转速较低,为了满足
低转速的扭矩和电机的温升、效率,电动机的体积较大。单相异步电动机结构简单,使用寿命长,但是成本比单相
异步电动机要高。通过对电机性能的全面分析,并对其性能进行了研究,确定了YXG62/2/16 G西门子单相异步电
机。以下为西门子单相异步电机的原理图。
图3.1 电动机的实物图 图3.2 电动机的接线图
3.4 单片机的选择
3.4.1 STC12C5A60S2单片机的优点
(1)主打高速,低功耗,超强抗干扰,指令代码完全兼容传统8051,速度快8-12倍;
(2)对开发设备要求低,开发时间大大缩短,而且写入的程序可进行加密[5]。
3.4.2 STC12C5A60S2单片机的引脚图和实物图
图3.3 STC12C5A60S2引脚图 图3.4 STC12C5A60S2实物图
3.4.3 引脚描述
端口引脚 功能
VCC 电源端
GND 接地端
XTAL1 外接石英晶体的一个引脚
XTAL2 外接石英晶体的另一个引脚
RST 复位输入端
ALE 地址锁存允许
外部程序存储器(外ROM)的读选通信号
外部访问允许端
P0口 一组8位漏极开路型双向I/O口,地址数据总线复用口
P1口 一个内部上拉电阻的8位双向I/O口
P2口 一个内部上拉电阻的8位双向I/O口
P3口 一个内部上拉电阻的8位双向I/O口
表3.1 STC12C5A60S2引脚功能表
端口引脚 第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 (外部中断0)
P3.3 (外部中断1)
P3.4 T0(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 (外部数据存储器写选通)
P3.7 (外部数据存储器读选通)
表3.2 P3口第二功能
STC12C5A60S2单片机优点甚多,能够满足全自动洗衣机的程序的设计,所以,本设计采用宏晶科技生产的主打高速/
低功耗/超强抗干扰的单片机STC12C5A60S2。
3.5 水位开关与电磁进水、排水阀
3.5.1电磁进水、排水阀
进水阀控制电路3.5.1.1图所示。单片机通过P2.6端口控制继电器开关,PNP型三极管作为缓冲,发光二极管显
示状态,当P2.6端口处于高电平通电时,三极管处于导通状态,继电器的线圈中就会有电流流过,使继电器开关吸
合,指示灯亮,阀门打开。反之,当P2.6端口处于低电平时,三极管处于截止状态,继电器的线圈中无电流流过,
继电器断开,
排水阀控制电路如图3.5.1.2所示。排水管与进水阀的工作线路相同。单片机用 P2.7端口对继电器进行控制,
PNP三极管作缓冲器, LED显示状态,在 P2.7端口高电平上电时三极管接通,电流从继电器线圈中流过,使继电器
接通,指示灯点亮,阀门开启。相反, P2.7口在低电平时三极管是关的,没有电流从继电器的线圈中流过,继电器
被切断,等于是直接接地,并且指示灯不能点亮,阀门关闭。进水电路和排水管线路是相同的,都是用软件编程实
现的。
电磁吸水阀是一种对进、停水进行控制的装置。电磁泄压阀是一种对自动进、停水进行控制的装置。进水阀门
和排水阀门的选择,只要其结构简单,维护方便,性能优良,价格低廉。通过对不同品牌的对比和质量的对比,我
们最终选定了科多的电磁阀。按需要的排水量选择合适的电磁阀。最终我选择的是:科多FCD-270L 工作电压:220V
(交流) 流量:可调范围20~50L/min。
3.5.2水位开关
水位开关用于监测洗衣机的水位,而水位开关的内部电路是连接进水阀门的线圈和水位开关,当进水结束时,
水位开关也会被切断。在脱水期间,水位开关接触件Kq1可自行复位。Kq1指如图3.5.2.2的AB两触点。
水位开关的压力值得设定,如下是其计算值。
压力的设定值
贮气室水位上升高度 标准大气压
水的密度
根据计算的结果,选用 KEWLLKFP30型活塞压力开关,它具有性价比高、性能好、压力可调、误差极低、压力范围为
100 KPa~110 KPa,完全符合设计要求。
3.6 蜂鸣器
蜂鸣器的功能是在洗衣机完成洗衣工作后,蜂鸣器会响起,提醒使用者洗衣工作已经结束。在设定洗衣服的时
候,按下一个按钮,蜂鸣器有声音提示说明表示按键已经设定好了。CPU P2.4接口是用来驱动蜂鸣器来发送不同类
型的警报。
3.6.1 蜂鸣器仿真电路
通过网络上的蜂鸣器资料,选用120分贝的电磁式蜂鸣器作为洗衣机的报警装置,其分贝可以清楚的传入到人的耳
中,并能更精确的告知用户已清洗完毕。所以选择:华兴 HXD型有源蜂鸣器,输出2.5 V,电流20 mA,结构简单,
使用范围广,成本低廉。图3.6.3、3.6.4是蜂鸣机的实际情况及附加的线路图.
图3.6.3 蜂鸣器的实物图 图3.6.4 蜂鸣器的外接线路图
4 控制系统及外部的电路
4.1 控制系统的电路组成
该电路主要组成部件是由STC12C5A60S2单片机、指示灯、电动机、蜂鸣器、LCD1602显示器、及8个按键组成
[6]。其组成如图4.1所示。显示器的RS,RW,E分别受P2.0,P2.1,P2.2控制,显示字符的D0-D7口经组排电阻受单片
机的P0口控制。电机有三个端口,由两个单片机引脚接口,P2.5与电机的正转反转两个执行动作的两个端口连接,
另一个引脚P2.3控制电机的停止。有两个电磁开关,分别控制进水和排水,进水电路与单片机的P2.6连接,当单片
机给进水电路一个“置0”信号时,进水电路执行进水动作,进水开关打开,当单片机给“置1”信号时,进水开关
关闭,进水电路不工作。排水电路与进水电路相似,排水电路受单片机P2.7管脚控制,单片机给排水电路一个“置
0”信号时,排水电路执行排水动作,排水开关打开,当单片机给“置1”信号时,排水开关关闭,排水电路不工
作。。蜂鸣器被单片机的P2.4控制,通过程序编写给单片机的P2.4输出一个“置1”的信号蜂鸣器发声。本系统使用
了11.0592MHz的晶体振荡器,其计时装置0的计时时间是50 ms,计时器0的中断间隔为50 ms,计时器1的计时时间是
65 ms,而计时器1的中断是65 ms.
图4.1控制系统的电路组成图
4.2 电源电路
单片机系统电源部分的电气原理图如图4.2所示。市电220V经过变压器T变压为12V交流电压,通过4只二极管
1N4004全桥整流后,再经过电容C滤波后得到光滑的直流电压,经过三端稳压器7805稳压后得到稳定的+5V电压给各器
件供电[7]。C1、C3为滤去低频纹波,C2和C4为滤去高频干扰信号,其量值为0.1 uF和10 pF。
4.3 单片机控制电路
4.3.1 单片机的复位电路
重置回路是对单片机进行初始化的一种方式,它要求 RST端口持续输出高达2个周期,并将其还原为程序启动时
的状态。单片机的复位电路有两种,一种是上电复位,一种是人工复位,另一种是在断电后用 RC电路进行复位;人
工重置是按下按键, RST端口为高电平,以完成重置。下面这张图片是一个重置电路,它是手工重置和上电重置的
组合。
4.3.2 单片机的时钟电路
单片机时钟电路是用于与外部晶体实现振荡的电路配合,提供运行的时钟给微控制器,如运行时钟为零的话,
单片机将无法正常工作,以及超过微控制器的工作时钟频率将导致微控制器停止工作[8]
STC12C5A60S2单片机采用石英晶体振荡器作为时钟电路脉冲,本次设计当使用内部时钟的时候,在晶振引脚
XTAL1和XTAL2之间接入一个11.0592MHz的时钟频率晶振,XTAL1和XTAL2分别接一个35PF的电容,然后两电容对地接
便可产生所需时钟信号。在不使用串口通讯时,通常使用6 MHz和12 MHz的晶体振荡。由于该方案采用了串行通讯,
可以精确地确定T0的初始数值是整数,所以本设计选用了11.0592 MHz的时钟频率晶振。图4.3.2.1显示了时钟电
路。
晶振频率(MHZ) 波特率 (HZ) SMOD T1方式2定时初值 实际波特率 误差(%)
17
12.00 9600 1 F9H 8923 7
12.00 4800 0 F9H 4460 7
12.00 2400 0 F3H 2404 0.16
12.00 1200 0 E6H 1202 0.16
11.0592 19200 1 FDH 19200 0
11.0592 9600 0 FDH 9600 0
11.0592 4800 0 EAH 4800 0
11.0592 2400 0 F4H 2400 0
11.0592 1200 0 E8H 1200 0
表4.3.2.2 常用波特率和误差
4.3.3 LED显示电路
本设计的显示电路由LED显示洗衣工作状态和1602LCD显示电路组成。LED显示屏包括8个 LED,8个 LED与P3端口
的8个输入/输出端口相连,P3.0~P3.7依次代表标准洗指示灯、快速洗指示灯、编程洗进水指示灯、排水指示灯、洗
涤指示灯,漂洗指示灯,脱水指示灯。这些指示灯在洗衣程序的控制下与洗衣过程对应闪亮。当发光二极管的负极
所对应的P3口为低电平时,发光二极管导通。一般LED点亮电压在3.0V左右,导通电流约15mA,所以LED的保护电阻
约为 。
4.3.4 蜂鸣器报警电路
本电路设计采用无源蜂鸣器。利用 P2.4管脚与蜂鸣器报警器相结合, P2.4输出高电平,对蜂鸣器的报警回路
进行控制,使蜂鸣器发出警报。R19的功能是降压保护电阻,在 P2.4输出高电平时,R19将使其基极电压下降。
4.3.5 电动机的控制电路
- 继电器的作用
继电器实际上是一个开关元件,具有隔离功能。
2.电动机控制电路的工作原理
图4.7是电机在洗涤,漂洗,脱水的电路原理图。电动机有两个控制端,一端控制电机正反转,一端控制电机停
止。并与 P2.5、 P2.3单片机进行了接口。当系统提供电源时,220 V的 AC电压通过继电器施加到电机的两个控制
端子上。P2.3在收到“正转”命令后,输出高电平, P2.5输出低压,Q3使继电器K13电导通,由此使电动机正向旋
转。P2.5在收到“反转”命令后,输出一个高电平, P2.5的高电平通过Q4,以使继电器K12得电导通,由此使电动
机反向转动。当单片机接到“停止”指令时,P2.3输出低电平,电机不得电从而使电机停止。
4.3.6 进水/排水电路
如图4.9所示,进水阀受P1.6的控制,排水阀受P1.7的控制。当KM4线圈在电控水龙头的控制端子 P1.6是“0”
的情况下会开启进水阀。KM5线圈在电控水龙头P1.7的控制端子 P1.7是“0”的情况下得到电流,从而开启了排水
阀。
5 单片机模拟程序
5.1 主程序设计
根据设计要求,主程序流程图如图5.1所示。
图5.1 主程序流程图
5.2 洗衣程序设计
该设计设置三个洗衣模式,程序也分别写三个洗衣模式,标准洗,快洗,自编程洗。
1.标准洗衣程序,其流程图如5.2.1所示:
图5.2.1 标准洗程序流程图
2.快速洗衣程序,其流程图如图5.2.2所示:
5.3 洗涤程序的设计
洗涤程序是在整个洗衣流程中最先开始执行的动作,也是洗衣的主要部分,在进水阀打开,在预设时间内进水,到
达时间,进水阀关闭,电机开始正反转,达到预设时间排水阀打开,执行排水动作。程序流程图如图5.3所示。
图5.3洗涤程序流程图
5.4 漂洗程序的设计
漂洗执行的动作和洗涤是一样的,区别在于两者电动机转速不同。标准洗漂洗两次,快洗漂洗一次,自编程洗
可以漂洗1-3次。漂洗程序流程图如图5.4所示:
5.4 漂洗流程图
5.5 脱水程序的设计
整个洗衣过程中有三次脱水,分别在洗涤和第一次漂洗过程中,在第一次漂洗和第二次漂洗过程中(自编程洗
有多次漂洗,也是同运行流程),在最后一次漂洗后进行一次脱水,然后整个洗衣结束。以下是两个脱水程序流程
图。第一个脱水比较简单,电动机启动,正转,到达预设时间,电动机停止,程序执行接下来的洗衣工序。第二个
是洗衣结束前的最后一次脱水。在执行完脱水程序,蜂鸣器会以120分贝的音量响起,提示洗衣结束。程序流程图如
图5.5.1和5.5.2所示:
图5.5.1 洗涤和第一次漂洗脱水流程图
图5.5 最终脱水程序流程图
5.6 LED指示灯程序的设计
如图5.7为LED指示灯程序流程图,根据洗涤过程中指示灯的亮度次序和时间,编制了程序流程,其中进水指示
灯和排水指示灯分别在洗涤、漂洗过程中均有亮,且在两个过程中亮次数时间都不相同,这一点在程序设计中表现
得更为明显。
以下分别是标准洗,快洗和编程洗LED指示灯程序流程图。
图5.6.1 标准洗LED指示灯程序流程图
5.6.2 快洗LED指示灯程序流程图
5.6.3 快洗LED指示灯程序流程图
6 系统仿真
6.1 Proteus软件介绍
本设计的程序将用Protues软件通过仿真实现。Proteus软件为单片机应用系统的开发,它是英国Labcenter
electronics公司研发的EDA工具软件,不仅是模/数字电路的设计仿真平台,更是目前世界上最好的多种型号单片机
系统的设计仿真平台[9]。Proteus不但因为能直接绘画出电路原理图象模型和实现对模拟电路系统的直接仿真,同时
又因为它自身也同时在编译方面也支持到了Keil编译器,具有操作界面简单、包含的元器件丰富等特点。
6.2 Proteus仿真
本程序设计方法主要可以用于在Proteus软件上绘制好原理图文件后,打开"使用远程调试监控"的对话框,然后调
入Keil文件中包含的已被编译并写好了的目标代码文件*.hex,进行电路仿真和调试,然后开始实物制作,使设计效率
得到了很大提升。
6.2.1 仿真初始化
点击Proteus软件的全速运行按钮,初始化系统,LCD1602液晶屏的显示界面如图6.2.1。这时洗衣机的洗衣程序默认为标准程序,显示屏显示标准洗的洗涤时间两分钟、漂洗次数两次、脱水时间五秒和预计程序执行总时间三分
十六秒。
6.2.2 标准程序仿真结果
用户按下功能键选择标准洗,再按下运行暂停键,洗衣机进入标准洗衣程序。洗衣机自动打开进水阀,给洗衣
机的内桶加水,然后开始洗涤。显示屏显示标准洗的洗涤时间两分钟、漂洗次数两次、脱水时间五秒和预计程序执
行总时间三分十六秒。按下运行暂停键,标准洗程序开始执行洗衣任务,预计执行总时间开始倒计时,洗衣完成蜂
鸣器响起声音提示。如图6.2.2所示:
图6.2.2 标准洗显示界面
6.2.3 快洗程序仿真结果
用户按下功能键选择快洗模式,再按下运行暂停键,洗衣机进入快洗衣程序。洗衣机自动打开进水阀,给洗衣
机的内桶加水,然后开始洗涤。显示屏上显示一分钟的快速漂洗时间,一次漂洗,一次脱水时间五秒和预计程序执
行总时间一分十四七秒。按下运行暂停键,快洗程序开始执行洗衣任务,预计执行总时间开始倒计时,洗衣完成蜂
鸣器响起声音提示。如图6.2.3所示:
图6.2.3 快洗界面
6.2.4 编程洗仿真结果
用户按下功能键选择编程洗模式,再按下运行暂停键,洗衣机进入编程洗衣程序。洗衣机自动打开进水阀,给
洗衣机的内桶加水,然后开始洗涤。显示屏初始显示快洗模式下的洗涤时间一分钟、漂洗次数一次、脱水时间五秒
和预计程序执行总时间一分十四七秒。如图6.2.4.1所示:
图6.2.4.1 编程洗界面
按下功能键选择自编程洗的条件下可以选择洗涤时间加,洗涤时间减键,漂洗次数键,脱水时间加键,脱水时
间减键,用户可根据自己的需求进行洗衣时间调整。洗涤时间最长可达五分钟,漂洗次数最多可到三次,脱水时间
最长可达十秒,程序执行总时间为六分五十秒。洗衣完成蜂鸣器响起声音提示。如图6.2.3.2所示:
图6.2.4.2 编程洗下洗涤,漂洗,脱水最长时间界面
7 总结
关于全自动洗衣机这个课题的研究,在历时五个多月的孜孜不倦中完美的落下帷幕。在全球化背景的趋势下,
自动化,智能化将会一直伴随在我们的生活。不断的提高我们的知识水平是我们能在未来走得更加稳固的一个支
撑。我也将终生学习,以求能够在自动化这一领域能够有自己的一席之地。本论文以全自动洗衣机为方向,为我对
自动化领域的了解敲开了一点痕迹,使我窥探到了自动化神秘的一角。
本设计是基于单片机控制的全自动智能化的洗衣机设计,这涉及到了单片机的最小电路,电源电路,按键控制
电路,显示电路等等的设计研究和分析。与传统传统洗衣机是有所区别的,本设计实现了洗衣机的三个基本功能,
标准洗,快洗,自编程洗。与现在市场上能够区分开来的,主要是我们增加了一个自编程洗。可以使用户能够选择
自己想要的洗涤漂洗脱水时间。在经历了许多次的程序修改,从不成功到基本实现功能,这一过程中,是我受益许
多。本次的毕业设计是我独立完成的最大的一个,也是专业性最强,涉及知识最广泛的,从总体方案的确定到元器件
的选择,到电路分析,软件的编写,仿真的实现都是我通过查阅相关的文献,期刊以及相关书籍慢慢摸索,最终完
成。
由于本人的设计知识水平的限制以及时间的限制,本文的设计肯定会有很多的不足之处,请大家给予批评和纠正,同时我也会通过大家的指正,逐步修改我的毕业设计。
.附录
附录A 仿真图
附录B 原理图
附录C 元器件清单
序号 器件名 类型/大小 数量
1 单片机 STC12C5A60S2 1块
2 排阻 10K 1个
3 晶振 11.0592MHZ 2个
4 电阻 1K 3个
0.1k 7个
电解电容220uf 1个
32
5 电容 电解电容10uf
瓷片电容20p
1个
2个
6 插座 DIP-40 1个
7 液晶显示器 LCD1602 1块
8 按键开关 - 5个
9 万能板 1218cm 1块
10 继电器 SRD-5VDC-SL-C 5个
11 直流电机 - 1个
12 电机驱动芯片 L298N 1块
13 自锁开关 88mm 9个
14 发光二极管 - 11个
15 二极管 4001 4个
16 三极管 S9012 5个
17 蜂鸣器 5v 1个
18 电位器 1k 1个
19 USB接口 - 1个
20 排针 - 若干个
21 杜邦线 - 若干根
22 usb连接线 - 1根
附录D 相关程序
#include <reg52.h> //包含头文件和宏定义
#define uchar unsigned char
#define uint unsigned int
#define LcdData P0 //定义LCD1602数据接口
sfr ISP_CONTR=0xe7; //定义特殊功能寄存器ISP_CONTR地址E7,带软件复位功能
sbit RS=P2^0; //定义LCD1602控制接口
sbit RW=P2^1;
sbit E=P2^2;
sbit pri=P2^3;
sbit buzz=P2^4;
sbit moto=P2^5;
sbit water_in=P2^6;
sbit water_out=P2^7;
sbit K1=P1^0; //按键控制 //定义按键
sbit K2=P1^1; //洗涤时间加
sbit K3=P1^2; //洗涤时间减
sbit K4=P1^3; //漂洗次数
sbit K5=P1^4; //脱水时间加
sbit K6=P1^5; //脱水时间减
sbit K7=P1^6; //运行,暂停
sbit K8=P1^7; //复位
sbit LED1=P3^0; //标准洗
sbit LED2=P3^1; //快洗
sbit LED3=P3^2; //编程洗
sbit LED4=P3^3; //进水
sbit LED5=P3^4; //排水
sbit LED6=P3^5; //洗涤
sbit LED7=P3^6; //漂洗
sbit LED8=P3^7; //脱水
bit flag_run=0,flag_run2=1;
bit flag_reset=0; //复位标志位
bit buzz2,pri2,water_in2,water_out2;
void init(); //函数声明
void reset();
void delayms(uint xms);
void WriteLcd(uchar Dat,bit x);
void InitLcd(void);
void displayLcd();
void keyscan();
void stand_washing();
void fast_washing();
void program_washing();
void Lcd_process();
uchar aa=0,num_K1=1,num_washing=2,num_washing3=1,time_dry=5,time_dry3=5;
uint time_washing=120,time_washing3=60,second=0,rest_time=0,total_time=0,total_time3=107;
uchar idata Firstline[16]= {"WT: 2:00 PN: 2 "};
uchar idata Secondline[16]={"DT: 05 TT:3:16"};
void main() //主函数
{
init();
InitLcd();
while(1)
{
if(num_K1==1&&flag_run==0)
{
LED1=0;
LED2=1;
LED3=1;
time_washing=120; //标准洗参数赋值
num_washing=2;
time_dry=5;
total_time=196;
rest_time=total_time;
}
if(num_K1==1&&flag_run==1)
{
LED1=0;
LED2=1;
LED3=1;
stand_washing();
}
if(num_K1==2&&flag_run==0)
33
{
LED1=1;
LED2=0;
LED3=1;
time_washing=60; //快洗参数赋值
num_washing=1;
time_dry=5;
total_time=107;
rest_time=total_time;
}
if(num_K1==2&&flag_run==1)
{
LED1=1;
LED2=0;
LED3=1;
fast_washing();
}
if(num_K1==3&&flag_run==0)
{
LED1=1;
LED2=1;
LED3=0;
time_washing=time_washing3; //自编程洗参数赋值
num_washing=num_washing3;
time_dry=time_dry3;
if(num_washing>=2)
total_time3=26+time_washing+time_dry+num_washing*16+((num_washing-1)*13);
else
total_time3=26+time_washing+time_dry+num_washing*16;
total_time=total_time3;
rest_time=total_time;
}
if(num_K1==3&&flag_run==1)
{
LED1=1;
LED2=1;
LED3=0;
program_washing();
}
}
}
//void reset() //软件复位函数
// {
// ((void(code *)(void))0x0000)();
// }
void init() //初始化函数
{
34
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-65000)/256;
TL1=(65536-65000)%256;
EA=1;
ET0=1;
ET1=1;
PT1=1;
TR0=0;
TR1=1;
P3=0xff;
pri=0;
buzz=0;
LED1=0;
water_in=1;
water_out=1;
time_washing=120; //标准洗参数赋值
num_washing=2;
time_dry=5;
total_time=196;
rest_time=total_time;
num_K1=1;
aa=0;
second=0;
flag_run=0;
}
void delayms(uint xms) //1ms延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=93;j>0;j--);
}
void WriteLcd(uchar Dat,bit x) //写指令时x=0,写数据时x=1
{
省略
}
void InitLcd(void) //LCD液晶屏初始化函数
{
省略
}
void Lcd_process() //LCD液晶屏动态变化显示函数
{
Firstline[4]=time_washing/60+0x30;
Firstline[6]=time_washing%60/10+0x30;
Firstline[7]=time_washing%60%10+0x30;
Firstline[14]=num_washing+0x30;
35
if(time_dry>=10||time_dry==0)
{
Secondline[5]=time_dry/10+0x30;
Secondline[6]=time_dry%10+0x30;
}
else
{
Secondline[5]=0+0x30;
Secondline[6]=time_dry+0x30;
}
Secondline[12]=rest_time/60+0x30;
Secondline[14]=rest_time%60/10+0x30;
Secondline[15]=rest_time%60%10+0x30;
}
void keyscan() //键扫描函数
{
省略
}
void stand_washing() //标准洗函数(共3分16秒,即196秒)
{
uchar i=0;
time_washing=120; //标准洗参数赋值
num_washing=2;
time_dry=5;
total_time=196;
TR0=1;
P3=0xfe; //标准洗指示灯亮
LED4=0; //进水状态(5秒)
pri=0;
water_in=0;
delayms(5000);
P3=0xfe; //洗涤状态(2分钟)
water_in=1;
LED6=0;
for(i=0;i<7;i++)
{
pri=1;
moto=0; //马达正转5秒
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
moto=1; //马达反转5秒
pri=1;
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
}
36
pri=1;
moto=0; //马达正转5秒
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
P3=0xfe;
LED5=0; //排水状态(5秒)
pri=0;
water_out=0;
delayms(5000);
P3=0xfe;
LED5=0; //脱水状态(3秒钟)
LED8=0;
water_out=0;
moto=0; //马达正转脱水3秒
pri=1;
delayms(3000);
P3=0xfe;
LED4=0; //进水状态(5秒)
pri=0;
water_out=1;
water_in=0;
delayms(5000);
P3=0xfe; //第一次漂洗状态(16秒)
LED7=0;
water_in=1;
water_out=1;
moto=0; //马达正转5秒
pri=1;
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
moto=1; //马达反转5秒
pri=1;
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
P3=0xfe;
LED5=0; //排水状态(5秒)
pri=0;
water_out=0;
delayms(5000);
P3=0xfe;
LED5=0; //脱水状态(3秒钟)
LED8=0;
water_out=0;
moto=0; //马达正转脱水3秒
37
pri=1;
delayms(3000);
P3=0xfe;
pri=0;
LED4=0; //进水状态(5秒)
pri=0;
water_out=1;
water_in=0;
delayms(5000);
P3=0xfe; //第二次漂洗状态(16秒)
LED7=0;
water_in=1;
moto=0; //马达正转5秒
pri=1;
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
moto=1; //马达反转5秒
pri=1;
delayms(5000);
pri=0; //马达停止3秒
delayms(3000);
P3=0xfe;
LED5=0; //排水状态(5秒)
pri=0;
water_out=0;
delayms(5000);
P3=0xfe;
LED5=0; //脱水状态(5秒钟)
LED8=0;
water_out=0;
moto=0; //马达正转脱水5秒
pri=1;
delayms(5000);
P3=0xfe;
pri=0;
water_out=1;
buzz=1; //报警状态(3秒钟)
delayms(3000);
buzz=0;
init(); //结束状态(复位)
P3=0xfe;
}
void fast_washing() //快洗
{
省略
}
38
void program_washing() //自编程洗函数
{
省略
}
void time0_inter() interrupt 1 //T0中断服务函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
second++;
if(rest_time!=0)
rest_time=total_time-second;
}
if(flag_run==0)
{
buzz2=buzz;
pri2=pri;
water_in2=water_in;
water_out2=water_out;
buzz=0;
pri=0;
water_in=1;
water_out=1;
ET0=0;
}
while(!flag_run)
{
flag_run2=0;
}
if(flag_run2==0)
{
buzz=buzz2;
pri=pri2;
water_in=water_in2;
water_out=water_out2;
ET0=1;
flag_run2=1;
}
}
void time1_inter() interrupt 3 //T1中断服务函数
{
TH1=(65536-65000)/256;
TL1=(65536-65000)%256;
keyscan();