设计简单的洗衣机控制系统:基于51单片机实现

第一章 课程设计主要任务

1.设计内容

(1)设计一个洗衣机控制系统,用直流电机的转速表征三种不同洗衣方式:弱洗、强洗、漂洗;

(2)用三个独立按键设置待洗衣物的不同洗涤方式,实现最长10分钟定时:

    丝质衣服: 漂洗 定时3分钟

棉质衣服:弱洗 2分钟;强洗 5分钟;漂洗 3分钟;

化纤衣服: 强洗 4分钟;漂洗 2分钟;

(3)定时时间到,蜂鸣器报警提示。

第二章 总体设计

2.1 总体设计及功能描述

本设计以单片机 AT89C51为控制核心, 采用模块化设计, 共分以下几个功能模块:单片机控制系统模块、 电源模块、 时钟模块、 复位模块、 按键控制模块、 直流电机控制模块和显示模块等。 洗衣机主要有三种衣物的定时洗涤方式、报警和暂停等功能。

系统结构框图如下图2-1所示: 

 

各模块功能如下:

1.AT89C51单片机:洗衣机控制系统的核心控制器件。

2.时钟电路模块:产生时钟驱动单片机工作。

3.复位电路模块:将单片机的寄存器重定,使程序指针回到最初位置。以便于系统运行时,程序从最初位置开始执行。

4.电机调速控制模块:利用L298驱动芯片输入不同的信号使电机产生正转和反转。

5.显示模块:显示模块电路采用3个 LED 和3个电阻以及LCD液晶显示屏与单片机相连,利用 C 语言程序设计实现洗衣机自动化显示功能。

6.报警模块:定时时间到,蜂鸣器报警提示。

2.2 系统硬件设计

(1) 单片机控制模块的设计

AT89C51单片机是一种高效微控制器, 也是低功耗高性能单片机。 单片机是本设计的核心主要起控制作用, 采用 40 引脚双列直插封装形式, 32 个外部双向输入/输 出(I/O)埠, 同时内含 2 个外中断口, 2 个 16 位可程序设计定时计数器, 2 个全双工串行通信口,因为受引脚数目 的限制, 所以有不少引脚具有第二功能。 外形及引脚排列如图 2-2 所示。

 AT89C51单片机的主要管脚功能:

VCC: 供电电压。

 GND: 接地。

 P0 口: P0 口为一个 8 位漏级开路双向 I/O 口, 每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时, 被定义为高阻输入。 P0 能够用于外部程序数据存储器, 它可以被定义为数据/地址的第八位。

P1 口: P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流。 P1 口管脚写入 1 后, 被内部上拉为高, 可用作输入, P1 口被外部下拉为低电平时, 将输出电流, 这是由于内部上拉的缘故。

 P2 口: P2 口为一个内部上拉电阻的 8 位双向 I/O 口, P2 口缓冲器可接收, 输出 4个 TTL 门电流, 当 P2 口被写 1 时, 其管脚被内部上拉电阻拉高, 且作为输入。 并因此作为输入时, P2 口的管脚被外部拉低, 将输出电流。

P3 口: P3 口是 8 个带内部上拉电阻的双向 I/O 口, 可接收输出 4 个 TTL 门电流。当 P3 口写入 1 后, 它们被内部上拉为高电平, 并用作输入。 作为输入, 由于外部下拉为低电平, P3 口将输出电流(ILL) 这是由于上拉的缘故。 RST: 复位输入。 当振荡器复位器件时, 要保持 RST 脚两个机器周期的高电平时间。

ALE/PROG: 当访问外部内存时, 地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 程序设计期间, 此引脚用于输入程序设计脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号, 此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时目的。

PSEN : 外部程序内存的选通信号。 在由外部程序内存取指期间, 每个机器周期两次 PSEN 有效。 但在访问外部数据存储器时, 这两次有效的 PSEN 信号将不出现。

 EA/VPP: 当 EA保持低电平时, 则在此期间外部程序内存(0000H-FFFFH), 不 管是否有内部程序内存。 注意加密方式 1 时, EA将内部锁定为 RESET; 当 EA端保持高电平时, 此间内部程序内存。在 FLASH 程序设计期间, 此引脚也用于施加 12V 程序设计电源 (VPP)。

                      

