大连理工大学 计算机原理实验 步进电机.docx
《大连理工大学 计算机原理实验 步进电机.docx》由会员分享,可在线阅读,更多相关《大连理工大学 计算机原理实验 步进电机.docx(11页珍藏版)》请在冰豆网上搜索。
大连理工大学计算机原理实验步进电机
大连理工大学本科设计报告
(计算机原理接口实验综合设计)
题目:
步进电机控制系统设计
课程名称:
计算机原理实验
学院(系):
电子信息与电气工程学部
专业:
班级:
学号:
学生姓名:
成绩:
2015年12月26日
题目:
步进电机控制系统设计
1设计要求
利用实验台上的开关(K7-K0),实现步进电机的转速、转向控制。
具体要求如下:
1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作(使用四个LED监视步进电机的相序信号),相序之间的时间决定着步进电机的转速,而间隔时间有时由CX寄存器的初值决定(参见实验教材3.1.3章节)。
2.利用ADC0809将输入滑动变阻器的模拟信号转换成数字信号来控制步进电机的转速,当滑动变阻器在两端时转速最快,向中间转动时,步进电机的转速会逐渐减小,当转过中间之后,步进电机转向;
3.利用8253做秒脉冲发生器,产生约0.5秒的周期性方波信号。
其中CNT0做分频器:
将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(2HZ);
4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方波作为中断请求信号,引发中断服务ISR;
5.在中断服务程序中实现对步进电机的转速、转向实时控制。
实现方法如下:
在ISR中,对ADC0809的输出进行一次输入操作,并根据输入的数据:
判断ADC0809输出的值,根据相应的值来判断步进电机的方向和转速;
2设计分析及系统方案设计
1.首先参照实验教材的相关内容,将步进电机运转起来。
在原有的参考程序中使用的是“输出立即数”方式来输出步进电机的相序,建议进行修改,以方便电机的转向控制。
使用“寄存器间接寻址”的方式输出相序信号:
将步进电机的相序数据定义在数据段当中,使用SI或DI查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向。
2.对8253进行编程,使OUT1输出秒脉冲方波信号,为了便于调试,建议使用逻辑笔监测OUT1的输出状态是否正常;
3.编制与中断相关的程序。
包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作,以上这些都应当加到程序的初始化中;
4.编写中断服务程序ISR。
在ISR中读取ADC0809转换后的数据,然后进行数据分析、根据数据来调整CX寄存器中的数据,因而改变步进电机的转速。
3系统电路图
4外围接口模块硬件电路功能描述
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片
5主程序中主要变量说明
变量名称
内存单元
功能
SPEED2
DS:
0001
存储不同状态下对应的CX值
SPEED
DS:
0000
延时程序中dh的值
flag
DS:
0003
控制步进电机转动的方向和速度值
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
delay
cx要改变的值存放在SPEED2中
延时子程序,用来延时,改变步进电机的转速。
int_proc
将转速和转向存放在flag中
中断控制程序,通过中断改变延时程序中CX
7主程序程序流程图
8程序清单
.modelsmall
.386
IO_8255EQU200H
IO_8253EQU210H
AD_IOEQU220H
DATASEGMENT
SPEEDDB6
SPEED2DB70H
FLAGDB00H
ZZDB01H,03H,02H,06H,04H,0CH,08H,09H
FZDB09H,08H,0CH,04H,06H,02H,03H,01H
STOPDB00H,00H,00H,00H,00H,00H,00H,00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
;-------设置8253CNT0,CNT1----------
MOVDX,IO_8253
ADDDX,3
MOVAL,00110111B
OUTDX,AL
MOVDX,IO_8253
MOVAL,0
OUTDX,AL
OUTDX,AL
MOVDX,IO_8253
ADDDX,3
MOVAL,01010110B
OUTDX,AL
MOVDX,IO_8253
INCDX
MOVAL,20
OUTDX,AL
;-------设置8255----------
MOVDX,IO_8255
ADDDX,03
MOVAL,82H;A口作为输出B口作为输入
OUTDX,AL
;-------设置386EX主8259中断屏蔽字----------
INAL,21H
ANDAL,11011111B
OUT21H,AL
;-------设置中断向量表----------
PUSHDS
MOVAX,0
MOVDS,AX
LEAAX,CS:
INT_PROC;AX指向中断程序入口地址
MOVSI,35H;类型码=35H
ADDSI,SI
ADDSI,SI;35*4
MOVDS:
[SI],AX;中断向量表的IP值
PUSHCS
POPAX
MOVDS:
[SI+2],AX;中断向量表的CS值
POPDS
STI
;步进电机转向
L1:
MOVAL,FLAG
MOVAH,AL
ANDAH,80H
CMPAH,00H
JEL2
LEADI,ZZ
JMPL3
L2:
LEADI,FZ
;速度
L3:
ANDAL,7FH
CMPAL,00H
JNEL4
LEADI,STOP
L4:
MOVSPEED2,AL
MOVDX,IO_8255
MOVCX,08H
LP:
MOVAL,[DI]
OUTDX,AL
CALLDELAY
INCDI
LOOPLP
JMPL1
;-------中断服务子程序----------
INT_PROCPROCfar
PUSHAX
PUSHCX
MOVDX,AD_IO
OUTDX,AL;启动ADC
MOVDX,AD_IO;获取ADCEOC状态地址
ADDDX,2
L5:
INAL,DX
TESTAL,01H;测试EOC=1?
JZL5
MOVDX,AD_IO;读数据地址
INCDX
INAL,DX
MOVBL,AL
ANDBL,80H
CMPBL,00H
JNZL6
JMPL7
L6:
NEGAL
L7:
LEASI,FLAG
MOV[SI],AL
OUTDX,AL
MOVAL,20H;发送中断结束指令
OUT20H,AL
POPCX
POPAX
STI;允许中断发生
IRET
INT_PROCENDP
DELAYPROC
PUSHAX
PUSHCX
PUSHDX
MOVDH,SPEED
XORCX,CX
X1:
MOVCL,SPEED2
ADDCX,CX
ADDCX,CX;增大相序步长
ADDCX,00F5H
X2:
LOOPX2
DECDH
JNZX1
POPDX
POPCX
POPAX
RET
DELAYENDP
CODEENDS
ENDSTART
9系统调试运行结果说明、分析所出现得问题,设计体会与建议
硬件环境:
386EX实验箱
软件环境:
HQFC
设计语言:
汇编语言
本次实验将设计后的程序下载到386EX实验箱上,运行程序,旋转滑动变阻器,可以看到在滑到中间位置时,步进电动机会停止运行;滑过中间位置时,步进电机的转向发生了改变。
滑动变阻器在两端时,步进电机转速最快,在中间时,转速最慢,总体的设计效果已经实现。
在实验过程中,我还遇到了许多问题,最终解决问题,成功实现了设计要求的功能。
在实验中遇到的问题如下:
1)对8253,8255,8259芯片的初始化,以及中断屏蔽字和中断向量表的设置不太熟悉,经过对以前实验的复习,该问题得到解决。
2)对于程序的跳转不熟悉,时常出现死循环的现象。
3)在中断子程序的编写中注意关闭中断。
在解决了上述问题之后成功的实现了设计要求的实验现象。
10结论及设计体会
本次实验总体来说是成功的。
实现了设计要求的所有实验现象。
在实验的开始阶段我感到一筹莫展,不知道该从哪下手。
老师指导我们从基础程序做起,先把基础程序编好在逐渐的往上增加功能。
编好基本程序后,我逐渐找到了感觉,结合前几次做的实验,我成功的加入了8253芯片实现了脉冲,加入8259芯片实现了中断功能,加入了电位器,实现了通过电位器改变转速和转向的功能,完成了设计目标。
这次试验让我对汇编和硬件的结合有了深入的了解,也让我明白每次成功都是一点一滴的积累,最后非常感谢陈老师的耐心教导。
参考文献
[1]秦晓梅陈育斌,计算机原理综合实验教程,大连理工大学,2011