淘宝网洗衣机减速器三维图或者洗衣机减速器内部结构

发布时间:

本篇文章给大家谈谈洗衣机减速器三维图,以及洗衣机减速器内部结构的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

文章详情介绍:

不仅要看外表更要看内心 洗衣机电机大盘点

【天极网家电频道】又到了一年秋末冬初,降低的气温让大家都换上了厚衣服。这个季节的水温较低,大多数人在这个季节都会选择使用洗衣机清洗衣物。只需要将衣物放入其中、加入洗涤剂,静静等待便可以完成清洗过程。你是否也曾好奇洗衣机的工作原理?其实对洗衣机来说,它的核心就在于其内部的电机,不同种类的电机所提供的动力不同,能耗也不同,究竟我们在购买时应该如何挑选呢?接下来就让我们一起来看一看吧。

淘宝网洗衣机分类大集合 定频变频到底是什么?

对于洗衣机来说,电能通过插座流入,通向洗衣机电机,并通过电力带动电动机高转速运行,以产生强劲动力带动内筒转动。那么在这样的过程中,到底是什么决定了电机是定频还是变频呢?关键就在于其内部核心的电机转速频率是否可以改变。定频发电机采用交流电动机,由于结构问题并没有换向器,导致电机的转动频率固定。从使用角度来看,这点反映在了洗衣机无法控制内筒的转速,如果想要减慢速度,只能通过不断的开启、关停实现。

变频洗衣机则采用直流电机,其中增加了换向器,可以通过调节电压进而调节输出转速,从而控制洗衣机的转速。用户不仅可以随时更改洗涤转速和脱水转速,还可以让洗衣机在最符合的转速下运转,不会由于动力过大对衣物造成损伤。

除是否可以改变电动机转速外,定频洗衣机与变频洗衣机在能耗上也有差别。定频洗衣机由于只能通过频繁关、停来调整洗涤状态,耗电量较高。而变频电机则可以实时根据目前洗衣状态进行调整,不需要每时每刻都维持在最高转速下运行,而是以最适合的转速下运转。通过这样的方式,变频洗衣机的耗电相比定频洗衣机要少。正是由于这样的优势,目前市面上常见的大都为变频洗衣机。

常用电机大盘点 谁的性能最佳?

如果说什么是洗衣机的心脏,那一定就是电机了。正是由于它的存在,才能为洗衣机带来强劲的动力。那么目前市面上种类繁多的电机,我们又该如何选择呢?接下来,小编将就市面上常见的几种电机进行讲解。

首先先让我们来看一看定频洗衣机所使用的电机。我们在购买洗衣机时候,常听到普通电机,但究竟普通电机是什么呢?其实,普通电机仅仅是一个大分类,其中包含感应电机和串激电机。感应电机为普通单相电机,内部具有电容,这类电机应用至洗衣机中时,主、副绕组的匝数等相同,只需要调换位置便可以完成转向。这种电机具备结构简单、效率较高、使用便利等特点。但由于无法调速,启动性能较差,较多应用于波轮洗衣机。通过改变绕组,感应电机也可以更改不同的转速,这样的“双速”电机较多应用于波轮洗衣机,这是由于它无法为滚筒洗衣机提供合格的甩干转速。

普通电机总还有一类电机,在洗衣机领域内也有所,它便是串激电机。串激电机体积小,但功率大,相对而言噪音也较大。同时,串激电机内部有碳刷,常会随着使用而慢慢磨损。在工作时候,它还伴有较强的电磁干扰。因此,尽管这类电机动力十分强劲,但却并不如其他电机那样适合洗衣机。

目前滚筒洗衣机大多使用DD直驱电机或是BLDC电机,接下来小编将会介绍这两种应用在变频洗衣机中的电机。

DD电机中的DD,采用直驱“Direct Driver”的简称。直驱电机在驱动系统的控制下,直接将电机与负载相连,并以此直接带动负载。这样的优点就在于它的输出力矩很大,因此可以直接与滚筒内部的运动装置连接,不需要经过减速器、齿轮箱、皮带等设备连接。DD电机一般都会配备解析度更高的编码器,再加上直接驱动不需要部件的连接方式,DD电机对调速的范围大大提升,对速度变化的响应也更快。由于不需要经过多项设备,电机在工作时引起的共振降低,噪声也进一步减小,进一步提升了效率。而由于减少了连接部件,对电机整体来说,使用寿命大大提升。但另一方面,DD电机由于结构与其他电机均不相同,因此需要洗衣机厂商们需要在安装模式上进一步调整,这样也加大了成本。因此,DD直驱电机常使用在高端产品中。

