大连理工大学本科设计报告
(计算机原理接口实验综合设计)
题目: 步进电机控制系统设计
课程名称: 计算机原理实验
学院(系): 电信
专 业: 自动化
班 级: 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 主程序中主要变量说明
6 系统软件中各个子程序的功能描述
7 主程序程序流程图
8 程序清单
io8255_A EQU 200H
io8255_B EQU 201H
io8255_K EQU 203H
io8253_0 EQU 270H
io8253_1 EQU 271H
io8253_K EQU 273H
DATA SEGMENT
SPEED DW 0280H,0380H,0480H,05800H,0680H,0780H,0880H
SD DW 0300H ;默认转速
FLAG DB ?
BUF DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
CLI ;关中断
MOV FLAG,00H ;标志位置一
MOV AX,DATA
MOV DS,AX
MOV ES,AX
IN AL,21H ;设置中断屏蔽字
AND AL,11011111B
OUT 21H,AL
PUSH DS ;设置中断向量表
MOV AX,0
MOV DS,AX
LEA AX,CS:INT_PROC
MOV SI,35H
ADD SI,SI
ADD SI,SI
MOV DS:[SI],AX
PUSH CS
POP AX
MOV DS:[SI+2],AX
POP DS
MOV DX,io8255_K ;对8255写控制,A口输出,B口输入
MOV AL,82H
OUT DX,AL
MOV BUF,33H ;步进电机初始相位
MOV DX,io8253_K ;计数器0,分频
MOV AL,00110101B
OUT DX,AL
MOV DX,io8253_0
MOV AX,10000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,io8253_K ;0.5S脉冲
MOV AL,01110111B
OUT DX,AL
MOV DX,io8253_1
MOV AX,200
OUT DX,AL
MOV AL,AH
OUT DX,AL
OUT1:
MOV AL,BUF ;写相位
MOV DX,io8255_A
OUT DX,AL
STI ;开中断
LLL:
CALL DELAY ;延时
CMP FLAG,01H
JZ NEX0
MOV AL,BUF
ROR AL,1
JMP NEX1
NEX0:
MOV AL,BUF
ROL AL,1
NEX1:
MOV DX,io8255_A
OUT DX,AL
MOV BUF,AL
JMP LLL
DELAY PROC ;延时函数
PUSH AX
PUSH CX
PUSH DX
MOV DH,6
X1:
MOV CX,SD
X2:
LOOP X2
DEC DH
JNZ X1
POP DX
POP CX
POP AX
RET
DELAY ENDP
INT_PROC PROC FAR ;中断服务子程序
PUSH AX ;保护现场
PUSH CX
MOV DX,io8255_B ;读8255B口输入
IN AL,DX
CMP AL,80H ;通过判断输入获取FLAG和SD(cx)的值
JB CMP20
MOV FLAG,01H
JNZ CMP10
MOV SD,0300H
JMP EINT
CMP10:
CMP AL,81H
JNZ CMP11
MOV SI,WORD PTR SPEED[0]
MOV SD,SI
JMP EINT
CMP11:
CMP AL,82H
JNZ CMP12
MOV SI,WORD PTR SPEED[2]
MOV SD,SI
JMP EINT
CMP12:
CMP AL,84H
JNZ CMP13
MOV SI,WORD PTR SPEED[4]
MOV SD,SI
JMP EINT
CMP13:
CMP AL,88H
JNZ CMP14
MOV SI,WORD PTR SPEED[6]
MOV SD,SI
JMP EINT
CMP14:
CMP AL,90H
JNZ CMP15
MOV SI,WORD PTR SPEED[8]
MOV SD,SI
JMP EINT
CMP15:
CMP AL,0A0H
JNZ CMP16
MOV SI,WORD PTR SPEED[10]
MOV SD,SI
JMP EINT
CMP16:
MOV SI,WORD PTR SPEED[12]
MOV SD,SI
JMP EINT
CMP20:
MOV FLAG,00H
CMP AL,00H
JNZ CMP21
MOV SD,0300H
JMP EINT
CMP21:
CMP AL,01H
JNZ CMP22
MOV SI,WORD PTR SPEED[0]
MOV SD,SI
JMP EINT
CMP22:
CMP AL,02H
JNZ CMP23
MOV SI,WORD PTR SPEED[2]
MOV SD,SI
JMP EINT
CMP23:
CMP AL,04H
JNZ CMP24
MOV SI,WORD PTR SPEED[4]
MOV SD,SI
JMP EINT
CMP24:
TEST AL,08H
JNZ CMP25
MOV SI,WORD PTR SPEED[6]
MOV SD,SI
JMP EINT
CMP25:
CMP AL,10H
JNZ CMP26
MOV SI,WORD PTR SPEED[8]
MOV SD,SI
JMP EINT
CMP26:
CMP AL,20H
JNZ CMP27
MOV SI,WORD PTR SPEED[10]
MOV SD,SI
JMP EINT
CMP27:
MOV SI,WORD PTR SPEED[12]
MOV SD,SI
EINT:
MOV AL,20H ;发EOI命令
OUT 20H,AL
POP CX
POP AX
STI
IRET
INT_PROC ENDP
CODE ENDS
END START
9 系统调试运行结果说明、分析所出现得问题,设计体会与建议
软件环境:
硬件环境:
设计语言:汇编语言
调试过程中,在设计转速环节刚开始不清楚怎样引入速度值,后来经过多次试验以及同学探讨,终于明白可以通过改变CX的值而改变loop循环的次数,从而实现对延时的不同控制,得以完成实验。
6 结论及设计体会
微机原理的学习使我对对汇编语言有了初步的了解。并且通过本实验让我对汇编语言产生很大的兴趣,让我掌握了汇编编程的总体思路,本实验利用微机控制步进电机的转向,在实验过程中遇到的问题告诉我们理论的编程要结合实际的电动机技术指标调试延迟时间。从这次实验中并让我进一步的学习到了8255的应用和掌握了8255 的初始化和其编程。对我们以后的工作和学习起到的积极的作用。
参考文献
**************************************************************
第二篇:微机原理课程步进电机设计报告
目 录
摘要:........................... 3
1 引言........................... 3
2 系统设计....................... 3
2.1系统的基本方案.............. 3
2.2 各模块的方案的选择和功能简述. 3
2.3 最终总体方案................ 4
2.4系统各模块的最终方案图....... 4
2.5 步进电机的工作原理.......... 4
2.6 8255的应用设计............. 5
2.7 转速的控制.................. 6
2.8 软件程序流程图.............. 7
2.9 系统的总体硬件原理图........ 8
3总结与致谢...................... 8
附件............................. 9
步进电机的微机控制
摘要:
微机原理是自动化专业和计算机专业的基础专业课,是对计算机系统和微处理器以及汇编语言、外围芯片的研究和学习。本设计就是基于8086CPU的微机控制,利用汇编语言,外围芯片8255的综合应用实例,连上硬件驱动电机电路,实施对步进电机的控制。通过此课程设计巩固了所学的知识,以及对汇编、C语言的温习和升华,同时是对我们动手、创新、独立思考问题能力的培养,为将来的计算机知识的进一步学习打下坚实的基础。
关键字:8086CPU 汇编程序 8255 驱动
1 引言
在数控系统中,电机是控制系统的控制终端,所有的控制工作的目的就是为了控制电机的转速和方向。本文主要介绍一种控制步进电机的简单的系统搭建,和对电机的控制方法进行了论述。包括硬件接口的设计,汇编控制程序的编写,此方法简单,方便,通俗易懂。
2 系统设计
2.1系统的基本方案
PC机的控制模块,转速控制模块,转向控制模块,驱动模块
2.2 各模块的方案的选择和功能简述
由于本设计是基于星研环境下的汇编,以及给定实验室的实验仪器,PC机部分已经给定,可以直接利用。
转向控制模块:在设计当中,利用《微机原理和接口技术》所学知识,用8255外围接口芯片,通过对PC口的输出操作,实现对电机正反转的控制。
转速控制模块:在做8255并口实验的时候,利用对8255 A口或B口进行输入操作,检测各个开关的状态,而每个开关代表不同的速度,可以加速和减速。
驱动电路部分:经过查询,有两种方案可以进行驱动。
方案一:利用驱动芯片L297/L298芯片。SGS公司的L297单片步进电机控制集成电路适用于双极性两相步进电机或四相单极性步进电机的控制,与两片H桥式驱动芯片L298组合,组成完整的步进电机固定斩波频率的PWM恒流斩波驱动器。采用L297和L298实现的步进电机驱动,该电路为固定斩波频率的PWM恒流斩波驱动方式,适用两相双极性步进电机,最高电压46V,每相电流可达2A。采用此设计的步进电机驱动系统,在驱动二相或四相混合式步进电机时运动平稳,速度快,噪音低,控制精高,而且可选整步半步驱动。外观采用铝镁合金,散热性好,价格低廉,可广泛应用于需要驱动电流小于2A的混合式两相或四相步进电机的系统中。
方案二:利用驱动芯片ULN2003A。ULN2003A是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。 输入5VTTL电平,是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。伺服电机、步进电机驱动等电路中。
最终我选择了方案二。这两种驱动电路的不同之处在于驱动能力的不同,ULN2003的驱动电路只有500mA,可以驱动一些小型的电机,而298,297可以带动2A以上的电机。因为虽然方案一有很多的优点,但是要控制PWM斩波,调节占空比,对我来说有点困难,而且在实验仪器上的步进电机的功率不大,且仪器上用的ULN2003A驱动,用方案二完全可以完成实验,鉴于时间问题,只能在实验仪器上搭建硬件电路,综合以上考虑,选择了方案二。
2.3 最终总体方案
以PC机为信息处理的核心,设计一块以可编程外围芯片8255为主体的硬件电路另加上驱动电机部分的ULN2003A芯片驱动,配合PC机对软件的控制处理,实现对电机转速、方向、加速和减速的控制。
2.4系统各模块的最终方案图
系统设计方案结构如图1所示
图1 系统设计总体方案
2.5 步进电机的工作原理
步进电机是将电脉冲信号转换成角位移或线位移的机电式元件,结构图如图2。这次试验仪上的电机是四相六线的。分A、B、C、D四相,其工作方式分为单四拍(A→B→C→D→A)、双四拍(AB→BC→CD→DA→AB)和单双八拍(A→AB→B→BC→C→CD→D→DA→A)。根据对各个相组合进行依次通电,便可以获得相应的节拍。本文采用的是双四拍的节拍信号。如图2所示为电机内部结构.
图2 电机内部链接
正转控制模型
反转控制模型
2.6 8255的应用设计
可编程外围接口芯片8255有三个8位的输入输出端口A、B、C,有两种控制字:一类是定义各端口输入输出的工作方式,叫方式选择控制字。另一种是控制端口C的任一位的置位或复位操作,叫置位复位控制字。
本设计利用8255的方式选择控制字对其进行操作,A作输入端,C作输出端,工作于方式0:基本输入输出方式。A接在控制转速的开关上,C作输出操作A输入的各种响应。K0~K7为不同的速度控制键,其中K0为最低速度,K6为最高速度,K7控制电机的正反转,K7为0是反转,为1代表正转。硬件设计如图3所示
图3 8255硬件连接设计
2.7 转速的控制
控制步进电机的速度,实际上是对控制系统发出的脉冲频率或换相的周期,即在升速的过程中使输出的脉冲频率逐渐增加;在减速的过程中使输出的脉冲频率逐渐减少。脉冲信号的频率可有软件控制和硬件控制。本文中采用了软件控制法,利用时间延迟的方法,利用不同的开关,写入不同的的延迟时间,表示不同的速度,可以加速,可以减速。
部分程序如下:
;定义延时子程序:延时程序是由两曾循环程序构成的BL是外曾循环的次数 CX是内层循环的次数延迟时间长则脉冲频率小转速慢
DELAY PROC NEAR ;
DELAY1: MOV CX,0FFH
MOV BL,10H
DELAY2: LOOP DELAY2
DEC BL
JNZ DELAY1
RET
DELAY ENDP
2.8 软件程序流程图
图4软件流程图
2.9 系统的总体硬件原理图
3总结与致谢
微机原理这门课程学完后我有很大的收获,对汇编语言有了初步的了解。并且通过本实验让我对汇编语言产生很大的兴趣,让我掌握了汇编编程的总体思路,本实验利用微机控制步进电机的调速,在实验过程中遇到的问题告诉我可以通过改变CX的赋值来控制电们理论的编程要结合实际的电动机技术指标调试延迟时间和实验箱的电机的转动速度。CX越小电动机的转动速度越大。也可以通过改变BL的值来改变单个开关的速度。我们把CX称为总开关,BL成为分开关。从而达到从K0到K6 速度逐渐变快,而K7控制电动机的反转。当K7闭合时 电动机反转。从这次实验中并让我进一步的学习到了8255的应用和掌握了8255 的初始化和其编程。对我们以后的工作和学习起到的积极的作用。
这次设计同时督促我查了许多的资料,让我学到了很多的知识,
附件
部分汇编程序
DATA SEGMENT
COM_ADD DW 00F3H ;控制口偏移量
PA_ADD DW 00F0H ;PA口偏移量
PB_ADD DW 00F1H ;PB口偏移量
PC_ADD DW 00F2H ;PC口偏移量
BUF DB 0 ;定义一个字节数据(用来存入开关的状态)
MES DB 'K0-K6 ARE SPEED CONTYOL',0AH,0DH;写入一些文字用来描述
DB 'K6 IS THE HIGHEST SPEED ',0AH,0DH ;各个开关所代表的速度
DB 'K0 IS THE LOWEST SPEED',0AH,0DH ;K0为最低速,K6为最高速
DB 'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$';K7为方向键
DATA ENDS
;2.代码段代码
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX ;程序的初始化
MOV DX,OFFSET MES
MOV AH,09
INT 21H ;显示各个开关的信息
MOV DX,COM_ADD
MOV AL,92H ;(92H=10010010B,为控制字)
OUT DX,AL ; C口做输出,A口做输入
;送33H到A口输出 给后面电机的正反转提供初只 调用BIOS功能的INT16的1号功能,判断是否按下 如果有则返回DOS 如果没有判断开关的状态。
MOV BUF,33H
OUT1: MOV AL,BUF
MOV DX,PC_ADD
OUT DX,AL ;间接寻址获得AL的值
PUSH DX
MOV AH,06h
MOV D1,0ffh
INT 21H ;检查是否有键按下
POP DX
JE IN1 ;有键按下就停止,没有则转向IN1去执行
MOV AH,4CH
INT 21H
IN1: MOV DX,PA_ADD
IN AL,DX ;获得各个开关的状态
TEST AL,01H
JNZ K0
TEST AL,02H
JNZ K1
TEST AL,04H
JNZ K2
TEST AL,08H
JNZ K3
TEST AL,10H
JNZ K4
TEST AL,20H
JNZ K5
TEST AL,40H
JNZ K6 ;检查各个开关的状态,分别转向相应的程序
STOP: MOV DX,PA_ADD
MOV AL,0FFH
JMP OUT1 ;置停止信息并转向OUT1
;判断完状态则跳转到执行的程序 献给BL复制 实现岩石时间 控制转速 然后判断K7 的状态是1 还是0 。
K0: MOV BL,10H
SAM: TEST AL,80H;继续判断K7是否为0
JZ ZX0 ;为0就转向ZX0(循环右移程序)
JMP NX0 ;为1就转向NX0(循环左移程序)
K1: MOV BL,2FH ;BL为延时子程序的内层循环计数器
JMP SAM
K2: MOV BL,4FH
JMP SAM
K3: MOV BL,6FH
JMP SAM
K4: MOV BL,8FH
JMP SAM
K5: MOV BL,0AFH
JMP SAM
K6: MOV BL,0CFH
JMP SAM
ZX0: CALL DELAY ;调用延时子程序
MOV AL,BUF
ROR AL,1
MOV BUF,AL
JMP OUT1 ;循环右移
NX0: CALL DELAY;调用延时子程序
MOV AL,BUF
ROL AL,1
MOV BUF,AL
JMP OUT1 ;循环左移
;延时程序是由两曾循环程序构成的 BL 是外曾循环的次数 CX是内层循环的次数严实时间长则脉冲频率小 转速慢
DELAY PROC NEAR ;定义延时子程序
MOV CX,0FFH
DELAY2: LOOP DELAY2
DEC BL
JNZ ST
ST: RET
DELAY ENDP
CODE ENDS
END START