家用风扇控制器设计

2025-04-27

从哪一行开始出错,有些直接看不出错误的地方通过加DELAY使运行变慢,方便看到仿真结果,也可以使用proteus里面的帧进,一步一步看效果。

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

八、心得体会

通过此次的课程设计任务,我加深理解了汇编语言以及各接口芯片的使用方法,在实践中体会到各芯片的工作的状态及使用方法。以前学习过8255,8253芯片的相关内容,通过这次课程设计,通过设计,看书,终于有了比较深刻地了解,并且加深对汇编程序结构,指令,调用等基础知识的认识。在实践中充分利用所学知识结合实际情况作出符合要求的设计。

在具体的调试过程中遇到了很多问题,自己通过查找各方面资料解决了这些问题。在这我学到了部分proteus仿真中及硬件调试方面常出现的问题及解决方法。而在软件设计方面我也学到常见逻辑错误及其解决方法。能在实践中磨砺自己的意志以及锻炼自己的动手操作能力,提升自己独立完成小型系统的设计任务能力。为以后在大型系统设计中能奠定一定的基础知识及实际操作能力,并为自己积累了许多宝贵的经验教训。

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

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

八、元件清单.

元件 8255A 8253 74LS138 7411 74LS32 ULN2003A LED-RED

数量 1 1 1 1 1 1 6 RES 74LS273 NOT MOTOR-STEPPER 8086 3 3 1 1 1

九、参考文献

[1] 周荷琴.微型计算机原理与接口技术.合肥:中国科学技术大学出版社,2004.12. [2] 王淑英 电气控制与PLC应用:机械工业出版社,第四版 [3] 皇冠斌 孙敏 杨传谱 电路基础 华中科技大学出版社 第二版 [4] 模拟电路 [5] 数字电路 [6] 单片机

微机原理课程设计

课 题: 风扇控制器设计(8) 姓 名: ### 学 号: 2####### 专业班级: 电气自动化 指导教师: 皮大能 刘俊 设计时间: 2013.12

目 录

一、设计目标...................................................................................3

二、设计要求……………………………………………………..3

三、总体设计...................................................................................3

四、硬件设计...................................................................................4

五、软件设计...................................................................................6

六、程序清单...................................................................................10

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

八、心得体会...................................................................................16

九、元件清单...................................................................................16

十、参考文献...................................................................................17

模拟家用风扇控制器的设计

一、设计目标

设计并制作一个模拟家用风扇控制器。

二、设计要求

1、控制器面板为:按钮三个,分别为风速、类型和停止,LED指示灯六个,指示风速强、中、弱,类型为睡眠、自然和正常。

2、电扇处于停转状态时:所有指示灯不亮,只有按下“风速”键时,才会响应,进入起始工作状态;电扇在任何状态,只要按停止键,则进入停转状态。

3、处于工作状态时有:

(1) 初始状态为:风速-“弱”,类型-“正常”;

(2) 按“风速”键,其状态由“弱”→ “中” → “强” → “弱” ?? 往复循环改变,每按一下按键改变一次;

(3) 按“类型”键,其状态由“正常” → “睡眠” → “自然” → “正常” ?? 往复循环改变;

4、风速:风速的弱、中、强对应于电扇的转动由慢到快。 5、风速类型的不同选择分别为: (1) 正常 电扇连续运转;

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

(3) 睡眠 电扇慢转,产生轻柔的微风,运转 8s,停转8s; 6、按照风速与类型的设置输出相应的控制信号。

三、总体设计

电扇模拟自然风,即本次课程设计任务主要基于8086以及各种接口芯

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

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

具体设计设计,我想采用8255A来接收开关信号,驱动风扇的转动信号输出,输出LED灯的亮灭信号,并接收8253产生的控制信号。8253主要来实现各种风种的控制信号,以得到自然、睡眠的类型风。在风扇控制的停止后,当且仅当有风速键按下后,控制器可恢复继续控制风扇的运行,实现控制器的循环控制。

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

8086CPU 控制 8253 按 键 开 关 信号 控制 8255A 驱动 信号读取 风扇(步进电机)

LED 图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.2 8255A设计

8255A的PA工作在方式0的基本输入方式作为控制信号的输入,接收8253的信号来控制步进电机的转动与停止。PC低四位工作在方式0的基本输入方式,用来接收四个开关的开关信号,高四位工作在方式0的基本输出方式作为四相步进电机的四相线路输出电路用来驱动步进电机的转动。PB口工作在方式0的基本输出方式,用低六位来控制六个LED灯的亮和灭。