BLDC是“Brushless Direct Current”的简写,即无刷直流电机。其中无刷的“刷”,指的是安装在电机定子上的电刷,它的作用是通过线圈完成对电流方向的交替改变。BLDC电机使用电子换向器,对操作的响应速度快,启动转矩较大。定子上的电刷在电机工作时常会因摩擦而产生火花,摩擦产生的碳粉也会对内部零件造成损伤,而消除了电刷干扰的BLDC电机则兼具了直流有刷电机的成本低、效率高的优点。但值得一提的是,BLDC电机仍采用传统的皮带连接方式,有水汽的情况下易打滑。

编辑点评:对于购买定频洗衣机的消费者来说,感应电机的性能优于串激电机。而对购买变频洗衣机的消费者来说,BLDC电机与DD电机均各有优势,消费者可以依靠产品功能、价格等挑选需要的产品。

海尔波轮全自动变频洗衣机结构与故障检修

一、海尔XQSB70-128波轮全自动变频洗衣机外形结构及电路图

二、海尔XQSB70-128波轮全自动洗衣机常见故障检修

1、通电后整机不工作

首先测电脑程控器电源输人两端是否有电压。

若有5V电压,则更换电脑程控器;若无电压,则拔下电源检测导线组件(白色塑件蓝色线)与电源插头零线端子间电阻是否正常;若为无穷大,则检测导线组件白色塑件蓝色线所插接的端子与导线组件蓝色线间电阻是否正常;若电阻为0、则更换电源线;若电阻为无穷大,则检查熔丝是否熔断;若良好,则检查熔丝与两端导线是否接触良好;若是,则检查电脑程控器是否故障。

实际检修中因熔丝与两端导线连接异常而引起此类故障有所存在。

2、称量不准

首先检查波轮是否被卡住。

若否,则检查电动机是否被卡住;若是,则将卡住电动机的物体取出或更换电动机;若否,则检查减速器是否被卡住;若是,则将卡住减速器的物体取出或更换减速器;若否,则检查电脑程控器是否有问题;若完好,则检查驱动器是否有问题。

实际检修中因电脑程控器有问题而引起此类故障有所存在。

3、洗衣不转

首先启动无水程序,进行无水洗涤,观察电动机是否转动。

若转动,则检查传动系统(轴承部锁住离合器)是否异常;若不转,则测电动机两端电压是否正常(正常应为220V);若正常,则检查电动机保护器是否动作;若无电压,则测电源板输出两端电压是否正常;若正常,则检查驱动器是否不良;若没有电压,且电动机、电容器正常,则说明电源板有问题。

实际检修中因传动系统异常而引起此类故障有所存在。

4、使用“不用洗衣粉”程序时,洗涤不干净或洗衣液pH值小

首先打开后盖,检查改质箱是否有改质液。

若有,则使用“C4”程序,接通水,启动并打开上盖,观察是否进水;若否,则重新选择正常程序启动,观察是否进水;若是,则测二连阀两端是否有电压;若有24V电压,则检查三连阀是否损坏;若无,则检查电脑板有无输出;若有,则检查线束是否损坏;若无,则检查电脑板是否故障。

实际检修中因三连阀损坏而引起此类故障有所存在。

2-电子制作2 全自动洗衣机维修及软件设计

(一)洗衣机故障检修

我们有个老旧的全自动洗衣机,是广东产的“爱德牌”。14年前因为出现无法排水故障,另外买了个金铃洗衣机。当时看它各个部件和外观都还挺好,想留待有空时再检修,就没有丢弃它。

最近想腾空杂物房,就考虑是否该丢弃这洗衣机了?考虑到搁置十多年,各个部件和马达都应该锈蚀死了。但通电试机,没想到它的马达还能正常运转。试运行它的“无水试机程序”,还能正常洗涤和进出水。灌水进去试,可以洗衣服,但排水只能排一半就停机了,也不能甩干。