图 2-2 AT89C51 单片机的管脚图

 电源、 时钟信号以及复位电路是单片机工作的基本条件, 缺一不可。 AT89C51 单片机系统的基本工作电路包括电源电路、 时钟电路、 复位电路。 其组成方框图如图 2-3 所示。

          

 (2)时钟电路模块设计

电源电路模块为系统电路和其他模块提供+5V 电源。 供电电源可由开关电源提供。

时钟电路模块的设计

 由于 AT89C51单片机芯片内有时钟振荡电路, 因此本系统单片机采用内部时钟方式,只要在单片机的 XTAL1和 XTAL2引脚外接石英晶体和微调电容, 就构成了自激振荡器并在单片机内部产生时钟脉冲信号, 具体电路设计如图 2-4 所示。  工作原理: 时钟信号通常用两种电路形式得到: 内部振荡和外部振荡。 在 XTAL1 和 XTAL2 引脚上外接定时组件, 就能构成自激振荡电路。 定时组件通常采用石英晶体和电容组成的并联谐振电路。一般电容 C4 和 C5 主要起频率微调作用, 电容值可选取为 30pF 左右或 40pF左右; 晶体振荡器, 简称晶振, 其晶振频率(fosc) 范围为 1. 2MHz~12MHz, 本设计中选择12MHz。 晶体振荡频率越高, 系统的时钟频率也越高, 单片机的运行速率就越快。

图 2-4 时钟振荡电路

(3)复位电路模块设计

复位电路使单片机或系统中的其他部件处于某种确定的状态。 当在 MCS-51 系列单片的 RST 引脚处引入高电平并保持 2 个机器周期, 单片机内部就执行复位操作。 复位操作有两种基本形式: 一种是上电复位, 另一位是按键复位。 本设计采用按键复位方式。 如图 2-5  工作原理: 当按下按键时, RST 直接与 VCC 相连, 出现 2 个以上的高电平形成复位, 同时电解电容被短路放电; 按键松开时, 电容充电, 电流流过电阻, RST 为高电平, 仍然是复位,充电完成后, 电容相当于开路, RST 为低电平, 正常工作。

图 2-5 复位电路

(4)按键控制电路设计

单片机设计中, 重要的一个模块是按键的设计。 常见的单片机按键设计分为独立式和行列式(矩阵式)。 独立式按键设计简单, 但占用 I/O 口较多; 行列式按键设计相对复杂, 占用 I/O 口较少。 如图 2-6 所示。

 图 2-6 控制电路,为方便使用,设计了 五个独立式按键,分别为丝质、棉质、化纤、启动和暂停。

丝质:K1键选择洗衣方式;

棉质:K2键选择洗衣方式;

棉质:K2键选择洗衣方式。

启动:洗衣机启动,开始洗衣。

停止:洗衣机无论在何种工作状态下都会停止工作,蜂鸣器报警结束洗衣。

(5)蜂鸣器报警电路设计 

本设计中,当某个洗衣方案完全结束,会有蜂鸣器 3S 钟的报警时间。 蜂鸣器电路设计 如图 2-7所示。由单片机直接输出的信号不足以驱动蜂鸣器的工作。因此,在单片机与蜂鸣器之间加一个 PNP 三极管作为驱动。三极管的基极通过一个 4.7K 欧的电阻与单片机相应的 I/O 相连,电源和蜂鸣器与发射极极相连,集电极接地。这样就完成了蜂鸣器的驱动电路。

图 2-7 蜂鸣器驱动电路

(6) 显示电路设计

 在单片机应用系统中, 对于系统的运行状态和运行结果, 通常都需要直观显示出来。本设计采用的是3个共阳极发光二极管和LCD液晶显示屏显示, 显示电路如图 2-8 所示。 显示电路由3个LED 和3个电阻构成。 3个电阻都分别为 100 奥姆, 在电路中, 电阻起限流保护作用, 防止 LED 被烧坏。 3个 LED 是共阳级, 当输入低电平时 LED 点亮, 当输入高电平时 LED 熄灭。

      图 2-8 显示电路(LED灯和LCD液晶显示屏)

(7) 直流电机驱动电路设计

图 2-9 直流电机电路

 图 2-9 所示为一个典型的直流电机控制电路

直流电机的控制通过L298电机驱动芯片,它能同时控制两个电机。当IN1和IN2同时输入高电平或者低电平是电机停止不转,  IN1输入低电平IN2输入高电平时电机反转;同时ENA和ENB分别是使能端,能对电机进行PWM速度控制。L298N可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。用数字频率代替Vc的电压波形,尤其是在PWM脉冲上升或下降边沿时刻所对应的Vc波形。

