家用风扇控制器设计Word格式.docx

上传人:b****5 文档编号:20632793 上传时间:2023-01-24 格式:DOCX 页数:22 大小:482.90KB
下载 相关 举报
家用风扇控制器设计Word格式.docx_第1页
第1页 / 共22页
家用风扇控制器设计Word格式.docx_第2页
第2页 / 共22页
家用风扇控制器设计Word格式.docx_第3页
第3页 / 共22页
家用风扇控制器设计Word格式.docx_第4页
第4页 / 共22页
家用风扇控制器设计Word格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

家用风扇控制器设计Word格式.docx

《家用风扇控制器设计Word格式.docx》由会员分享,可在线阅读,更多相关《家用风扇控制器设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。

家用风扇控制器设计Word格式.docx

4、风速:

风速的弱、中、强对应于电扇的转动由慢到快。

5、风速类型的不同选择分别为:

(1)正常电扇连续运转;

(2)自然电扇模拟自然风,即转4s,停8s;

(3)睡眠电扇慢转,产生轻柔的微风,运转8s,停转8s;

6、按照风速与类型的设置输出相应的控制信号。

三、总体设计

电扇模拟自然风,即本次课程设计任务主要基于8086以及各种接口芯片结合汇编语言实现对家用风扇的控制器的模拟。

我主要运用8086CPU结合汇编语言编写的软件来实现各种信号的处理与变换,以得到想要的控制信号,并用接口芯片8255A实现信号的输出与接收。

在模拟中通过开关来实现各种控制信号的输入,再通过8255的端口进行读取,再由8086通过软件的对采入的信号进行辨别进而转入到相应的功能子程序中以实现各种功能。

在各种功能的背后,通过8086驱动相应功能的硬件设备实现各种功能的切换。

具体设计设计,我想采用8255A来接收开关信号,驱动风扇的转动信号输出,输出LED灯的亮灭信号,并接收8253产生的控制信号。

8253主要来实现各种风种的控制信号,以得到自然、睡眠的类型风。

在风扇控制的停止后,当且仅当有风速键按下后,控制器可恢复继续控制风扇的运行,实现控制器的循环控制。

硬件设计框图如图1所示。

图1硬件整体设计框图

四、硬件设计

Ø

4.1硬件设计基本概要

根据设计要求和内容,用可编程并行接口芯片8255A低四位接收3个按键(分别表示风速、类型、停止)的状态以启动电扇或设置相应的工作状态。

这样就需要3个按键,因此可以用三个按钮接到8255口。

这样可以直接从8255的口读取按键的状态,从而执行相应的操作。

要通过一个按键来控制2个以上的状态,可以通过按键的次数来控制第几种状态,比如风速有三种状态(弱、中、强),可以用按键1次控制弱,按键2次控制中,按键3次控制强,这样就可以实现一键控制多钟状态了。

控制器的指示灯,我想使用六个LED灯进行显示,分别显示不同风速、类型等6个指示信号。

用四相步进电动机作为电风扇,其转速可通过改变其驱动电平的频率来改变步进电机的速度。

利用8255A的PC口低四位对步进电机进行四相四拍驱动。

风种时间控制可由可编程计数器/定时器8253来实现。

可选用由8253工作方式3,在这种方式下,当CPU输入控制字后,输出将为高,在写入计数值后计数器将立即自动对输入时钟CLK计数,计数器减为1时,输出将变低,方式2时8253不可用重新设置计数值就能连续工作,保证了定时的精确。

4.28255A设计

8255A的PA工作在方式0的基本输入方式作为控制信号的输入,接收8253的信号来控制步进电机的转动与停止。

PC低四位工作在方式0的基本输入方式,用来接收四个开关的开关信号,高四位工作在方式0的基本输出方式作为四相步进电机的四相线路输出电路用来驱动步进电机的转动。

PB口工作在方式0的基本输出方式,用低六位来控制六个LED灯的亮和灭。

4.38253设计

首先利用通道0对时钟进行分频,已获得可较好利用的时钟,得到周期为四秒的方波为后面能自然和睡眠的状态产生八秒高电平四秒低电平以及周期为十六秒的方波做准备。