拆开背盖,看到主轴上有个离合器,通过皮带和齿轮与马达连接,但我完全看不明白它的工作原理。只好上网,查找该洗衣机的电路图和相关维修资料,其中有关离合器的工作原理介绍如下:

-------------------==-----------------==

减速离合器洗涤工作过程:进入洗涤程序时,排水电磁铁断电,刹车杆在弹簧力的作用下,针刹车锁定,使脱水轴不能转动。同时刹车杆上一拨叉棘爪将棘轮拨过一个角度,方丝离合弹簧固定在棘轮壁上的这一端被拨动,另一端处于自由状态,离合套与外套轴分离,由丁方丝离合弹簧被拨松,洗涤轴与脱水轴分离,当电动机转动时,V带传动,从大带轮传过来的转动通过齿轮轴传至行星减速器,减速后由波轮轴传出,带动波轮旋转。

洗涤时,电动机运转,通过减速离合器,降低转速带动波轮间歇正反转,进行洗涤,此时洗涤脱水桶不转动;脱水时,电动机运转,通过离合器,不减速(即高速)带动脱水桶顺时针方向运转,进行脱水,此时波轮也随着脱水桶一起运转。

图1)

---------------------------------------------------------==

上述信息我反复琢磨半天仍不得要领,只是粗略了解其大概工作原理。没办法,边干边体会吧!

为了便于检修,我拆开洗衣机盖板(控制主板、进水电磁阀、水位传感器都固定在盖板上)。由于外壳不好拆卸,我就把整个洗衣机翻转过来。下图2+图3是离合器与排水电磁铁(通过电磁铁动作牵引排水阀)结构外观—俯视图和侧视图:

图2)离合器 图3)排水电磁铁

我琢磨:我的洗衣机能够正常洗涤,说明马达及离合器没太大问题。排水只能排一半,说明排水电磁阀也没完全损坏,很可能是电磁铁芯生锈导致行程受阻,离合杆和棘爪也没能移动到位,以致影响马达带动不了脱水桶甩干。我试用起子撬动电磁铁芯,强行让离合杆和棘爪移动到位,并转到皮带轮,发现脱水桶是可以旋转的,这说明离合器并没有锈蚀,问题可能就是电磁铁芯吸合不到位。

找点机油涂抹到电磁铁芯和相关驱动机件上,多次运行脱水程序,给电磁铁反复通电吸合再释放。最后放水试机,洗涤和脱水都正常了。但又发生开机进水不停,似乎是水位传感器有问题,导致单片机检测不到有水信号,机器就不能开始洗涤程序。

爱德洗衣机的水位传感器在市面上也没有找到合适的替代品。从电路图看不出水位传感器的工作原理,我从网上找到资料有如下介绍:

-------------------------------=

图4为该水位传感器的结构示意图,下部的气室加橡皮膜组成压力传感部分,上部的活动磁芯和线圈与振荡电路板一起组成LC振荡电路。
工作时,随着水位的升高,气室中的压力也升高。当压力升高到一定值时,橡皮膜推塑料盘顶着磁芯上移,电感线圈的电感发生变化,LC振荡电路的振荡频率也发生相应变化。当频率达到程序控制器预定值后(表示预定水位),程序控制器便发出指令停止进水,并转入洗涤程序。水位传感器在出厂前,振荡频率定为高水位频率22.60kHz,空水位频率25.20kHz。 水位越低,传感器输出的信号频率越高。

--------------------------------------=

网上的上述信息与爱德洗衣机的水位传感器情况吻合。我拆开我们的水位传感器,发现其橡皮膜已经老化开裂,怪不得不能工作了。我找气球等类似材料替代原橡皮膜换上,水位传感器又能工作了。不过水位感应误差变大了,通过调节传感器里面的螺丝,可以部分弥补误差。但最后只能使用“中-低水位”,如果用高水位,结果进水到水溢出了,洗衣机仍会以为水位不够而不断进水。为了废物利用,我只好将就地用“中-低水位”来洗衣服了!

3点备忘录:

(1)洗衣机的开盖安全开关SA1有防抖动功能:当洗衣机脱水时,如果衣物堆放不匀,致使脱水桶剧烈振动,以几十周的频率撞击安全开关SAI的传感杆, SA1连续输出通、断信号,微处理器(单片机)发出纠正指令,使洗衣机进入停水→进水一漂洗一排水一脱水程序,以便消除衣物摆放不匀造成的振动。如果反复几次不能消除该现象,单片机会令洗衣机进入脱水保护状态。该开关还有脱水时开盖断电功能,我使用感觉不太方便,就将其拆除了。以后不管是否开盖,洗衣机都可以照样脱水。