2.3 硬件仿真电路图

如图2-10所示

                             

第 3 章 系统软件设计

软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的, 由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。 软件采用模块化设计方法, 不仅易于程序设计和调试, 也可减小软件故障率和提高软件的可靠性。同时, 对软件进行全面测试也是检验错误排除故障的重要手段。 由于程序设计多涉及到数值运算, 比较复杂, 还有 LCD 灯的显示设计都是需要多重选择判断,用我们平时常用的汇编程序设计是很难实现的,这里我们选用了移值性好、结构清晰、能进行复杂运算的 C语言来实现程序设计。

3.1软件主要程序流程

整个系统的功能是由硬件电路配合软件来实现的, 当硬件基本定型的时候软件也基本定下了, 从软件的功能不同, 可以分为两的类: 一是监控软件(主程序) 它是整个软件的核心, 专门用来协调各个执行模块和操作者的联系。 二是执行软件(子程序) 它是用来完成各种实质性的工作的, 如测量、 计算、 显示、 通讯等。 每一个执行软件就是一个小的执行模块, 这里将每一个模块一一列出来, 并为每个执行模块进行功能定义和接口定义。 各执行模块规划好以后, 就可以规划监控软件了。 首先要根据系统的总体功能选择一种最合适的监控程序结构, 然后根据实时性的条件, 合理安排监控软件和执行软件之间的调度关系。

洗衣机通电之后单片机上电首先进行程序的初始化包括定时器0、外部中断0、外部中断1的初始化以及各参数初值的设定。然后进行按键检测,默认洗衣强度为“丝质衣服”漂洗3分钟。扫描按键的状态确定洗衣过程。当发现启动键按下洗衣机从待命状态进入工作状态并在LCD1602显示屏上显示衣物,洗涤方式及倒计时。其中,丝质衣服: 漂洗 定时3分钟;棉质衣服:弱洗 2分钟;强洗 5分钟;漂洗 3分钟;化纤衣服: 强洗 4分钟;漂洗 2分钟;当洗衣结束时控制蜂鸣器发声。

主要流程图如下图3-1                 

 

3.2.主要子程序

主要子程序包括丝质衣服洗涤程序,棉质衣服洗涤程序,化纤衣服洗涤程序,电机控制子程序,T0中断服务子程序等

3.2.1丝质衣物洗涤程序设计

开始选择按键,K1按下选择丝质衣服,再按下K4启动洗衣机,进入3分钟定时漂洗,若途中按下K5则暂停,蜂鸣器发出警报,结束洗衣;否则3分钟漂洗结束蜂鸣器发出警报,洗衣结束。

流程图如下图3-2-1

3.2.2棉质衣物洗涤程序设计

开始选择按键,K2按下选择棉质衣服,再按下K4启动洗衣机,进入2分钟定时弱洗,若途中按下K5则暂停,蜂鸣器发出警报,结束洗衣;否则弱洗结束进入5分钟强洗,同理中途暂停结束洗衣,否则强洗后进行3分钟漂洗后蜂鸣器发出警报,洗衣结束。

流程图如下图3-2-2

3.2.3化纤衣物洗涤程序设计

开始选择按键,K3按下选择化纤衣服,再按下K4启动洗衣机,进入4分钟定时弱洗,若途中按下K5则暂停,蜂鸣器发出警报,结束洗衣;否则弱洗结束进入2分钟漂洗后蜂鸣器发出警报,洗衣结束。

流程图如下图3-2-3

3.2.4关于直流电机转速的强洗,弱洗,漂洗程序设计与实现

直流电机转速的数字频率来实现强洗,弱洗,漂洗。

当电机转速数字频率小于10时电机转动实现漂洗;当电机转速数字频率大于10且小于30时电机转动实现漂洗;当电机转速数字频率大于30且小于50时电机转动实现漂洗;

流程图如下图3-2-4

直流电机转速实现强洗、弱洗、漂洗程序:

void pwm(uchar k)//弱洗、强洗、漂洗; 

{

uchar i;

for(i=0;i<99;i++)

{

if(k==1)

{

if(i<30)   //弱洗

out=0;

else

out=1;

}

if(k==2)

{

if(i<50)    //强洗

out=0;

else

out=1;

}

if(k==3)

{

if(i<10)   //漂洗

out=0;

else

out=1;

}

}

}  