使用通道2用来产生类型风的状态信号,在自然风类型时,让其工作在方式2产生八秒高电平四秒低电平,当高电平时驱动步进电机转动,低电平则返回继续检测,以实现自然风的模拟;

在睡眠的类型时,通道2工作在方式3产生周期为十六秒的方波,当高电平时驱动步进电机转动,低电平则返回继续检测,以实现睡眠风的模拟。

4.4步进电机设计

步进电机可接受数字控制信号(电脉冲信号)并转化成与之相对应的角位移或直线位移,因而本身就是一个完成数字模拟转化的执行元件。

而且它能进行开环位置控制,输入一个脉冲信号就得到一个规定的位置增量。

本次课程设计使用的电机为四相步进电机,采用单极性直流电源供电。

只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。

步进电机的转速取决于脉冲频率、转子齿数和拍数。

其角速度与脉冲频率成正比,而且在时间上与脉冲同步。

因而在转子齿数和运行拍数一定的情况下,只要控制脉冲频率即可获得所需速度。

4.5风扇控制器系统硬件原理图

图2风扇控制器系统硬件原理图

五、软件设计

硬件的设计完成后,运用汇编语言编写软件部分通过8086CPU实现各种信号的输入/输出以及相关信号的处理,从而控制步进电机的各种转态的转换控制。

主程序流程图如图3所示:

图3:

主程序流程图

注:

该段流程图对应程序中main函数及check函数

5.1按键判断控制模块

三个按钮接在PC口的低三位,PC3接地,若风速键按下时,开关信号为1H,类型按下时,开关信号为2H,停止键按下时,开关信号为4H。

5.2风速模块切换流程

在风速切换中,在主函数中定义一个变量FLAGL,初始化为0并将其地址放入SI中,在弱风和中风模块中将[SI]加1,在强风模块置为零。

进入风速模块后判断其大小,若为零则转入弱风模块,否则进入中风模块,以此类推。

图4:

风速切换模块

在弱风模块中先点亮表示弱风的灯“弱”,[SI]加一,改变驱动电平频率即置DI为0FFFFH,调用run函数使步进电机弱速转一圈,然后检测开关信号,若开关无新信号,则循环弱风模块。

中风模块与强风模块类似,中风时,[SI]加一,置DI为0AFFFH,强风时,[SI]置0,置DI为05FFFH。

在类型控制中,切换流程与风速控制类似,在此不做赘述,下面进介绍类型控制子模块。

5.3类型控制子模块

图5:

类型控制子模块

进入类型控制子程序后,先判断PA的PA0是否为高电平,即8253输出是否为1,若为高电平,则执行执行点亮灯,变量加一或置一,调用电机run函数等操作,然后检测PA口此时是否为高电平,若为高电平则循环上述操作,若为低电平,则判断开关信号,开关无新信号,返回执行类型控制子模块。

所以,仅仅在PA口为低电平是才检测开关,即在自然风或睡眠风时,当电机停下来时,按开关才有效。

正常风需要电机一直转动,所以正常风模块不需检测PA口,程序类似风速转动子模块。

5.4停止控制模块

图6:

停止控制模块

停止状态主要实现风扇暂时性的停止运行,只有在风速键按下才能继续运行。

此模块结束后返回start,在start会对已运行的风扇停止后所有状态进行重新赋值,以保证再次运行后能按初始状态运行。

六、程序清单

;

8253端口地址

IO08253EQUIOY1+00H*4

IO18253EQUIOY1+01H*4

IO28253EQUIOY1+02H*4

IOCON8253EQUIOY1+03H*4

8255端口地址

IOA8255EQUIOY0+00H*4

IOB8255EQUIOY0+01H*4

IOC8255EQUIOY0+02H*4

IOCON8255EQUIOY0+03H*4

IOY0EQU0C400H

IOY1EQU0C440H

CHECKPROCNEAR

MOVDX,IOC8255

INAL,DX

ANDAL,0FH

CMPAL,1

JESPEED_R

JMPCHECK

RET

ENDP

SPEED_R:

CALLSPEED

JMPCHECK_R

STYPE_R:

CALLSTYPE

风速控制子程序

SPEEDPROCNEAR

PUSHAX

COM:

CMPBYTEPTR[SI],0

JEL0