(2)排水电磁铁标牌工作电压是直流198V,从电路图上看不出直流198V电压的电路(其电源通断由双向可控硅控制)。实测工作电压是直流202V,用交流档测是96V交流---这可能是由220V交流半波整流得到的脉动直流。

(3)该洗衣机的电路原理图如下(图5):

图5

图6)洗衣机控制面板外观

=======================---

(二)全自动洗衣机硬件修改及软件设计

洗衣机用一段时间后,又发生洗衣到最后阶段“甩干排水”时就停机了。检查各个硬件未见有问题,估计是单片机程序因为某次无意的错误碰触高压打火干扰,导致软件意外被修改?尽管这个可能性“很扯”,反正洗衣机就是可以循环3次洗涤和进水+排水,但最后一次的“甩干排水”就不执行了。

我试运行产品的无水洗衣模拟测试程序,洗涤进出水各个功能都是正常的(说明洗衣机的硬件没问题)。因为该产品配有参考电路图,我手头又有好几个洗衣机的例程,干脆尝试更换单片机,自己重写程序看看效果如何。

开始以为这是很简单的工作,真正动手时,才发现问题多多。

最主要问题是原机单片机不知道是什么型号?其引脚排列和51系列产品完全不同,这就导致硬件工作量大为增加,比自己另外做一个洗衣机的工作量还要大。

下图6+图7,先将原单片机拆焊下来,加一个单片机插座,以便以后可以随意更换单片机。

图6)已经拆下了原单片机的部分电路板

图7)加焊了一个单片机插座

图8)原单片机底部引脚布线

图9)更换51单片机后,重新更改的引脚走线。

图10)最后修改好的电路板。

硬件修改完成后,在进行实际软件设计时,才发现要按照原硬件原理图接线来设计软件,会有很多无法躲避的麻烦。

第一个难点:由于该单片机的硬件接口有限,原洗衣机操作面板显示不同工作状态的的14个LED灯与2个数码管是共用单片机端口端口,软件编程时就不能简单地令某个端口变高或变低电平来控制LED的亮灭,这样会导致数码管乱闪。反之亦然,数码管显示时,LED也会乱闪。如何通过控制4个片选三极管来分时显示LED和数码管,浪费了我很多测试时间。

第二个难点:我是用定时器做洗衣程序调度器,单片机给洗衣机按键、LED、数码管和马达按不同时间间隙执行不同的动作,这比顺序循环运行的软件设计及调试要麻烦很多。陆陆续续搞了很长时间才把程序走通。

第三个难点:水位传感器没买到合适产品,自己换气室的薄膜后,重新测试高中低不同水位对应不同输出电压值。期间要反复进水排水测试,也是挺费神的。最尴尬的是,我是在住房室内进行将水位和软硬件联合测试的。某次测试后,洗衣机没排水就撂下不管了。结果我外出办事半天后,洗衣机排水阀发生漏水故障,洗衣机里的水全漏出来,房间泡了1厘米的水,还通过地板裂缝漏到楼下邻居的卧房,把人家的床铺被子和床垫全淋湿透了。最后硬着头皮给人家道歉、赔钱,过后很长时间都不好意思面对人家,真是难堪死了!

(三)最后实现的软硬件情况说明:

洗衣机是用STC89C52RC或STC89C54RC类单片机,水位传感器是用电感式震荡电路。为了节省端口,洗衣状态显示的14个发光二极管是与2个LED数码管共用端口的,由4个三极管(VT7-VT10)驱动发光,并经软件分时控制来轮流显示,这导致了系统软件的复杂和不易读懂。

全自动洗衣机-实际产品应用程序功能:

洗衣进程有3种:全洗衣(洗涤+漂洗+甩干);漂洗-甩干;单独甩干。

洗衣模式有2种:标准、省时。

水位设定有4种:高,中,低2,低1。

按下起动按键后,洗衣机开始进水,到达设定水位后停止进水。紧接着电动机开始正反转运行,每次正反转由四个节拍组成:

1)正转= 5-10秒; 2)停转= 3-4秒; 3)反转= 5-10秒; 4)停转= 3-4秒。

进水= 3分钟,洗涤= 省时39分钟/标准51分钟,排水=3分钟,脱水=1.5分钟。脱水时电动机正转90秒(Tspin_Minute)。

预定洗涤时间完成后,就排水和甩干。到达预定的3次循环洗涤排水周期后,洗衣过程结束,并发出提醒蜂鸣声。全过程约为省时39分钟/标准51分钟。

为防止意外,在进水和排水期间,如果超过80秒水位都没变化,便认为进出水有故障而停机报警。

---------------------------------------------------=

(四)全自动洗衣机主要源码

//*************洗涤方式选择********************

//标准洗涤程序=1,经济=2, F_Normal=1, F_Econormy=2,

void key_scan() //可以选择洗涤-暂停-菜单(改变洗涤方式)

{ static uchar Kpress_Count; //按键次数计数器

if(Key_Start == 0) // = P33=Key_Start=开始或暂停按键,按下键= 低电平0

{ Beep50();

if(Key_Start == 0)

{ while(!Key_Start); //wait for key release

if(flag_Washing ==0) //= 0表示还未开始洗涤

// 1th按下启动键=开始,如果重复按"开启/暂停"key,其状态flag_Washing会1-0反复转换

{ flag_Washing = 1; //=1复位洗涤标志,

ET1=1; //打开调度器(setting里会令ET1=0)

if(Kpress_Count ==0) { //是1th按启动键吗?

//1th按启动键,Int1_Count=0.给"正常洗衣"参数赋值。2th,Int1_Count>=1,不必再给"正常洗衣"参数赋值,避免暂停洗衣后,重新运行又赋初始值,导致半途洗衣定时不对。

Kpress_Count++;

wash_on(); //-----------start washing

}

else Redo(); //-----------redo washing, //允许定时器T1中断并打开水泵+1秒后,由T1中断服务来打开马达

}

else if(flag_Washing) // -----------2th按下启动键=暂停

{ flag_Washing = 0; //==0表示暂停洗涤或进出水

ET1=0; //关闭调度器,显示将不能刷新,令洗衣机暂停! Suspend();

LED_Timer_on(); Beep50();

}//end else

}

}

}

void Timer0_Init(void) //T0设为16位计数器,对信号脉冲进行计数。

{ TMOD |= 0X05; //设16位计数工作方式1,手动重装计数初值 方式选择位C/T=1=计数方式

TH0=0; TL0=0; //计数器T0初值为0

TR0=1; ET0=1;

}

void Timer2_Init(void)

{// 复位时, T2MOD=T2CON=00H,方式选择位C/T=0=定时工作方式。

T2CON=0;

RCAP2H=(65536-62500)>>8; //在程序初始化的时候给RCAP2L和RCAP2H赋值,

RCAP2L=(65536-62500)%256; //中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。

TH2=RCAP2H; TL2=RCAP2L;

ET2=1; //打开定时器2中断

TR2=1; //定时器2开始计时

}

//T1=0001,设为16位定时工作方式1,作为1秒的调度器

void Timer1_Init(void)

{ TMOD &= 0X0f; // 高位T1计数方式清0

TMOD |= 0X10; // T1=计数方式1= 16位,

//T1方式选择位C/T=0=定时工作方式,定时方式1= 16位,不自动重装参数

PreT1h= PreloadT1H; PreT1l= PreloadT1L;

TH1= PreT1h; TL1= PreT1l;

TR1 = 1; ET1=1;

PT1= 1; //T1为最高优先级

}

//--------------水位脉冲从P3.4=T0输入,要用到下面的中断计数-----------------:

void timer0(void) interrupt 1 //16位计数器0溢出中断

{//计数溢出时,中断并累加计数(即每收到256个脉冲就中断1次)。到1秒后,在T2中断换算为频率。

TH0=00; TL0=00; //clear counter,正常时,TH0和TL0记录水位脉冲数

}

//-------------在中断服务里计算水位频率F_level----------------------------

void timer2(void) interrupt 5 //12M晶振,定时器2中断(62.5ms中断一次,每半秒测一次),

