大连理工大学本科设计报告
(计算机原理接口实验综合设计)
题目: 步进电机控制系统设计
课程名称: 计算机原理实验
学院(系): 信通学院
专 业: 通信工程
班 级: 电通
学 号:
学生姓名: 张潜川
成 绩:
年 12 月 29 日
题目:步进电机控制系统设计
1 设计要求
利用实验台上的开关(K7-K0),实现步进电机的转速、转向控制。具体要求如下:
1. 利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作(使用四个LED监视步进电机的相序信号),相序之间的时间决定着步进电机的转速,而间隔时间由延时程序中的CX寄存器的初值决定。
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 设计分析及系统
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
设计
1.将初始相序存放在一个寄存器中(原始相序数据位66H),然后利用对该寄存器“移位”的方式产生下一个相序。其中对寄存器中的数据移位方向决定着电机旋转地方向。注意此方法仅适用于“双---四拍”的相序信号。
2.对8253进行编程,使OUT1输出2秒周期的脉冲方波信号触发中断,在中断服务子程序中读取8255B口数据,为了便于调试,建议使用逻辑笔监测OUT1的输出;
3.编制与中断相关的程序。包括中断屏蔽字的设定、中断向量
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的创建以及开中断的操作。上述这些操作都应当加到程序的初始化中;
4.编写中断服务程序ISR。在ISR中读取D8255A的PB口数据,然后进行数据分析、根据数据来调整控制电机转向的direc参数与控制速度的speed参数,因而改变步进电机的转速和转向。
5.编写延时子程序delay,speed参数于delay中控制电机的loop循环,进而控制电机转速。
6.diret参数于主程序中控制相序输出顺序,决定电机转向。
3系统电路图
4 外围接口模块硬件电路功能描述
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的。8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
5 主程序中主要变量说明
变量名称
功能
Buf
存储电机相序
Speed
控制电机转速
Direc
控制电机转向
6 系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能 描述
Int_proc
无
speed、direc
中断服务程序,修改转速与转向,
Delay
无
无
延时,控制电机相序的输出间隔
7 主程序程序流程图
8 程序清单
io8253_0 equ 200h
io8253_1 equ 201h
io8253_k equ 203h
p8255_a equ 210h
p8255_b equ 211h
p8255_ctl equ 213h
data segment
buf db 0 ;相序存储
speed db 0 ;转速控制
direc db 0 ;转向控制
data ends
code segment
assume cs:code,ds:data
start:cli ;关中断
mov ax,cs
mov ds,ax
mov ax,data
mov ds,ax
;-------设置8259芯片中断屏蔽字-----
in al,21h
and al,11011111b ;开放主片IR5中断
out 21h,al
push ds
mov ax,0
mov ds,ax
lea ax,cs:int_proc ;ax指向中断程序入口地址
mov si,35h ;中断类型码35H
add si,si ;35H*4H找到相应中断向量表中的位置
add si,si
mov ds:[si],ax ;中断向量表的IP
push cs
pop ax
mov ds:[si+2],ax ;中断向量表的CS(=0000H)
pop ds
;------8255芯片初始化------;
mov dx,p8255_ctl ;设定A口方式0输出,B、C口方式0输入
mov al,8bh
out dx,al
mov buf,33h ;初始相序33h
;-------8255芯片初始化------;
mov dx,io8253_k ;cnt0产生1000Hz的时钟
mov al,36h
out dx,al
mov dx,io8253_0
mov ax,1000
out dx,al
mov al,ah
out dx,al
mov dx,io8253_k ;cnt1产生0.5Hz的时钟
mov al,76h
out dx,al
mov dx,io8253_1
mov ax,2000
out dx,al
mov al,ah
out dx,al
mov al,buf
mov dx,p8255_a
out dx,al
;-------主程序循环体------;
lop: call delay
cmp direc,0 ;比较direc,决定相序正向输出还是反向输出
je nx0
mov al,buf
ror al,1
jmp nx1
nx0: mov al,buf
rol al,1
nx1: mov dx,p8255_a
out dx,al
mov buf,al
sti
jmp lop
;-------中断服务程序------;
int_proc proc far
push ax
push cx
push dx
mov dx,p8255_b ;读8255B口,修改direc
in al,dx
and al,80h
mov direc,al
mov dx,p8255_b ;再读8255B口,修改speed
in al,dx
and al,7fh
mov speed,al
mov al,20h ;发EOI结束命令
out 20h,al
pop dx
pop cx
pop ax
sti
iret
int_proc endp
;-------延时子程序------;
delay proc
push ax