CMPBYTEPTR[SI],1

JEL1

CMPBYTEPTR[SI],2

JEL2

L0:

MOVDX,IOB8255

MOVAL,01H

OUTDX,AL

L0亮LL0:

LOOPL0

MOVBX,[SI]

ADDBX,1

MOV[SI],BX

RUN_1:

MOV[DI],0FFFFH

CALLRUN;

电机弱转

CHECK_0:

JECOM

CMPAL,2

JESTYPE_R

CMPAL,4

JEZT

JMPRUN_1

ZT:

JMPTING

DATASEGMENT

FLAGLDB?

FLAGTDB?

FLAGDDB?

LEIXINGDB0

DATAENDS

CODESSEGMENT

MAINPROCNEAR

ASSUMECS:

CODES,DS:

DATA

START:

MOVAX,DATA

MOVDX,AX

MOVSI,OFFSETFLAGL

MOVBL,0

MOV[SI],BL

MOVDI,OFFSETFLAGT

MOV[DI],BL

MOVFLAGD,BL

8255初始化

MOVDX,IOCON8255

MOVAL,90H

OUTDX,AL

8253通道0初始化

LING8253:

MOVAL,00110111B

MOVDX,IOCON8253

MOVAL,00H

MOVDX,IO08253

MOVAL,04H

判断是否是风速按键按下

QD:

JECHECK_R

JMPQD

CHECK_R:

CALLCHECK

MAINENDP

STYPEPROCNEAR

类型控制子程序

PAR:

CMPFLAGD,0

JEL3

CMPFLAGD,1

JEL4

CMPFLAGD,2

JEZF

ZF:

JMPL5

L3:

MOVLEIXING,0

MOVAL,08H

OUTDX,AL;

L3亮

LL3:

LOOPL3

MOVAL,FLAGD

ADDAL,1

MOVFLAGD,AL

RUN_Z:

JEYRZ;

正常风

YRZ:

MOV[DI],0FFFFH

JEYZZ

YZZ:

MOV[DI],0AFFFH

CMPBYTEPTR[SI],2

JEYQZ

YQZ:

MOV[DI],05FFFH

CALLRUN

CHECK_3:

JEZ1

JEZB

JMPRUN_Z

Z1:

JMPSPEED_R

ZB:

JMPZT

L4:

MOVDX,IOB8255

MOVAL,10H;

L4亮

L1:

MOVAL,02H;

L1亮

LL1:

LOOPL1

RUN_2:

MOV[DI],0AFFFH

电机中转

CHECK_1:

MOVDX,IOC8255

JMPRUN_2

L2:

MOVAL,04H;

L2亮

LL2:

LOOPLL2

RUN_3:

MOV[DI],05FFFH

电机强转

CHECK_2:

JEZC

JEZS

JMPRUN_3

ZC:

JMPCOM

ZS:

JMPSTYPE_R

POPAX

SPEEDENDP

L5:

MOVDX,IOB8255;

自然风

MOVAL,20H;

L5亮

LL5:

LOOPLL5

MOVAL,0

MOVAL,10110101B

自然通道2初始化

MOVAL,02H

MOVDX,IO28253

RUN_I:

MOVDX,IOA8255

ANDAL,1

JERUN_R2

JMPCHECK_N2

RUN_R2:

CHECK_N2:

MOVDX,IOC8255;

检查有无新键

JEZ3

JEZ4

LL4:

LOOPLL4

MOVAL,10110111B

睡眠通道2初始化

RUN_S:

JERUN_R

JMPCHECK_N

UN_R:

CHECK_N:

JEL5

JEZU

JMPRUN_S

ZU:

Z4:

JEZD

JMPRUN_I

Z3:

JMPL3

ZD:

JMPZS

STYPEENDP

电机转动程序

RUNPROCNEAR

PUSHCX

MOVAL,30H

CALLDELAY

MOVAL,60H

MOVAL,0C0H

JMPLL

DELAY:

MOVCX,[DI]

DALA:

LOOPDALA

LL:

POPCX

RUNENDP

判断停止键是否按下

PCHECK:

JETING

TING:

MOVAX,0

OUTDX,AX

CALLRUNT

JMPSTART

RUNTPROCNEAR

;