{ TF2=0; //定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零

count_T2++;

if (count_T2>=8) //定时0.5s时间到

{ TR0=0; //计数器停止计数

count_T2=0; //中断次数清0

Led_1S= ~Led_1S; //=p16仿真时便于观察

//仿真时,为了可以无水运行,如下修改(还需将下面的水位采集语句屏蔽:-------=start

if(W_progress==1) F_level= W_level; //进水时W_level=W_MIDD=242;

else if(W_progress==3) F_level= W_empty; //排水时,W_empty=252=超过最低水位=无水

//仿真时,为了可以无水运行,修改:------------------------------------------------=end

F_level = (uint)((TH0<<8)+TL0)/50; //如果不用(uint)限定,F_level会变成0!!!

//比较20S间隔内2次水位,如果无变化,可能进出水有问题---start

T_in_out20s++ ;

if(T_in_out20s ==40)

{ F_level_40= F_level; } //1th水位值存于F_level_40

else if(T_in_out20s ==80) //(80-40)*0.5S=20S

{ F_level_80= F_level; } //2th水位值存于F_level_80

TL0=0; TH0=0; //清零16位计数器T0

TR0=1; //计数器T0开始计数

T2_FLAG=1; //标志位置1=频率计算结束标志--未用到

}

}

//启动洗涤程序后,就交由调度器控制。

void Timer1(void) interrupt 3 //-------1秒调度器