3.2.5 T0中断服务子程序

该子程序运用定时器T0中断,该子程序的主要作用是使时间达到1秒时,令1秒标志为真,返回到主函数运行时间减1,1秒标志为假,再调用到该子程序以此实现每秒显示时间减1。

第4章 系统仿真

4.1 Protoeus8.11keil μVision5

本设计用Proteus 8.11软件作图,C语言对单片机进行控制操作,易读好懂,用Keil μVision5软件进行了调试。

4.2调试中遇到的问题

当编译通过,但⼀点下Debug功能时,可以进去调试界⾯,马上就崩溃了,路径名中有中⽂字符,计算机⽤户名称是中⽂。

解决办法:换个深度浅⼀点的路径。更换路径之后,要全部重新编译,否则调试的时侯MDK还会找旧路径的源代码;换个别的路径,路径中不带中⽂就好;更改计算机⽤户名称。此计算机:右键->管理->本地⽤户和组->⽤户。右键点击->重命名。

修改并重新编译后编译结果如下图4-1所示:

图4-1 Keil μVision5调试结果

4.3 模拟图

在Keil中生成.hex文件之后,在proteus里打开原理图,将生成的档加载到单片机中,经过反复调试,三种衣物洗涤方式如下图4-2、4-3-1、4-3-2、4-3-3、4-4-1、4-4-2所示:

(1)silk丝质衣服模拟图:漂洗3分钟倒计时为0蜂鸣器报警,洗衣结束。

图4-2 Proteus8.11 silk丝质衣服漂洗中

(2)cotton棉质衣服模拟图:棉质衣服先弱洗两分钟再强洗五分钟再漂洗三分钟,实现最长时间10分钟倒计时,计时为0蜂鸣器报警,洗衣结束。

图4-3-1 Proteus8.11 cotton棉质衣服弱洗中

图4-3-2 Proteus8.11 cotton棉质衣服强洗中

图4-3-3 Proteus8.11 cotton棉质衣服漂洗中

(3)chemical化纤衣服模拟图:化纤衣服先强洗四分钟再漂洗两分钟,实现6分钟倒计时,计时为0蜂鸣器报警,洗衣结束。

图4-4-1 Proteus8.11chemical化纤衣服强洗中

图4-4-2 Proteus8.11chemical化纤衣服漂洗中

第五章 总结

1.通过最后的硬件和软件的模拟调试,本课题的研究工作已经达到预期的要求,归纳起来有以下几点:

(1)本课题实现了洗衣机控制系统的自动化。

(2)系统硬件设计使用的有芯片AT89C51,电容,晶振,电阻,L298驱动器,lcd1602液晶显示屏,LED灯,蜂鸣器,按钮,三极管PNP,直流电机等。

(3)系统软件设计包括初始化程序、T0中断服务程序,三种模式程序,LCD1602显示程序,延时函数,报警程序等,完成了洗衣机控制系统的自动化。

2.本次设计主要是以 AT89C51单片机为核心的, 对洗衣机进行了简单的设计与阐述。 本次设计可以说是软硬结合,又以硬件为主,软件为辅。 当今科技发展迅速,单片机嵌入式开发有着光明的前景。 由于单片机具有经济实用、开发简便等特点, 所以依然在工业控制、 家电等领域占据广泛的市场。由于我以前对 51 单片机的 C 语言没有认真钻研过,所以感觉课程设计的任务十分紧迫。 通过对本系统的设计, 我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。 通过实际的程序设计和不断的调试过程,我更加熟练地掌握了单片机相关程序的程序设计方法,在不断的设计过程中,我对单片机系统有了更深刻的认识,进一步熟悉和掌握了单片机的结构以及它的工作原理,对定时、中断程序等有了更深地认识,学到了如何熟练使用仿真软件Proteus8.11和程序设计软件Keil uVision5。程序设计的过程中, 虽然不乏辛苦,但更多的是程序调试成功后的喜悦。

总之, 这次课程设计对我来说是一次比较全面的、富有创造性和探索性的锻炼,完成了我选题时的心愿。令我深有感触, 对于我今后的学习、工作和生活都将是受益非浅的!

                                第六章  源代码(需要的看作者个人简介提供答疑)

物联沃分享整理
物联沃-IOTWORD物联网 » 设计简单的洗衣机控制系统:基于51单片机实现

发表评论