电机停止子程序

PUSHDI

MOVAL,0H

JMPLLP

DELAYP:

DALAP:

LOOPDALAP

LLP:

POPDI

POPCX

RUNTENDP

CODESENDS

ENDSTART

七、遇到的问题及解决方法

在这次课程设计中,遇到了各种问题。

因为以前的基本太薄弱,刚开始设计写程序的两天,遇到问题后往往是瞪着屏幕毫无办法,常常在一个小问题上一卡就是三四个小时,到后来渐渐学会了一些解决问题的思路和办法,节奏才渐渐加快。

首先应该是步进电机的驱动问题,刚开始完全不懂电机的驱动原理,看了很多相关的资料却只知道一些理论性的东西,完全不知道如何使用,很多资料上面的驱动电路也是一大堆与非门构成的。

后来在proteus的SAMPLES里面找到了关于驱动的一个简单电路,研究了一下,对照着proteus和网上的步进电机芯片资料,终于弄明白的它的使用方法。

所以proteus里面附带的参考资料其实是很实用的,善于利用能比在其他地方漫无目的的搜资料学到更多东西。

其次逻辑问题。

写类型控制子模块的时候,已经根据流程图把程序写好,里面的子模块也以测试过没有问题,流程图逻辑也应该没问题,但每次运行在睡眠风状态下时,电机转八秒,停两秒后自动转到自然风模块。

想过很多种可能,开关问题,LED灯问题等等,最后一条一条照着程序写流程图的时候,终于发现可能是最后RET没起作用,导致程序执行完无法返回check,直接执行下一条指令。

还有就是刚刚开始写的时候,写一个灯亮,就直接置一,然后看不到任何效果,就很奇怪,后来才想出来CPU运行速度很快,也许亮一下肉眼根本看不出来,需要延迟一段时间,同理按钮开关也需要延时检测。

还有就是很多新手都会遇到的问题,我第一次写的时候,一开始就写了一大段程序,然后什么结果都出不来,调试的时候根本无从调起,经过同学指点才开始从一个小功能开始写程序,先写一个灯亮然后两个然后循环,再往进添加其他功能。

并且这样写会不停的给自己成就感,让自己坚持做完,否则很容易在遇到无从下手的问题时放弃。

所以再大的程序也是要脑子里先有个大框架然后一个个小功能实现的。

在后来遇到错误时,我一般都会先过一遍程序查一下有没有能看出来的错误,然后该段程序的开头开始检测,通过加LED检测程序运行到了哪一行,从哪一行开始出错,有些直接看不出错误的地方通过加DELAY使运行变慢,方便看到仿真结果,也可以使用proteus里面的帧进,一步一步看效果。

另外仿真出错的各种怪问题多半能在网上搜到答案,只要坚信一定有人比我先遇上这些问题就行了~~

八、心得体会

通过此次的课程设计任务,我加深理解了汇编语言以及各接口芯片的使用方法,在实践中体会到各芯片的工作的状态及使用方法。

以前学习过8255,8253芯片的相关内容,通过这次课程设计,通过设计,看书,终于有了比较深刻地了解,并且加深对汇编程序结构,指令,调用等基础知识的认识。

在实践中充分利用所学知识结合实际情况作出符合要求的设计。

在具体的调试过程中遇到了很多问题,自己通过查找各方面资料解决了这些问题。

在这我学到了部分proteus仿真中及硬件调试方面常出现的问题及解决方法。

而在软件设计方面我也学到常见逻辑错误及其解决方法。

能在实践中磨砺自己的意志以及锻炼自己的动手操作能力,提升自己独立完成小型系统的设计任务能力。

为以后在大型系统设计中能奠定一定的基础知识及实际操作能力,并为自己积累了许多宝贵的经验教训。

下面简要的介绍一下我在这次课程设计中主

通过这次短暂的课程设计,不仅使我加深了对接口程序设计的认识,对接口各部件的工作原理也有了进一步的了解,也增强了分析故障以及独立处理问题的能力.

八、元件清单.

元件

数量

8255A

1

8253

74LS138

7411

74LS32

ULN2003A

LED-RED

6

RES

3

74LS273

NOT

MOTOR-STEPPER

8086

九、参考文献

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1