{ TH1= PreT1h; TL1= PreT1l; //reload 定时值PreloadT1H= (65536-50000)>>8;

if(T50ms_count++ >=20) // =1S interrupt --------------- (1)

{ T50ms_count = 0;

if(flag_Washing==1) //=已经按下启动键,运行标志,=1为已经开始运行,0为暂停 --(2)

{

Second--; // 对各个洗涤进程做减时计算 (在menu里已经令Second=0)

if((Second <=0)&&(Minute != 0)) //这是洗涤减一计时器。

{ Minute--; Second = 59;

if(T_all_reman-- < 0) T_all_reman=0; //显示剩余时间

} //Minute和Second 是各个洗涤阶段的剩余耗时值

// W_progress =0-进水,1-洗涤,2-马达正反转, 3-漂洗(排水),4-甩干,

if(W_progress==0) //-------(A)-----在wash_on()开始后跳到这里

{ W_progress=1; Water_in(); //进水时间在Water_in()定义

T_in_out20s=0; err=0; } //清零进出水测频时间间隔

else if(W_progress==1) //---(A)在(W_progress==0)开始进水,0.5S后跳到这里

{ //li-排水次数计数器Dump_count,初值=0,排一次水,运行一次out(),

//测试水位传感器是否有问题:-----------------------------------------------------start

if(T_in_out20s >80) //T_in_out20s在T2累加,

{ //如果传感器正常,无水时F_level>253,有水时0

T_in_out20s =0; //清零以便T2中断再次保存水位值。

if((F_level_40 & F_level_80) &&(F_level_40 ==F_level_80))

//如果40S内2次水位值不为0,而且相同,说明水位传感器有问题。

{ if(err++>=2) W_progress=8; }

}

//--end of测试水位传感器是否有问题:------------------------------------end

if(F_level >W_level) // 检测到预定水位W_level吗?

{ if((Second<0)&&(Minute==0)) //水位未到,但超时

{ W_progress =8; } //=err, goto (F)超时处理

} //进水期间W_progress=1

else if((F_level<=W_level)&&(F_level>0)) //如果未超时,去洗涤

{ W_progress=2;

xi(); Beep50(); } //去洗涤

} //-----------------------end of if(W_progress==1)

else if(W_progress== 2) //(B)-------马达正反转时间控制

{ T_motor++; //正反转控制计时,

if(Washprogram ==1) //=normal wash mode

{ //如果是1th,T_motor++=1

switch(T_motor) //1th,T_motor=1=case1,每秒中断后+1

{

//1th,电机右转10秒;10th,电机停4秒;14th,电机左转10秒;23th后,停止转动

case 1: ZhengZhuan(); break; //第1秒,电机右转

case 10: Stop_Motor(); break; //第10秒,电机停

case 14: FanZhuan(); break; //第14秒,电机左转10秒

case 23:Stop_Motor(); break; //第19秒,电机停4秒

default: //第27秒后,如果洗涤时间未完,再去正转

if(T_motor>=27) { T_motor=0; }

}

}

else if(Washprogram ==2) //=econormy wash mode

{

//if set minute=1,则每分钟正反转3.5-4次,然后甩干10秒=15声,3个周期后=3分钟,结束洗涤

switch(T_motor) //1th,T_motor=1=case1,每秒中断后+1

{

//1th,电机右转5秒;6th,电机停3秒;7th,电机左转5秒;13th后,停止转动。

case 1: ZhengZhuan(); break; //第1秒,电机右转5秒

case 6: Stop_Motor(); break; //第6秒,电机停3秒

case 9: FanZhuan(); break; //第9秒,电机左转5秒

case 14:Stop_Motor(); break; //第14秒,电机停3秒

default: //第15秒后,如果洗涤时间未完,再去正转

if(T_motor>=17) { T_motor=0; }//17S后,从头再来

}

}

if((Second<=0)&&(Minute==0))

//如果1th洗涤cycal时间到(Second=0xff=-1)就排水

{ W_progress =3; Water_out(); } //goto 排水处理

} //------------------end of if(W_progress==2)---

else if(W_progress==3) //(C)---------如果排水完,就甩干。

{

//测试水位传感器是否有问题:-----------------------------------------------------start

if(T_in_out20s >80) //T_in_out20s在T2累加,

{ //如果传感器正常,无水时F_level>253,有水时0

T_in_out20s =0; //清零以便T2中断服务里再次保存水位值。

if((F_level_40 & F_level_80) &&(F_level_40 ==F_level_80))

//如果40S内2次水位值不为0,而且相同,说明水位传感器有问题。

{ if(err++>=2) W_progress=8; }

}

//测试水位传感器是否有问题:-----------------------------------------------------end

if((F_level 0)) //是否还有水?

{ if((Second<=0)&&(Minute==0)) //超时了,还没排干水=err

{ W_progress =8; } //goto (F)超时处理

}

else if(F_level >= W_empty) //水确实排干了

{ // 如果无水....

if(Wash_count < Wash_cycle) //水排干了,但洗涤次数未够

{ W_progress =4;

Tuoshui(); Wash_count++; } //水排干了,去脱水,

else if(Wash_count >Wash_cycle) W_progress =9;

//如果超过3次排水,不甩干就结束-W_progress=9

//如果是单独排水,就设置Wash_count =Wash_cycle+1 >3,所以只排水一次,不甩干就结束

}

} //-----------------------end of if(W_progress==3)

else if(W_progress==4) //(D) ----甩干完了,进水或结束

{ if((Second<=0)&&(Minute==0)) // ----甩干时间到否?

{// Wash_cycle =洗涤次数=3次=(进水+洗涤+排水+甩干)*3

if(Wash_count >=Wash_cycle) //甩干时间到了,结束洗涤

{ W_progress =9; } //goto (G)=over()

else

{ W_progress =0; Water_in(); }

//甩干时间到,但洗涤未够3次,Wash_count

}

} //-----------------------end of if(W_progress==4)

//===============================================

else if(W_progress== 8) //(F)----------err超时处理

{ T_all_reman=99; Second=0; Minute=0; Beep300();

err =1; Stop_Motor();

Pump_out_off(); Pump_in_off();

}

else if(W_progress==9) //(G)----------洗涤结束

{ T_all_reman=88; Second=0; Minute=0; over(); }

//===================================================

} //---------end of if(!flag_Washing) //按下启动键 ----(1)end

} //------------------end of if(T50ms_count++>=20)--------(2)end

}

//由于LED与SEG共用P0口,所以必须用轮流显示LED,数码管由中断刷新

void Led_Update(void)

{ Seg_disable(); //数码管不显示

Show_water_led(); Delay_1ms(1); //须延时1MS才能看到LED亮

Show_progress_led(); Delay_1ms(1);

Show_program_led(); Delay_1ms(1);

if(f_Ledtimer == 1)

{ LED_Timer_on(); Delay_1ms(1); } //定时器LED亮,暂停时LED_Timer=on

else LED_Timer_off(); //正常工作时LED_Timer=off

}

/**********************管脚初始化程序******************/

void InitAll(void)

