步进电机调速系统.docx
《步进电机调速系统.docx》由会员分享,可在线阅读,更多相关《步进电机调速系统.docx(14页珍藏版)》请在冰豆网上搜索。
步进电机调速系统
步进电机调速系统
一.设计目的
1.掌握步进电机的工作原理及控制方法
2.了解控制步进电机转速的原理
3.进一步掌握微机接口中的相关知识
4.熟悉设计系统的方法
二.设计要求
1.以8086极其支持电路为基础,配必要的存储器、定时系统、控制接口、驱动电路、LED显示接口等构成微机控制的电机调速系统。
2.对步进电机的工作原理进行分析,通过“启、停、转速”等按键命令,实现对电机的平稳启动、停止和不同速率上的匀速转动,并通过LED显示转速;
3.方案设计中要突出信号的变换、驱动电路的设计和步进电机控制程序的编制;
三.设计思路
(1)步进电机基本原理
所谓步进,就是指每给步进电机一个递进脉冲,步进电机各绕组的通电顺序就改变一次,电机就回转动一次。
使用键盘控制方式能对步进电机的转动方向、速度和角度进行调节。
(2)步进电机激励方式
步进电机有三相激励,也有四相激励的。
现以两相四拍为例说明。
2相激励。
这种方式的工作波形如图所示。
它可看作是一种周期信号,每个周期可以为四个状态。
显然,任何时刻步进电机都有两相绕组有电流。
每一状态,步进电机走一步。
四.设计内容
1.程序流程图
2.源程序
P8255_AEQU9800H
P8255_BEQU9801H
P8255_CEQU9802H
P8255_MODEEQU9803H
DELAY_SETEQU07FH;延时常数
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
BUFDB?
KVLDB2DUP(?
);击键次数备份,键值
PTDB?
;显示缓冲区指针
DSBUFDB4DUP(?
);显示缓冲区
KDDB?
;数码管数据信号
KHDB?
;键盘行信号
KLDB?
;键盘列信号、数码管位选信号
KVADB?
;键值备份
KVBDB?
;在闪烁子程序中保存显示器原有的数据
COUNT2DB?
;击键次数
COUNT4DB?
;连续击键次数
KTBDB48H;0键码
DB44H;1
DB34H;2
DB24H;3
DB42H;4
DB32H;5
DB22H;6
DB41H;7
DB31H;8
DB21H;9
DB11H;A
DB12H;B
DB14H;C
DB18H;D
DB28H;E
DB38H;F
DB00H;10
SGTBDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H
DB0F8H,80H,90H,88H,83H,0C6H,0A1H
DB86H,8EH,0FFH,8CH,89H,8EH,0BFH,0F7H
;CHARDB'
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
START:
MOVAX,MY_DATA
MOVDS,AX
SSS:
MOVDX,P8255_MODE
MOVAL,81H;写8255控制字A、B输出,C输入
OUTDX,AL
START1:
MOVBX,OFFSETDSBUF
MOVPT,BL
MOVDSBUF,15H;_
MOVDSBUF+1,10H;空格
MOVDSBUF+2,10H
MOVDSBUF+3,10H
;
START2:
CALLBLINK3;键盘扫描、显示子程序、光标闪动
START3:
CALLCHAG;转数字键处理程序
;CALLDELAY
JMPSTART2;转下一轮处理程序
MY_PROCENDp
CHAGPROCNEAR
MOVBH,00H
MOVBL,PT
MOVAL,COUNT4
MOV[BX],AL;键值送到显示缓冲区中
CMPBL,OFFSET[DSBUF+3]
JNZCHAG2
movBL,OFFSETDSBUF
MOVPT,BL
CHAG1:
RET
CHAGENDp
CHAG2:
INCBL
MOVPT,BL
JMPCHAG1
BLINKPROCNEAR
MOVCX,100H;熄灭显示器时间常数
MOVBH,00H
MOVBL,PT
MOVAl,[BX]
MOVKVB,AL
;保存原显示器数据
MOVAL,10H;填入熄灭显示器的码
MOV[BX],AL
BLINK1:
CALLDSKS;键盘扫描
BLINK2:
CMPCOUNT4,10H
JNZBLINK6;键按下返回
LOOPBLINK1;没键按下继续循环
MOVAL,KVB
MOVBL,PT
MOV[BX],AL
BLINK3:
MOVCX,150H;点亮显示器时间常数
BLINK4:
CALLDSKS
BLINK5:
CMPCOUNT4,10H
JNZBLINK7;键按下返回
LOOPBLINK4;没键按下继续循环
JMPBLINK
BLINK6:
MOVAL,KVB;恢复原显示器中的数据
MOVBL,PT
MOV[BX],AL
BLINK7:
RET
BLINKENDp
DSKSPROCNEAR;键盘扫描处理程序
PUSHCX
CALLDSUP;显示
CALLKBS;键盘扫描
MOVAL,KVL+1;取上次按键键值
CMPKVA,AL;与本次键值相比
MOVAL,KVL;按键次数
MOVCOUNT2,AL
MOVAL,KVL
MOVCOUNT4,AL
JZDSKS1
MOVCOUNT2,0FFH;不相等,重新赋值
MOVCOUNT4,0FFH
DSKS1:
DECCOUNT4
CMPCOUNT4,0F8H;为E0?
JZDSKS3
CMPCOUNT4,0EH;为0E?
JZDSKS3
CMPCOUNT4,00H;为00?
JZDSKS2
MOVCOUNT4,10H;赋值
DECCOUNT2
JMPDSKS4
DSKS2:
MOVCOUNT4,0fH;按下键时间足够长则为连续击键
DSKS3:
MOVAL,COUNT4
MOVCOUNT2,AL
MOVAL,KVA
MOVCOUNT4,AL
DSKS4:
MOVAL,COUNT2
MOVKVL,AL
MOVAL,KVA
MOVKVL+1,AL;备份键值
MOVAL,COUNT4
POPCX
RET
DSKSENDp
DSUPPROCNEAR
PUSHCX
MOVCX,04H;显示器个数
MOVKL,01H;选中的显示器
MOVBX,OFFSETDSBUF
DSUP2:
MOVAL,00H
MOVDX,P8255_B;关闭显示器
OUTDX,AL
MOVAL,[BX];取显示缓冲区中的数据
PUSHBX
MOVAH,00H
MOVDI,AX
MOVBX,OFFSETSGTB;编码
MOVAX,[BX+DI]
MOVAH,00H
POPBX
MOVDX,P8255_A;送显示器显示
OUTDX,AL
INCBX
MOVAL,KL
MOVDX,P8255_B;送位选信号
OUTDX,AL
ROLAL,1
MOVKL,AL
CALLDELAY;下一位
PUSHCX
MOVCX,-1
LOOP$
POPCX
LOOPDSUP2
POPCX
MOVAL,00H
MOVDX,P8255_B;关闭显示器
OUTDX,AL
RET
DSUPENDp
KBSPROCNEAR;键盘扫描程序
MOVDX,P8255_A;清显示器
MOVAL,0FFH
OUTDX,AL
MOVCX,04H;送列数
MOVKL,0FEH;扫描列初始值
KBS1:
MOVAL,KL
MOVDX,P8255_B;逐列清零
OUTDX,AL
SALAL,1
MOVKL,AL
MOVDX,P8255_C;读行信号
INAL,DX
NOTAL
ANDAL,0FH
CMPAL,00H;是否有键按下
JNZKBS2
LOOPKBS1;没键扫描下一列
KBS2:
CMPAL,0C0H
JMPK0
CMPAL,0F9H
JMPK1
CMPAL,0A4H
JMPK2
CMPAL,0B0H
JMPDSUP2
K0:
MOVBL,18H
CALLDELAY
MOVAL,BUF
RORAL,1
MOVBUF,AL
JMPDSUP2
K1:
MOVBL,20H
CALLDELAY
MOVAL,BUF
ROLAL,1
MOVBUF,AL
JMPDSUP2
K2:
MOVBL,30H
CALLDELAY
MOVAL,BUF
RORAL,1
MOVBUF,AL
JMPDSUP2
MOVBX,CX
MOVCX,04H;拼装键号
SALBX,CL
MOVCX,BX
ORAL,CL
MOVKVA,AL
MOVDI,10H;键盘个数
MOVBX,OFFSETKTB
KBS3:
MOVAL,[BX+DI]
CMPAL,KVA;计算键值,无键按下返回00H
JNZKBS5
KBS4:
MOVAX,DI
MOVKVA,AL;保存键值
CALLBREAK
RET
KBS5:
DECDI
MOVAX,DI
CMPAL,00H
JNZKBS3
JMPKBS4
KBSENDp
DELAYPROCNEAR;延时程序
PUSHF
PUSHDX
PUSHCX
MOVDX,DELAY_SET
D1:
MOVCX,-1
D2:
DECBL
DECCX
JNZD2
DECDX
JNZD1
POPCX
POPDX
POPF
RET
DELAYENDp
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
MY_CODEENDS
ENDSTART
五.运行结果
当按下键盘上的0键时,电机开始转动,当按下键盘上的1键时,电机开始正向转动,当按下键盘上的2键时,电机开始反向转动,当按下键盘上的3键时,电机停止转动。
当键盘上有键按下时,对应的数值轮流显示在四个数码管上。
六.心得体会
通过这两周的硬件实习,我从中学到了很多东西。
在刚开始实习时,我首先学会了怎样使用PROTEL9E这个软件工具。
从查找芯片到联线,我现在已经很熟悉了;其次,我对计算机组成与接口技术这门可又进行了进一步的学习,掌握了8255的各种工作方式及其应用知道怎样在系统接口实验单元上构造实验电路。
从一开始的调试到最终运行成功,这中间遇到了不少困难,在老师的指点下解决了问题,从而我学到了很多。
但是由于时间等一些问题,最终并没有达到老师的要求。
总的来说,实验中我还是有很多收获的。
为今后打下了牢固的基础。