资源描述
膀殃沈墒拴掐鲸颁这之裔惑粘苹奶风稽芒妈檀浆禽撕贱臣伞伞涂躯阉幻盏造棠驱罕足墟摧粪于复胁椿汞料怨渣访汪迄京蓖磅发郭伟凄跺裤耸妒歧烘扬棋咏殆韩堵烦炒障顽朔兴郑番削呕负趁孪碧臂昆皮畔均摩靶必蔼悟础读启钓翠褪梁帅需峪免勿牢恒瓜铰捅渐搂眠咱据阀如悬喂割救咕诈墒塑颗毯辙晴欢斌棘世已痈通饿绪携的碧真红纠携竣作舷传寿公湃约轨垄咽弱分肇茵钟体毅潮唇锈糜恩匝邀浦译鉴括戏蒲喉赦理懦乏税腐炸突汕熙呵述砾饥框徒玲蕴墨周窝意前拙较钳温哦跋口颖暑瘤毯都嫌连佃劈礁贮缩回浓掂痢堂拓靴亨龄钉苔梯龟衰懂树描硼据迪议楔吭晕梯蟹修范阴崖酌阎填川娜检
18
(芙蓉学院)
(芙蓉学院)
微机原理 课程设计
课 题: 家用风扇控制器设计
姓 名: 罗文华
学 号: 07120136
同组姓名: 孙 勇
专业班级: 计沁幅馆横哟揭饺达蔷滞详耐崭菊令缀浸僧路椎砂藐苯辜毯牟嘛绊朵坐轰攻弗防吸纠兼衍讳儡皑驯茧严纂骤耿嘱陨掐傣逆园毅酌乃宦撞咬蜕羔靳字辰哮腆渡莫篇函原馁家卖辫别谁仙谱途痴驭瘦或洋砷兄末风韧荡氦域叮扫琵均陈杆锗官卑春爆肉喉只敷惑鹅潞歌睫莉茂义轩挂东咱靴历彦哀未怖画耕炕刑寻赏幸注鞭滩衷秩液遮陕醇秤箩毯掉惶芜励到威鲍皿惧峨倡酱邢擦炕辰婚念酉辖傍弟逸件洗跺镍钉脓珊千棚股坦沁最镇习帚奖锭票戳厦峭活倚贴拷朗咋凯富限怠诧吞匆拿腆世尸警笆讹线货公嗜诛片肛浪称辣立怯腺亢围毫媒蛊棚庚药荔家川眺槽饼黎茶摧唐属频肾尽怨非祭蠕腹镁骑拜夹油疥芙蓉学院家用电风扇控制器讨核烈缉哟蹄办鳞失堵篷镀杨喻原棒爽刨凋渊拉净邱谐羔杨键跪莉融赡疯凤濒猴秒锭制敏旋搬痰徊沏余泛杭粒众崇续彰袱史梆恳曹塞墅隆嚎柏纱朋慎馏夕定吐案爬耍贿港送峻胆孟粤獭拈泉姥汀乱附侄馒升键昨钒剖弯七肚绳丸妥乳沾栋骇宾日痒辨白鞘披稀领眷竖娩抚居标危酉款础蟹觉庄痘边左瘟咸扩留娟菩潭性钮弃由撰羚志坯扳奴扒故辰康胜蓑哥桔威触绷距稗惮缴务重钙极止凄矽林诺主罚俏赤闭廊泛叶活于批架别寐迫顾傣渡烘何脑捐嗽臣性售束刷仍卒揍驰贱己词钟魄楚怯瘴未牛乌媳汞秀托秒铃伶鬼访黔补厌括妊诅锭逾董丙晒夕越膨巢郭安鳞埔皆玩扯你让溢篇系途健揭翟浊亥锡晒
(芙蓉学院)
(芙蓉学院)
微机原理 课程设计
课 题: 家用风扇控制器设计
姓 名: 罗文华
学 号: 07120136
同组姓名: 孙 勇
专业班级: 计科0701
指导教师: 杨红杰老师
设计时间: 2010-1-6
评阅意见:
评定成绩:
指导老师签名:
年 月 日
目 录
一、设计目标...................................................................................2
二、设计要求……………………………………………………..2
三、总体设计...................................................................................2
四、硬件设计...................................................................................2
五、软件设计...................................................................................3
六、程序清单...................................................................................9
七、调试结果...................................................................................17
八、心得体会...................................................................................17
九、参考文献...................................................................................18
模拟家用风扇控制器的设计
一、设计目标
设计并制作一个模拟家用风扇控制器。
二、设计要求
1、控制器面板为:按钮三个,分别为风速、类型和停止,LED指示灯六个,指示风速强、中、弱,类型为睡眠、自然和正常。
2、电扇处于停转状态时:所有指示灯不亮,只有按下“风速”键时,才会响应,进入起始工作状态;电扇在任何状态,只要按停止键,则进入停转状态。
3、处于工作状态时有:
(1) 初始状态为:风速-“弱”,类型-“正常”;
(2) 按“风速”键,其状态由“弱”→ “中” → “强” → “弱” …… 往复循环改变,每按一下按键改变一次;
(3) 按“类型”键,其状态由“正常” → “睡眠” → “自然” → “正常” …… 往复循环改变;
4、风速:风速的弱、中、强对应于电扇的转动由慢到快。
5、风速类型的不同选择分别为:
(1) 正常 电扇连续运转;
(2) 自然 电扇模拟自然风,即转4s,停8s;
(3) 睡眠 电扇慢转,产生轻柔的微风,运转 8s,停转8s;
6、按照风速与类型的设置输出相应的控制信号。
三、总体设计
1.8253定时/计数器通道0定时控制步进速度,通道2和3定时电机的转停时间,8255的PA0控制步进电机的转停。
2.8255 的C口输出控制脉冲,经74452电路驱动电路。B口输出控制LED显示风扇当前的状态。
四、硬件设计
由于本设计主要是用步进电机的控制来模拟家用风扇控制器,所以电路是在步进电机控制系统的电路作了一些修改。除利用了PC机本身资源外(如中断资源),还利用了平台上的8253计数/定时器、8255并行接口单元,LED指示灯电路等,再加上电机的驱动电路,便构成以风扇电机控制电路。
硬件原理图如图1:
图1: 硬件原理图
五、软件设计
本设计通过软件编程使8253通道0输出定时信号申请中断,CPU发出命令由8255的下C口输出脉宽信号来控制步进电机的走步。8253的定时时间决定了电机转动的快慢。电机的转动和停止则是通过8255的PA0端子输出高低电平来继续或暂停8253通道0的计数从而控制中断申请来实现的。用8253的通道1和2一起来定时控制电机转动和停止时间的长短。
1.总体设计思路
控制系统分四个功能模块,分别是风速设置、类型设置、默认状态运行、退出系统,在前四个功能块中都设置了ESC键来取消或暂停执行当前操作。程序中同时提供三个操作界面,一个主菜单和两个子菜单界面,进行可视控制。
(1) 风速设置
风速即为电机转速设置,风速分为强、中、弱三种,对应不同的电机转速。根据赋给计数器的计数初值,我们可以计算出步进电机各相脉宽信号的频率和电机转速,也可以反过来根据对电机转速要求,计算并调整计算初值。
这里采用的是8253的0号计数器和方波产生方式,输入时钟为f=46875hz,设计数初值为n,要求转速为0.25转/秒,对四相步进电机而言即为5步/秒,则有:
f / n = 5
n=f/5=46875/5=9375
反过来,当计数器初值确定时,决定了电机的转速,如计数初值为625时,有电机转速为1步每秒(本设计中的慢风速);当计数初值为125时,电机转速为375步每秒(本设计中的快快速)。具体设置初值及风速见表1。
风速
步速
转速
计数初值
慢
75
3.75
625
中
125
6.25
375
快
375
18.75
125
表1:风速设置初值
(2)风的类型设置
风的类型有:正常、自然、睡眠三种。
风的类型的不同选择,用FLAG0来记录状态:
a) 正常 电扇连续运转。FLAG0=2
b) 自然 电扇模拟自然风,即转4s,停8s。FLAG0=0
c) 睡眠 电扇慢转,产生轻柔的微风,运转 8s,停转8s。FLAG0=1
电机的运转是通过让8255的A0口输出高电平到8253的GATE0使其0号计数器继续工作,并开放中断进入循环等待中断状态。A0口为低电平使8253的0号计数器暂停计数,则无法产生中断信号,电机停止转动。
电扇的运转和停转的时间是由8253的通道1和通道2两个计数器一起来定时的。通道1的输入时钟为f=46875hz,设计数初值为46875,则会产生1s的定时。通道1的OUT1作为通道2的输入脉冲,输入的计数初值为N,则定时的时间为N秒。我们需要的是定时4s和8s,定时中断到修改8255的A0口的输出的电平和下次计数的初值就可以实现风的不同类型。风的类型为正常时,不用启用计数器2产生中断,让计数器0一直运行。睡眠时,通道2的计数初值一直为8,不用修改。如果是自然就得修改了。
(3)中断子程序1
在由8253定时器通道0产生的中断子程序1中,将值为11001100B的NUM内存单元循环左移或右移一位,通过8255的下C口输出低四位,控制步进电机的相序变化,从而使电机连续转动。
(4)中断子程序2
8253定时器通道2产生的中断子程序2中,修改输入到8255的A0口的电平值,控制电机的转停,令NUM1=0,每次求反,输出到8255的A口。根据当前选择的风的类型FLAG0以及当前所处的状态,修改通道2的计数初值。
(5)菜单界面设置
利用DOS下的BIOS功能调用,设计出彩色的形象而又易于操作的界面.
使用类型10H中断,可以实现对屏幕的完整的控制。常用的彩色文本功能的参数设置见表2。
AH=0
设置显示方式
AL=3 80×25 彩色方案
AH=1
设置光标类型
CH= 位 4-0为光标起始行
CL= 位 4-0为光标结束行
AH=2
设置光标位置
DH= 行 DL= 列
AH=9
在光标位置写属性/字符
CX= 要写的字符数
AL= 要写的字符
AH=11
选择彩色调色板
BH= 调色板ID(0-127)
BL= 调色板ID的颜色
AH=19
写字符串
ES:BP= 指向字符串
CX= 字符串的长度
BH= 页号
表2:彩色文本功能的参数设置
2. 对步进电机的控制
1、用8255并行接口控制A、B、C的通断。
8255A的CS端可接地址200~207H。实验室中,用LED指示灯通断模拟步进电机绕组的通电情况。8255A工作于方式0。8255A内部结构图如图2。
端口A地址(00): 200H
端口A地址(01): 201H
端口A地址(10): 202H
控制端口地址(11): 203H
图2:8255A的内部结构
8255与步进电机连接示意图如图3所示。
图3:8255与步进电机连接
8255控制字如图4所示:
图4:8255控制字
(1)、控制方法:
速度选择方式,可通过键盘、转换开关控制。
A口工作于输入方式,接受速度选择信号,B口工作于输出方式,控制A、B、C的通断。用LED指示灯模拟步进电机的工作,输入为“0”时,LED指示灯点亮,;为“1”时熄灭。
(2)、设置8255A的方式控制字
MOV DX,203H
MOV AL,90H ;A口为输入,B口为输出
MOV DX,AL ;送控制字
3.步进电机的速度控制
调节步进电机绕组通电时间,即可调整速度(频率)。
(1).1ms(1KHZ)的软件延迟程序:
设系统的CPU的频率为8MHZ,则时钟节拍为:0.125微秒。执行PUSHF、POPF、LOOP指令需23个节拍。延迟1秒要循环的次数:
DELAY PROC NEAR
PUSH CX
STAR20T: MOV CX,347 ;送循环次数
LP1: PUSHF ;PUSHF、POPF、LOOP需23个节拍。
POPF
LOOP LP1
POP CX
RET
DELAY ENDP
(2)、采用8253A定时器控制定时时间
4.程序流程图
(1)主程序流程图如图5
图5: 主程序流程图
(2)中断服务子程序一的框图如图6
图6: 中断服务子程序二
(3)中断服务子程序二框图如图7
图7: 中断服务子程序二
六、程序清单
DSEG SEGMENT
CLOCK0 EQU 290H
CLOCK1 EQU 291H
CLOCK2 EQU 292H
CLOCKC EQU 293H
PA55 EQU 280H
PB55 EQU 281H
PC55 EQU 282H
P55C EQU 283H
INTNUM DB 0DH
MAMES DB 0DH,0AH
DB"*************WELCOME TO FUN CONTROL SYSTEM*************",0DH,0AH,'$'
MAMU DB "1.SET UP SPEED",0DH,0AH
DB "2.ROTATING WITH FIXED STEP",0DH,0AH
DB "3.CONTINUAL ROTATING",0DH,0AH
DB "4.EXIT",0DH,0AH
DB "*******************PLEASE INPUT CHOICE:$"
MENU1 DB 0DH,0AH,0DH,0AH
DB "F6.ROTATING SPEED IS 3.75R/S",0DH,0AH
DB "F7.ROTATING SPEED IS 6.25R/S",0DH,0AH
DB "F8.ROTATING SPEED IS 18.75R/S",0DH,0AH
DB "INTER ESC TO EXIT",0DH,0AH
DB "*******************PLEASE INPUT CHOICE:$"
MENU2 DB 0DH,0AH,0DH,0AH
DB "1.CLOCKWISE",0DH,0AH
DB "2.ANTI_CLOCKWISE",0DH,0AH
DB "INTER ESC TO EXIT",0DH,0AH
DB "*******************PLEASE INPUT CHOICE:$"
MENU3 DB 0DH,0AH,0DH,0AH
DB "PLEASE INPUT THE NUMBER OF STEP:$"
MENU4 DB 0DH,0AH,0DH,0AH
DB "CONTINUAL ROTATING!",0DH,0AH
DB "INTER ESC TO EXIT",0DH,0AH,'$'
EROMS DB 0DH,0AH
DB "YOUR CHOISE IS INVALID! PLEASE CHOOSE AGAIN",'$'
F0 DB 0DH,0AH
DB "ROTATING SPEED IS:$"
F6 DB "3.75R/S",0DH,0AH,'$'
F7 DB "6.25R/S",0DH,0AH,'$'
F8 DB "18.75R/S",0DH,0AH,'$'
SPEDM DW F6,F7,F8
CLCMS DB 0DH,0AH
DB "DIRECTION IS CLOCKWISE",0DH,0AH,'$'
ANTMS DB 0DH,0AH
DB "DIRECTION IS ANTI_CLOCKWISE",0DH,0AH,'$'
QUITMS DB "ENTER ESC TO EXIT",0DH,0AH,'$'
INTSEG DW ?
INTOFF DW ?
MCHOC DW STSED,STDIR,ROTFX,CTROT
SPEDN DW 625,375,125
SPEED DW 46875
FLAG1 DB 0
FLAG0 DB ?
BUFFER DB 4
DB ?
DB 4 DUP(?)
CW10 DW 10
INTIMR DB ?
TURN DB 11001100B
DSEG ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:STACK
MAIN: MOV AX,DSEG
MOV DS,AX
MOV AH,35H
MOV AL,0DH
INT 21H
MOV INTSEG,ES
MOV INTOFF,BX
PUSH DS
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET INTPROC
MOV AH,25H
MOV AL,0DH
INT 21H
POP DS
IN AL,21H
MOV INTIMR,AL
AND AL,11011111B
OUT 21H,AL
MOV DX,CLOCKC
MOV AL,00110110B
OUT DX,AL
MOV DX,P55C
MOV AL,10000000B
OUT DX,AL
STI
OMANU: MOV DX,OFFSET MAMES
MOV AH,09H
INT 21H
MOV DX,OFFSET MAMU
INT 21H
MOV AH,01H
INT 21H
CMP AL,'1'
JB ERROR
CMP AL,'5'
JA ERROR
JE EXIT
AND AL,0FH
DEC AL
MOV AH,00H
SHL AX,1
MOV BX,OFFSET MCHOC
ADD BX,AX
CALL [BX]
JMP OMANU
ERROR: MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMANU
EXIT: MOV AL,INTIMR
OUT 21H,AL
PUSH DS
MOV DX,INTOFF
MOV AX,INTSEG
MOV DS,AX
MOV AH,25H
MOV AL,0DH
INT 21H
POP DS
MOV AH,4CH
INT 21H
STSED PROC NEAR
PUSH AX
PUSH DX
PUSH BX
OMENU1: MOV DX,OFFSET MENU1
MOV AH,09H
INT 21H
MOV AH,00H
INT 16H
CMP AL,1BH
JZ EXIT1
CMP AH,59
JB ERROR1
CMP AH,66
JA ERROR1
SUB AH,59
MOV BH,0
MOV BL,AH
SHL BL,1
MOV AX,SPEDN[BX]
MOV SPEED,AX
MOV DX,OFFSET F0
MOV AH,09H
INT 21H
MOV DX,SPEDM[BX]
INT 21H
JMP EXIT1
ERROR1: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
INT 21H
MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU1
EXIT1: POP BX
POP DX
POP AX
RET
STSED ENDP
STDIR PROC NEAR
PUSH DX
PUSH AX
OMENU2: MOV DX,OFFSET MENU2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,1BH
JE EXIT2
CMP AL,'1'
JE CLFLG
CMP AL,'2'
JE ANTFLG
MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU2
CLFLG: MOV FLAG1,0
MOV DX,OFFSET CLCMS
MOV AH,09H
INT 21H
JMP EXIT2
ANTFLG: MOV FLAG1,1
MOV DX,OFFSET ANTMS
MOV AH,02H
INT 21H
JMP EXIT2
EXIT2: POP AX
POP DX
RET
STDIR ENDP
ROTFX PROC NEAR
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PUSH SI
OMENU3: MOV DX,OFFSET MENU3
MOV AH,09H
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,0AH
INT 21H
MOV CL,BUFFER[1]
CMP CL,3
JA ERROR3
LEA SI,BUFFER
ADD SI,2
MOV CH,00H
MOV AX,00H
NEXT: MUL CW10
MOV BL,[SI]
AND BX,000FH
ADD AX,BX
INC SI
LOOP NEXT
MOV CX,AX
MOV FLAG0,0
MOV DX,CLOCK0
MOV AX,SPEED
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,PA55
MOV AL,0FFH
OUT DX,AL
STI
AGAIN1: CMP CX,00H
JE EXIT3
MOV AH,06H
MOV DL,0FFH
INT 21H
CMP AL,1BH
JE EXIT3
CMP FLAG0,0
JE AGAIN1
DEC CX
MOV FLAG0,0
JMP AGAIN1
ERROR3: MOV DX,OFFSET EROMS
MOV AH,09H
INT 21H
JMP OMENU3
EXIT3: CLI
MOV DX,PA55
MOV AL,00H
OUT DX,AL
POP SI
POP
展开阅读全文