{ // LED_Regular =ON; //ON=1,默认为标准程序,灯亮

Pump_in = OFF; //OFF=0; 进水控制,关, 单个反相器驱动

Pump_out= 1; // P2^0=排水控制,1=关,因为本人另加有2个反相器串联电路

Motor_R = OFF; //电机正转,不走=OFF=0, 单个反相器驱动

Motor_L = OFF; //电机反转,不走=OFF=0, 单个反相器驱动

Beeper = OFF; //报警喇叭,不叫=OFF=0

P1= 0xef; //let P1口为输入= 3个按键=P12-P14-P15,注意:P17=beeper=0不响

K_program= 1; //let P33口为输入,K_program = P3^3=启停按键1=int1 port

//标志清零:

flag_Washing =0; //运行标志,1为已经开始运行,0为暂停

f_Ledtimer =0; // 控制LED亮或灭的标志,timer_led=off=0

F_level=W_empty; // F_level是检测到的水位频率,

W_level=W_MIDD; // W_level是预置的水位,W_MIDD=242,中LED=亮,

Level_case = F_MIDD; //设置水位时的增量累加器=1-2-3-4=high-middle-low2-low1,

T_Normal_min=9; //=9对应=9*3+24=51分钟

T_Normal_sec=0;

T_Econormy_min=5; //=5对应=5*3+24=39分钟 =省时洗涤,仿真=1

T_Econormy_sec=0;

//进出水+甩干的时间

Tin_Minute = 3; //water-in时间 =3分钟

Tin_Second = 0; // =秒

Tout_Minute = 3; //water-out时间=3分钟

Tout_Second = 0;

Tspin_Minute= 1; //甩干时间=1分30秒,如果2分钟可能会太长.

Tspin_Second= 30; //如果仿真用30秒

T_in_out20s = 0; //20S时间间隔计数器--用于每20S测试一次进出水,看是否正常?

F_level_40 = 0;

F_level_80 = 0; //80S间隔水位频率暂存值,比较其变化值来判断进出水是否正常?

Wash_count =0; //实际循环洗涤次数计数器=清零

Wash_cycle = 3; //循环洗涤次数(一个循环=进水+洗涤+脱水)=3是标准洗涤次数

W_progress = 0; // 工作状态跳转控制标志=0-进水(浸泡),1-洗涤,2-排水,3-甩干

Washprogram= 2; //1=标准,2=省时

if(Washprogram== 1) //1=标准,2=省时

{ Txi_Minute = T_Normal_min; //正常洗涤=7分*3,对应=21分钟;仿真时=0分钟+30秒

Txi_Second = T_Normal_sec;

}

else

{ Txi_Minute = T_Econormy_min; //省时洗涤=5分*3,对应=15分钟;仿真时=0分钟+30秒

Txi_Second = T_Econormy_sec;

}

}

//==================================-

void main()

{ uchar Tms=500; //延时显示参数-实际应用=APP=500

InitAll(); //管脚初始化,报警喇叭,进水、排水、电机正转反转均=关闭

Beep50(); //Beeper=0=stop蜂鸣器, =1=响=p17

Timer1_Init(); // T1作调度器

Timer0_Init(); // 定时器0中断作为水位检测脉冲计数

Timer2_Init(); // 定时器2中断计时,将T0的频率计数转为频率

EA=1;

T_all_reman= T_all; //T_all(洗涤总时长);T_all_reman=洗涤剩余时间

while(1)

{

//设置洗涤参数:

if(flag_Washing==0) //如果在暂停状态(首次开机或按了暂停键)才可以设置洗涤参数

{

Set_Level_case(); //设置水位, =key2=p13, Level_case++;

//改变洗涤进程:

Set_progress(); //progress=key3=p15,

//改变洗涤方式:

Set_program(); //program=key4,洗涤方式:F_Normal=1, F_Econormy=2,

ET1= 0; //调度器T1关中断,调度器不工作,停止循环显示,

}

key_scan(); //选择"启动/暂停"

//=key scan + wash start。如果开始洗涤,就从wash_on()开始

Led_Update(); //洗衣状态的LED显示

Seg_Update(); //轮流显示水位和剩余洗涤时间

//因为试运行出错时,调度器里不能关断pump-in,所以这里加-err超时处理

if((F_level

// 检测到的水位F_level有问题,W_ERR=0,W_OVER=220=过高水位

{ W_progress=8; T_all_reman=99;

Second=0; Minute=0; Beep300();

Stop_Motor(); Pump_out_off(); Pump_in_off();

}

}

}

//程序结束。

20220814