? 4.3 8253设计

首先利用通道0对时钟进行分频,已获得可较好利用的时钟,得到周期为四秒的方波为后面能自然和睡眠的状态产生八秒高电平四秒低电平以及周期为十六秒的方波做准备。使用通道2用来产生类型风的状态信号,在自然风类型时,让其工作在方式2产生八秒高电平四秒低电平,当高电平时驱动步进电机转动,低电平则返回继续检测,以实现自然风的模拟;在睡眠的类型时,通道2工作在方式3产生周期为十六秒的方波,当高电平时驱动步进电机转动,低电平则返回继续检测,以实现睡眠风的模拟。

? 4.4 步进电机设计

步进电机可接受数字控制信号(电脉冲信号)并转化成与之相对应的

角位移或直线位移,因而本身就是一个完成数字模拟转化的执行元件。而且它能进行开环位置控制,输入一个脉冲信 号就得到一个规定的位置增量。

本次课程设计使用的电机为四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。步进电机的转速取决于脉冲频率、转子齿数和拍数。其角速度与脉冲频率成正比,而且在时间上与脉冲同步。因而在转子齿数和运行拍数一定的情况下,只要控制脉冲频率即可获得所需速度。

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

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

五、软件设计

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

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

开始 初始化8255A,8253通道1 风速键是否按下 Y 初始化风速:弱,类型:正常 风扇运行子模块 风扇控制子模风速键是否按下Y 停止子模块 N Y 类型键是否按下 N Y 停止键是否按下 类型控制子模

图3:主程序流程图

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

? 5.1按键判断控制模块

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

开关模块 判断开关状态 风速控制模块 1? 2? 类型控制模块 停止模块 4? 返回

? 5.2 风速模块切换流程

在风速切换中,在主函数中定义一个变量FLAGL,初始化为0并将其地址放入SI中,在弱风和中风模块中将[SI]加1,在强风模块置为零。进入风速模块后判断其大小,若为零则转入弱风模块,否则进入中风模块,以此类推。

风速模块 判断[SI]的值 点亮“弱”灯,[SI]加一,设定转速值,步进电机转一圈 按键判断控制模块 0? 弱风模块 1? 中风模块 2? 强风模块

图4:风速切换模块

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

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

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

型控制子模块。 ? 5.3 类型控制子模块

类型控制子模块 8253通道2 初始化 PA口是否为高电?步进电机转动程序 点亮灯,设定转速值,步进电机转一圈 Y PA口是否为高电平 N 按键判断控制模块

图5:类型控制子模块

进入类型控制子程序后,先判断PA的PA0是否为高电平,即8253输出是

否为1,若为高电平,则执行执行点亮灯,变量加一或置一,调用电机run函

数等操作,然后检测PA口此时是否为高电平,若为高电平则循环上述操作,若为低电平,则判断开关信号,开关无新信号,返回执行类型控制子模块。所以,仅仅在PA口为低电平是才检测开关,即在自然风或睡眠风时,当电机停下来时,按开关才有效。

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

停止控制模块 PB口清零,灯全灭 电机停止子程序 返回主程序开头start

图6:停止控制模块

停止状态主要实现风扇暂时性的停止运行,只有在风速键按下才能继续运行。此模块结束后返回start,在start会对已运行的风扇停止后所有状态进行重新赋值,以保证再次运行后能按初始状态运行。

六、程序清单

;8253端口地址

IO08253 EQU IOY1+00H*4

IO18253 EQU IOY1+01H*4 IO28253 EQU IOY1+02H*4

IOCON8253 EQU IOY1+03H*4

;8255端口地址

IOA8255 EQU IOY0+00H*4 IOB8255 EQU IOY0+01H*4 IOC8255 EQU IOY0+02H*4 IOCON8255 EQU IOY0+03H*4

IOY0 EQU 0C400H IOY1 EQU 0C440H

DATA SEGMENT FLAGL DB ? FLAGT DB ? FLAGD DB ? LEIXING DB 0 DATA ENDS CODES SEGMENT MAIN PROC NEAR ASSUME CS:CODES,DS:DATA START: MOV AX,DATA MOV DX,AX

