资讯动态

全自动洗衣机控制系统设计:从状态机到单片机实现全解析

发布时间:2026/10/17 4:02:05 来源:尧图企业网站定制
简介一份完整的全自动洗衣机控制系统设计报告面向机械电子工程、自动化等专业学生及PLC控制系统初学者解决洗衣机自动化控制从方案设计到仿真实现的全流程问题。报告以PLC为核心控制器围绕控制系统要求、总体方案、硬件设计、程序设计和仿真设计五大模块展开详细介绍了PLC机型选型、容量计算、I/O端口分配方法以及触摸屏、信号灯、风扇等外部硬件的选型与连接思路。资源为单个docx文档大小约4.61MB包含完整目录结构从控制系统要求到结论附录共7章体系完整、层次清晰可直接作为课程设计参考或毕业设计模板。已有1308人下载学习。读者可获得完整的洗衣机控制系统设计思路——洗衣、漂洗、脱水、烘干等功能流程规划PLC程序框架设计以及仿真环境中按键添加、信号灯监控和风扇控制等实操演示方法。1. 全自动洗衣机控制系统设计报告从一张时序图到能跑的程序不少人拿到“全自动洗衣机控制系统设计报告.docx”这个题目第一反应是找模板、抄流程图最后交上去的东西自己都不敢看第二遍。但真正做过一次的人会告诉你这份报告的核心不是文档排版而是一套能跑通的控制逻辑进水到什么水位开始洗正反转交替多久排水什么时候开脱水转速怎么给中间任何一步信号错位洗衣机就会变成“只会进水”或“只会转”的废铁。这篇笔记想讲清楚的是把这份报告从“纸面设计”落到“能演示、能复现、能答辩”的完整路径包括硬件选型、状态机设计、电路搭法、参数整定以及在实验室里反复踩过的五个坑。如果你是做课程设计、毕业设计或者第一次接触嵌入式控制系统这篇内容可以帮你直接绕开那些最浪费时间的地方。2. 控制系统总体方案为什么单片机方案最合适2.1 核心控制对象与I/O清单全自动洗衣机的控制对象看起来多其实列成一张表就非常清楚进水阀、排水阀、洗涤电机、脱水离合器或者用双速电机、水位开关、门开关、蜂鸣器、按键和显示。每个对象本质是一个数字量输出或输入不需要模拟量连续控制除了个别变频机型所以单片机方案天然适合。我一般会把I/O表当作报告的“骨架”来写因为后面所有时序、状态机、电路图都要围绕这张表展开。下面是一张常见的I/O分配表以某8位单片机比如STC89系列或STM32F1系列为例信号方向功能对应引脚说明输入启动/暂停按键P1.0低电平有效需消抖输入水位开关高/中/低P1.1-P1.3三档水位选择输入门开关检测P1.4开门时断开强制停止输出进水阀P2.0高电平开阀输出排水阀P2.1高电平开阀输出电机正转P2.2通过驱动电路控制输出电机反转P2.3与正转互锁输出脱水高速P2.4切换绕组或离合器输出蜂鸣器P2.5提示音写清楚这张表你的报告就比一堆复制来的流程图扎实得多。注意一定要在报告里写明“为什么这样分配”比如水位开关为什么用三路输入而不是用一个ADC通道因为传统水位开关是机械式的输出就是高低电平用GPIO读最简单不需要额外处理。2.2 主控芯片选型51和STM32的边界在哪选主控是整个报告里第一个会被答辩老师追问的点。常见选择是两个方向8位51内核芯片或者32位Cortex-M内核芯片。很多同学直接选STM32理由是“性能强”但洗衣机这种逻辑控制场景8位芯片的I/O、定时器、中断完全够用而且电路简单、资料多、成本低。如果报告里选STM32必须有一个站得住的理由比如要做变频电机控制、要用ADC采集压力式水位传感器、要跑模糊控制算法否则老师会认为你只会堆硬件。我实际做过的方案里入门级用STC89C52或者兼容的51芯片足够两个定时器用来做毫秒级时基和PWM输出外部中断接按键I/O口直接驱动继电器或可控硅触发。如果报告被要求做“连续水位检测”或者“脏污程度判断”再换STM32用它的ADC和更强的定时器。选型逻辑写进报告至少能证明你做过对比而不是随便挑了个贵的。另一个关键点是晶体和复位电路。用51的时候晶振选11.0592MHz还是12MHz会影响定时器初值计算。11.0592MHz是为了串口波特率精确如果不做串口通信直接用12MHz定时初值好算。这一步很多报告不写但实际写代码时差出来的时间误差会在长时间洗涤流程里累积导致总时间偏大或偏小。2.3 系统框图与状态机划分报告里的系统框图不需要画得很花哨但必须体现“传感器→单片机→驱动→负载→反馈”的闭环。常见错误是把所有线连在一起却没有信息流向说明。我在写报告时会画成三块输入通道按键、水位、门开关、温度、主控MCU、晶振、复位、电源、输出通道电机驱动、进水阀、排水阀、显示、蜂鸣器。有了框图紧接着就要画状态机。全自动洗衣机的核心流程是启动→进水→洗涤正转-停-反转循环→排水→脱水→如果需要漂洗则重复→结束。每一个状态必须有进入条件、执行动作、退出条件。这里要注意很多模板喜欢画一个大流程图一条线走到底但这种写法在答辩时很容易被问“故障怎么办”。所以状态机里至少要包含一个暂停状态和一个异常停止状态门被打开、超时故障都要能跳进去。状态机建议写成表格而不是纯文字每个状态占一行列出“状态名、动作、转移条件、下一个状态”。这样后面写代码基本就是查表翻译不会漏条件。3. 把洗衣机流程写成状态机时序设计与C语言实现3.1 状态定义与转移条件我习惯把洗衣机控制程序抽象成五个主状态IDLE待机、FILL进水、WASH洗涤、DRAIN排水、SPIN脱水。外加两个辅助状态PAUSE暂停和FAULT故障。每个状态用一个宏定义状态转移用switch-case实现避免用if-else嵌套一大片。转移条件的核心是“事件驱动 轮询”。比如IDLE状态下按启动键进入FILLFILL状态下水位开关变高说明水到位进入WASHWASH状态下设定的洗涤时间到进入DRAINDRAIN状态下排水时间到或者水位开关变低说明排空进入SPINSPIN状态下脱水时间到回到IDLE。这里有一个容易漏掉的条件在DRAIN之后要判断是不是最后一次脱水如果是则直接结束否则先回到FILL进行漂洗。很多初版程序在漂洗流程上出错就是因为没有“漂洗次数”这个变量。下面是一段状态机框架代码基于8位单片机的C语言风格#define IDLE 0 #define FILL 1 #define WASH 2 #define DRAIN 3 #define SPIN 4 #define PAUSE 5 #define FAULT 6 unsigned char state IDLE; unsigned char rinse_count 0; // 漂洗次数 unsigned char max_rinse 2; // 标准程序漂洗2次 void main_loop(void) { while (1) { update_key(); // 扫描按键并消抖 update_sensors(); // 读水位、门开关 switch (state) { case IDLE: if (start_pressed) { state FILL; } break; case FILL: motor_stop(); open_inlet_valve(); if (water_level_reached) { close_inlet_valve(); state WASH; } break; case WASH: run_wash_timer(); // 控制正反转交替 if (wash_timer_done) { state DRAIN; } break; case DRAIN: motor_stop(); open_drain_valve(); drain_timer_start(); if (drain_timer_done water_empty) { state SPIN; } break; case SPIN: close_drain_valve(); // 排水阀保持关闭否则水排不掉 motor_spin(); if (spin_timer_done) { motor_stop(); if (rinse_count max_rinse) { rinse_count; state FILL; // 开始漂洗 } else { state IDLE; // 全部完成 beep(); } } break; case PAUSE: motor_stop(); close_valves(); if (start_pressed) { state resume_from_state; } break; case FAULT: motor_stop(); beep_loop(); if (door_closed start_pressed) { state IDLE; } break; } } }这段代码的逻辑说明每个case里先做动作再判断是否满足转移条件。注意DRAIN状态里“water_empty”这个条件如果只靠排水定时器一旦排水管堵塞定时到了但水没排完直接进SPIN会导致电机带水负载启动容易过载。所以排水是否完成的判据要优先用“水位开关变低”定时超时作为备用。3.2 关键时序参数正反转时间、间歇、脱水洗涤时序是整份报告里最讲究的部分。普通波轮洗衣机的洗涤动作是正转2秒→停2秒→反转2秒→停2秒循环。为什么要有停止时间因为电机启动瞬间电流大频繁正反转冲击继电器触点停止时间既让水流旋转起来也给继电器和电机一个缓冲。这个参数不是玄学是从继电器机械寿命和衣物缠绕程度权衡出来的。我常用的一组参数是洗涤时正转1.8秒、停2秒、反转1.8秒、停2秒。如果水位偏低把运转时间加到2.2秒否则衣物可能浮不起来。脱水时序则分两个阶段先低速运转5秒让衣物贴紧桶壁再高速高档运转120秒。因为突然全速启动会造成剧烈晃动严重时撞桶这也是很多报告里忽略的问题。代码里需要一个毫秒级时基。用定时器0产生10ms中断中断里累加一个计数器所有延时、超时、状态持续时间都靠这个计数器判断。不要在while循环里写空延时函数因为那样按键扫描就会被阻塞长按和短按都识别不了。3.3 用定时器做非阻塞延时下面给出一个10ms时基的实现思路volatile unsigned int tick_10ms 0; void timer0_isr(void) interrupt 1 { TH0 0xDC; // 12MHz晶振10ms初值需根据实际晶振调整 TL0 0x00; tick_10ms; } unsigned int get_tick(void) { unsigned int t; EA 0; // 关中断防止读一半被更新 t tick_10ms; EA 1; return t; }然后任何需要延时的动作都记录一个开始tick循环里判断tick差值。比如正转1.8秒就是开始tick记为start然后while(get_tick()-start 180)让电机继续正转同时还能扫描按键读取暂停信号。这种非阻塞写法在复杂的洗衣机流程里是必须的否则电机一转你按暂停键根本没反应。参数说明TH0 0xDC、TL0 0x00 的初值只针对12MHz晶振和定时器0工作在方式116位计算实际用其他晶振要重新算。课堂答辩时老师常会问这个最好能自己算一遍机器周期12/12MHz1微秒10ms需要10000个机器周期65536-1000055536十六进制就是0xD8F0不同编译器或仿真环境算出来略有差异但思路要写对。4. 硬件电路与仿真从继电器驱动到水位检测4.1 电机驱动方案继电器和双向可控硅怎么选洗衣机的洗涤电机一般是单相交流电机有正转和反转两个绕组或者说通过电容换相。控制上最直接的方式是继电器切换两个继电器分别控制正转和反转再加一个线圈互锁防止同时吸合。这个方案成本低、隔离好、电路简单非常适合入门设计。缺点是继电器寿命有限切换频繁时触点打火所以洗涤时电机运行时间不能太短。另一种方案是双向可控硅。可控硅无触点、寿命长、可以调压调速但需要光耦隔离和过零检测电路更复杂而且对EMC有要求。如果报告写的是变频控制或者无极调速就应该选可控硅如果只是标准程序的正反转切换继电器方案更稳定。有一点必须明确无论哪种方案电机驱动电路都不能直接由单片机引脚驱动必须加中间环节比如ULN2003或者光耦可控硅。我用继电器方案时驱动级用ULN2003每个继电器线圈并联一个续流二极管防止关断时的反电动势打坏芯片。原理图里如果忘了画续流二极管是真的会烧芯片的这个问题后面避坑章节还会提。4.2 水位检测从机械水位开关到压力传感器传统全自动洗衣机常用水位开关本质是一个带有磁环的导气管水位上升气压增大推动膜片使开关动作。输出就是开关量低水位、中水位、高水位对应不同触点。单片机直接读取I/O电平就行不需要ADC。这种方案的优点是便宜抗干扰缺点是只能检测固定几档水位不能连续测量。如果报告想做“水位连续检测”或者“衣物量判断”可以改用压力传感器加ADC。压力传感器的输出电压随水位线性变化经过运放后接入单片机ADC引脚。这时候需要标定比如0cm水位对应0.5V100cm对应4.5V中间按线性插值。要注意传感器的温漂和零点漂移最好在报告里写一个标定流程先测空桶电压再测满水电压然后建立映射公式。我用压力传感器时踩过一个大坑水位传感器的气管如果弯折管内积水会导致测量偏高。所以硬件安装时气管要尽量短、坡度向上这个细节写进报告会显得你很懂实际工程。4.3 显示与按键数码管动态扫描和蜂鸣器提示显示部分最常见的方案是四位/六位数码管显示剩余时间或者程序段号。动态扫描的逻辑是用定时器中断每2ms点亮一位轮流点亮所有位利用人眼视觉暂留形成稳定显示。如果显示位数多刷新频率太低会闪烁太高占用CPU。2ms一位、6位总共12ms刷新周期看起来效果比较舒服。按键处理是另一个容易被忽略的细节。机械按键按下和释放时会有抖动一般持续5-20ms如果不去抖一次按下会被识别成多次。常见去抖方法有两种一种是硬件上接RC滤波一种是在软件里做延时判断。我推荐的软件方法是检测到低电平后延时10ms再读一次如果还是低电平就确认按下。这个逻辑在报告里要用代码说明不能只写“软件消抖”四个字。蜂鸣器的驱动也要注意不要用I/O直接驱动无源蜂鸣器声音太小还容易烧引脚。一般用三极管或蜂鸣器驱动芯片。无源蜂鸣器需要产生一定频率的方波比如2kHz用定时器翻转I/O实现有源蜂鸣器直接给高低电平就能响。报告里要写明选的是哪一种因为程序写法完全不一样。5. 设计报告避坑指南这5个坑让我返工了两周5.1 现象洗涤时电机只会单转反向没反应原因是我在电路里用了两个继电器分别控制正反转但继电器的公共端接法错了。洗衣机电机的两个绕组是通过电容移相的如果接线时把电容串到了只有一条路径里反转绕组永远得不到电压电机自然只往一个方向转。另一个隐藏原因是代码里正转和反转之间缺少短暂延时导致一个继电器还没完全断开另一个就吸合机械互锁被打破短路跳闸。解决方法是先确认继电器触点接线用万用表量电机两根电源线的通断状态。正转继电器闭合时电机两端应该接L和N反转继电器闭合时两端接线交换。然后在正转切换到反转之间强制加一个500ms全停状态让电机反电动势泄放掉再合反转继电器。5.2 现象水位一直检测不到程序卡在进水阶段原因是我用的水位开关是常开型水位到达后触点闭合但我在程序里配置成了“高电平表示到达”而实际电路是低电平有效。这种逻辑反了的问题在仿真里看不出来一上实物就无限进水。还有一个常见原因是水上来了但气管漏气压力传不到水位开关的膜片。解决方法是先看电路原理图确认水位开关一端接VCC、另一端接I/O并带下拉电阻那么到位时I/O读到高电平。如果反了要么交换接线要么把程序里的判断条件取反。另外在报告测试记录里写清楚“水位开关常态电平”和“动作电平”这个表能帮你自己快速排错。5.3 现象脱水时洗衣机剧烈晃动甚至撞桶原因是我在程序设计里结束排水后立刻进入高速脱水没有低速预脱水阶段。衣物都堆在桶的一侧高速一转重心偏移震动直接放大。另一个原因是排水没排干净桶里还有水形成了动态不平衡。解决方法是增加低速脱水阶段转速大概为高速的30%持续5-10秒让衣物在离心力作用下摊开。同时检查排水阀是否完全打开排水时间是否足够。程序上要给脱水开始前加一个“检测水位为空”的强制条件如果水位不为空就继续排水这比纯延时靠谱很多。5.4 现象程序运行中偶发跑飞洗衣机突然停止工作原因是我没有加看门狗也没有对按键做防抖。现场环境有电机启动的电磁干扰单片机的复位引脚被干扰拉低程序直接重启。更麻烦的是按键误触发比如衣服碰到按钮导致暂停状态被意外进入。解决方法是开启单片机内置看门狗在主循环里定期喂狗。按键用状态机消抖连续两次采样间隔10ms且状态相同才确认变化。另外单片机复位电路要加一个0.1μF的去耦电容在电源引脚上电机驱动线与信号线分开走不要平行捆在一起。这些属于硬件EMC的基本做法报告里可以单独列一小节。5.5 现象报告里时序图和实际代码对不上答辩时被老师当场发现原因是我先写了代码再根据代码“反推”时序图结果代码后来反复改过时序图却忘更新。老师看一眼洗涤正反转时间和排水时间就发现和代码里的宏定义不一致。这种错误非常尴尬说明报告数据不是从实现里来的。解决方法是把程序里的所有时间参数提取成宏定义变量比如#define WASH_DRIVE_MS 1800然后用一个脚本或者手工从宏定义生成时序图。更简单的方式是报告里直接截一段代码中的参数表旁边配上波形示意保证数字完全一致。最后通宵检查的时候用Excel列出状态名、代码里的延时值、报告里的时间值三项一一对齐不留模糊地带。6. 让报告从「课程作业」变「可展示项目」的3个加分项6.1 第一项给出可验证的测试记录表很多人的报告结尾只写“本系统完成了预期功能”这句话毫无分量。我会附上一张测试记录表列出测试序号、测试场景、输入条件、预期结果、实际结果、是否通过。比如“测试启动功能上电后按启动键应进入进水状态进水阀打开实测进水阀LED亮通过”。有了这张表答辩老师一眼就能看出你是真的做过而不是建模复制。建议在测试表里加入异常测试门未关合时按启动、水龙头关闭导致进水超时、排水管堵塞导致排空超时。这些异常测试能体现你对系统鲁棒性的理解比单纯测正常流程得分高得多。6.2 第二项用串口或逻辑分析仪打印状态迁移如果有串口在程序里加一个调试模式每次状态切换时发送一个字符比如“F”表示进水“W”表示洗涤。用USB转串口接到电脑上运行一次完整程序记录下整个状态序列。然后把序列和报告里的时序图对比如果有差异马上能发现是逻辑问题还是时序参数问题。这个习惯让我在一次排查中直接找到了漂洗次数没有归零的bug因为串口打印出来的序列在第一次漂洗后没有回到进水状态而是直接跳到了脱水。如果没有串口用逻辑分析仪抓I/O波形也能达到同样的效果。抓电机控制引脚和水位引脚观察波形是否和时序图一致。把抓到的截图作为报告附件说服力比任何文字描述都强。6.3 第三项预留扩展接口哪怕这个方案是基础版本我也会在报告末期写一段“扩展设计”把衣物重量检测、水质浑浊度检测、模糊控制洗衣流程提出来。不需要真的实现但要有接口预留说明。比如单片机留一个ADC引脚用来接浑浊度传感器程序里预留一个measure_turbidity()函数入口。这段文字会让答辩老师觉得你不是只会照搬经典流程而是能在这个框架上延展。写到这里又想起我当年第一次做洗衣机控制因为贪图省事把进水阀和排水阀同时打开了结果水一边进一边出程序还正常运行直到我听到下水道的水声才发现。这种低级错误其实都源自于没有把状态机里的互斥条件画清楚。后来我养成一个习惯每次动手写状态转移之前先在纸上列出“哪些输出绝对不能同时为真”。进水阀和排水阀不能同开电机正转和反转不能同通这三个互斥条件写清楚了洗衣机的骨架就不会歪。希望这篇笔记能帮你把这份设计报告真正做成一个能跑、能讲、能复现的项目也希望帮到你少走我走过的弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