步进电机实验微机原理.docx
《步进电机实验微机原理.docx》由会员分享,可在线阅读,更多相关《步进电机实验微机原理.docx(14页珍藏版)》请在冰豆网上搜索。
步进电机实验微机原理
大连理工大学本科设计报告
(计算机原理接口实验综合设计)
题目:
步进电机控制系统设计
课程名称:
计算机原理实验
学院(系):
电信
专业:
自动化
班级:
100*
学号:
201081***
学生姓名:
**
成绩:
201年月0日
题目:
步进电机
1设计要求
利用实验台上的开关(K7-K0),实现步进电机的转速、转向控制。
具体要求如下:
1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作(使用四个LED监视步进电机的相序信号),相序之间的时间决定着步进电机的转速,而间隔时间由延时程序中的CX寄存器的初值决定(参见实验教材3.1.3章节)。
2.利用D8255A的PB7-PB0做输入,与K7-K0连接。
其中K7做步进电机的转向控制,其余位做步进电机的转速控制。
程序运行时通过K7-K0对步进电机实施动态控制;
3.利用8253做秒脉冲发生器,产生约2秒的周期性方波信号。
其中CNT0做分频器:
将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(0.5HZ);
4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方波作为中断请求信号,引发中断服务ISR;
5.在中断服务程序中实现对步进电机的转速、转向实时控制。
方法如下:
在ISR中,对D8255A的PB口进行一次输入操作,并根据输入的数据:
1)对D7(与K7对应)位的数据为步进电机的转向控制;
2)对D6-D0(与K6-K0对应)位的数据为步进电机的转速控制。
2设计分析及系统方案设计
1.将初始相序存放在一个寄存器中(原始相序数据位66H),然后利用对该寄存器“移位”的方式产生下一个相序。
其中对寄存器中的数据移位方向决定着电机旋转地方向。
从而使步进电机运转起来。
2.对8253进行编程,使OUT1输出2秒周期的脉冲方波信号。
为了便于调试,建议使用逻辑笔监测OUT1的输出;
3.编制与中断相关的程序。
包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作(参见教材3.3.3章节)。
上述这些操作都应当加到程序的初始化中;
4.编写中断服务程序ISR。
在ISR中读取D8255A的PB口数据,然后进行数据分析、根据数据来调整CX寄存器中的数据,因而改变步进电机的转速和转向。
3系统电路图
4外围接口模块硬件电路功能描述
8253具有三个独立的16位减法计数器,每个计数器可按照二进制或十进制计数,每个通道都有六种不同的工作方式。
8255有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为主机与多种外设连接时的中间接口电路。
5主程序中主要变量说明
变量名称
内存单元
功能
FLAG
AX
转向标志
BUF
AL
步进电机初始相位
SPEED
SI
可调转速
SD
AL
默认转速
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
INT_PROC
io8255_B
SD
中断服务
DELAY
无
无
延时
7主程序程序流程图
8程序清单
io8255_AEQU200H
io8255_BEQU201H
io8255_KEQU203H
io8253_0EQU270H
io8253_1EQU271H
io8253_KEQU273H
DATASEGMENT
SPEEDDW0280H,0380H,0480H,05800H,0680H,0780H,0880H
SDDW0300H;默认转速
FLAGDB?
BUFDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
CLI;关中断
MOVFLAG,00H;标志位置一
MOVAX,DATA
MOVDS,AX
MOVES,AX
INAL,21H;设置中断屏蔽字
ANDAL,11011111B
OUT21H,AL
PUSHDS;设置中断向量表
MOVAX,0
MOVDS,AX
LEAAX,CS:
INT_PROC
MOVSI,35H
ADDSI,SI
ADDSI,SI
MOVDS:
[SI],AX
PUSHCS
POPAX
MOVDS:
[SI+2],AX
POPDS
MOVDX,io8255_K;对8255写控制,A口输出,B口输入
MOVAL,82H
OUTDX,AL
MOVBUF,33H;步进电机初始相位
MOVDX,io8253_K;计数器0,分频
MOVAL,00110101B
OUTDX,AL
MOVDX,io8253_0
MOVAX,10000
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,io8253_K;0.5S脉冲
MOVAL,01110111B
OUTDX,AL
MOVDX,io8253_1
MOVAX,200
OUTDX,AL
MOVAL,AH
OUTDX,AL
OUT1:
MOVAL,BUF;写相位
MOVDX,io8255_A
OUTDX,AL
STI;开中断
LLL:
CALLDELAY;延时
CMPFLAG,01H
JZNEX0
MOVAL,BUF
RORAL,1
JMPNEX1
NEX0:
MOVAL,BUF
ROLAL,1
NEX1:
MOVDX,io8255_A
OUTDX,AL
MOVBUF,AL
JMPLLL
DELAYPROC;延时函数
PUSHAX
PUSHCX
PUSHDX
MOVDH,6
X1:
MOVCX,SD
X2:
LOOPX2
DECDH
JNZX1
POPDX
POPCX
POPAX
RET
DELAYENDP
INT_PROCPROCFAR;中断服务子程序
PUSHAX;保护现场
PUSHCX
MOVDX,io8255_B;读8255B口输入
INAL,DX
CMPAL,80H;通过判断输入获取FLAG和SD(cx)的值
JBCMP20
MOVFLAG,01H
JNZCMP10
MOVSD,0300H
JMPEINT
CMP10:
CMPAL,81H
JNZCMP11
MOVSI,WORDPTRSPEED[0]
MOVSD,SI
JMPEINT
CMP11:
CMPAL,82H
JNZCMP12
MOVSI,WORDPTRSPEED[2]
MOVSD,SI
JMPEINT
CMP12:
CMPAL,84H
JNZCMP13
MOVSI,WORDPTRSPEED[4]
MOVSD,SI
JMPEINT
CMP13:
CMPAL,88H
JNZCMP14
MOVSI,WORDPTRSPEED[6]
MOVSD,SI
JMPEINT
CMP14:
CMPAL,90H
JNZCMP15
MOVSI,WORDPTRSPEED[8]
MOVSD,SI
JMPEINT
CMP15:
CMPAL,0A0H
JNZCMP16
MOVSI,WORDPTRSPEED[10]
MOVSD,SI
JMPEINT
CMP16:
MOVSI,WORDPTRSPEED[12]
MOVSD,SI
JMPEINT
CMP20:
MOVFLAG,00H
CMPAL,00H
JNZCMP21
MOVSD,0300H
JMPEINT
CMP21:
CMPAL,01H
JNZCMP22
MOVSI,WORDPTRSPEED[0]
MOVSD,SI
JMPEINT
CMP22:
CMPAL,02H
JNZCMP23
MOVSI,WORDPTRSPEED[2]
MOVSD,SI
JMPEINT
CMP23:
CMPAL,04H
JNZCMP24
MOVSI,WORDPTRSPEED[4]
MOVSD,SI
JMPEINT
CMP24:
TESTAL,08H
JNZCMP25
MOVSI,WORDPTRSPEED[6]
MOVSD,SI
JMPEINT
CMP25:
CMPAL,10H
JNZCMP26
MOVSI,WORDPTRSPEED[8]
MOVSD,SI
JMPEINT
CMP26:
CMPAL,20H
JNZCMP27
MOVSI,WORDPTRSPEED[10]
MOVSD,SI
JMPEINT
CMP27:
MOVSI,WORDPTRSPEED[12]
MOVSD,SI
EINT:
MOVAL,20H;发EOI命令
OUT20H,AL
POPCX
POPAX
STI
IRET
INT_PROCENDP
CODEENDS
ENDSTART
9系统调试运行结果说明、分析所出现得问题,设计体会与建议
软件环境:
硬件环境:
设计语言:
汇编语言
调试过程中,在设计转速环节刚开始不清楚怎样引入速度值,后来经过多次试验以及同学探讨,终于明白可以通过改变CX的值而改变loop循环的次数,从而实现对延时的不同控制,得以完成实验。
6结论及设计体会
微机原理的学习使我对对汇编语言有了初步的了解。
并且通过本实验让我对汇编语言产生很大的兴趣,让我掌握了汇编编程的总体思路,本实验利用微机控制步进电机的转向,在实验过程中遇到的问题告诉我们理论的编程要结合实际的电动机技术指标调试延迟时间。
从这次实验中并让我进一步的学习到了8255的应用和掌握了8255的初始化和其编程。
对我们以后的工作和学习起到的积极的作用。
参考文献
**************************************************************