MOV SI, OFFSET FLAGL MOV BL,0 MOV [SI],BL MOV DI, OFFSET FLAGT MOV BL,0 MOV [DI],BL MOV FLAGD,BL ;8255初始化 MOV DX,IOCON8255 MOV AL,90H OUT DX,AL ;8253通道0初始化 LING8253: MOV AL,00110111B MOV DX,IOCON8253 OUT DX,AL MOV AL,00H MOV DX,IO08253 OUT DX,AL MOV AL,04H OUT DX,AL ;判断是否是风速按键按下 QD:MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,1 JE CHECK_R JMP QD CHECK_R: CALL CHECK JMP QD MAIN ENDP

CHECK PROC NEAR MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,1 JE SPEED_R JMP CHECK RET ENDP SPEED_R: CALL SPEED JMP CHECK_R STYPE_R: CALL STYPE JMP CHECK_R ;风速控制子程序 SPEED PROC NEAR PUSH AX COM: CMP BYTE PTR [SI],0 JE L0 CMP BYTE PTR [SI],1 JE L1 CMP BYTE PTR[SI],2 JE L2 L0: MOV DX,IOB8255 MOV AL,01H OUT DX,AL ;L0亮 LL0: LOOP L0 MOV BX,[SI] ADD BX,1 MOV [SI],BX RUN_1:MOV [DI],0FFFFH CALL RUN ;电机弱转 CHECK_0:MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,1 JE COM CMP AL,2 JE STYPE_R CMP AL,4 JE ZT JMP RUN_1 ZT: JMP TING

L1: MOV DX,IOB8255 MOV AL,02H ;L1亮 OUT DX,AL LL1: LOOP L1 MOV BX,[SI] ADD BX,1 MOV [SI],BX RUN_2: MOV [DI],0AFFFH CALL RUN ;电机中转 CHECK_1: MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,1 JE COM CMP AL,2 JE STYPE_R CMP AL,4 JE ZT JMP RUN_2 L2: MOV DX,IOB8255 MOV AL,04H ;L2亮 OUT DX,AL LL2: LOOP LL2 MOV BL,0 MOV [DI],BL RUN_3: MOV [DI],05FFFH CALL RUN ;电机强转 CHECK_2: MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,1 JE ZC CMP AL,2 JE ZS CMP AL,4 JE ZT JMP RUN_3 ZC: JMP COM ZS: JMP STYPE_R POP AX RET SPEED ENDP STYPE PROC NEAR ;类型控制子程序 PUSH AX PAR: CMP FLAGD,0 JE L3 CMP FLAGD,1 JE L4 CMP FLAGD,2 JE ZF ZF: JMP L5 L3: MOV LEIXING,0 MOV DX,IOB8255 MOV AL,08H OUT DX,AL ;L3亮 LL3: LOOP L3 MOV AL,FLAGD ADD AL,1 MOV FLAGD,AL RUN_Z: CMP BYTE PTR [SI],0 JE YRZ ;正常风 YRZ:MOV [DI],0FFFFH CMP BYTE PTR [SI],1 JE YZZ YZZ: MOV [DI],0AFFFH CMP BYTE PTR [SI],2 JE YQZ YQZ: MOV [DI],05FFFH CALL RUN CHECK_3: MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,2 JE L4 CMP AL,1 JE Z1 CMP AL,4 JE ZB JMP RUN_Z Z1: JMP SPEED_R ZB: JMP ZT L4: MOV DX,IOB8255 MOV AL,10H ;L4亮 OUT DX,AL

LL4: LOOP LL4 MOV AL,FLAGD ADD AL,1 MOV FLAGD,AL MOV AL,10110111B ;睡眠通道2初始化 MOV DX,IOCON8253 OUT DX,AL MOV AL,04H MOV DX,IO28253 OUT DX,AL MOV AL,00H OUT DX,AL RUN_S: MOV DX,IOA8255 IN AL,DX AND AL,1 CMP AL,1 JE RUN_R JMP CHECK_N UN_R: MOV [DI],0AFFFH CALL RUN MOV DX,IOA8255 IN AL,DX CMP AL,1 JE RUN_R JMP CHECK_N CHECK_N: MOV DX,IOC8255 ;检查有无新键 IN AL,DX AND AL,0FH CMP AL,2 JE L5 CMP AL,1 JE Z4 CMP AL,4 JE ZU JMP RUN_S ZU: JMP ZT Z4: JMP SPEED_R L5: MOV DX,IOB8255 ;自然风 MOV AL,20H ;L5亮 OUT DX,AL LL5: LOOP LL5 MOV AL,FLAGD MOV AL,0 MOV FLAGD,AL MOV AL,10110101B ;自然通道2初始化 MOV DX,IOCON8253 OUT DX,AL MOV AL,02H MOV DX,IO28253 OUT DX,AL MOV AL,00H OUT DX,AL RUN_I: MOV DX,IOA8255 IN AL,DX AND AL,1 CMP AL,1 JE RUN_R2 JMP CHECK_N2 RUN_R2: MOV [DI],0AFFFH CALL RUN MOV DX,IOA8255 IN AL,DX CMP AL,1 JE RUN_R2 JMP CHECK_N2 CHECK_N2: MOV DX,IOC8255 ;检查有无新键 IN AL,DX AND AL,0FH CMP AL,2 JE Z3 CMP AL,1 JE Z4 CMP AL,4

JE ZD JMP RUN_I Z3: JMP L3 ZD: JMP ZS POP AX RET STYPE ENDP ;电机转动程序 RUN PROC NEAR PUSH CX MOV DX,IOC8255 MOV AL,30H OUT DX,AL CALL DELAY MOV AL,60H OUT DX,AL CALL DELAY MOV AL,0C0H OUT DX,AL CALL DELAY MOV AL,90H OUT DX,AL CALL DELAY JMP LL DELAY: MOV CX,[DI] DALA: LOOP DALA RET LL: POP CX RET RUN ENDP ;判断停止键是否按下 PCHECK: MOV DX,IOC8255 IN AL,DX AND AL,0FH CMP AL,4 JE TING TING: MOV DX,IOB8255 MOV AX,0 OUT DX,AX CALL RUNT JMP START

RUNT PROC NEAR ;电机停止子程序 PUSH CX PUSH DI MOV DX,IOC8255 MOV AL,00H OUT DX,AL CALL DELAY MOV AL,0H OUT DX,AL CALL DELAY MOV AL,00H OUT DX,AL CALL DELAY MOV AL,0H OUT DX,AL CALL DELAY JMP LLP DELAYP: MOV CX,[DI] DALAP: LOOP DALAP RET LLP: POP DI POP CX RET RUNT ENDP CODES ENDS END START 七、遇到的问题及解决方法

在这次课程设计中,遇到了各种问题。因为以前的基本太薄弱,刚开始

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

首先应该是步进电机的驱动问题,刚开始完全不懂电机的驱动原理,看了

很多相关的资料却只知道一些理论性的东西,完全不知道如何使用,很多资料上面的驱动电路也是一大堆与非门构成的。后来在proteus的SAMPLES里面找到了关于驱动的一个简单电路,研究了一下,对照着proteus和网上的步进电机芯片资料,终于弄明白的它的使用方法。所以proteus里面附带的参考资料其实是很实用的,善于利用能比在其他地方漫无目的的搜资料学到更多东西。

其次逻辑问题。写类型控制子模块的时候,已经根据流程图把程序写好,

里面的子模块也以测试过没有问题,流程图逻辑也应该没问题,但每次运行在睡眠风状态下时,电机转八秒,停两秒后自动转到自然风模块。想过很多种可能,开关问题,LED灯问题等等,最后一条一条照着程序写流程图的时候,终于发现可能是最后RET没起作用,导致程序执行完无法返回check,直接执行下一条指令。

还有就是刚刚开始写的时候,写一个灯亮,就直接置一,然后看不到任何

效果,就很奇怪,后来才想出来CPU运行速度很快,也许亮一下肉眼根本看不出来,需要延迟一段时间,同理按钮开关也需要延时检测。

还有就是很多新手都会遇到的问题,我第一次写的时候,一开始就写了一

大段程序,然后什么结果都出不来,调试的时候根本无从调起,经过同学指点才开始从一个小功能开始写程序,先写一个灯亮然后两个然后循环,再往进添加其他功能。并且这样写会不停的给自己成就感,让自己坚持做完,否则很容易在遇到无从下手的问题时放弃。所以再大的程序也是要脑子里先有个大框架然后一个个小功能实现的。

在后来遇到错误时,我一般都会先过一遍程序查一下有没有能看出来的错误,然后该段程序的开头开始检测,通过加LED检测程序运行到了哪一行,


家用风扇控制器设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2024-2025学年人教版七年级语文下单元检测:第一单元(附答案)

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219