当前位置:文档之家› 微机原理接口技术综合实验 步进电机

微机原理接口技术综合实验 步进电机

;*步进电机*;
;*******************************;
DATA SEGMENT*****数据段定义开始*****
P55AEQU 288H ;8255APORTINPUT
P55CEQU 28AH ;8255CPORTOUTPUT
P55CTL EQU 28BH ;8255 COUTRL PORT
OUT DX,AL
MOV BUF,33H;***************************************
代码解释:最终目的是完成OUTDX,AL操作,即把控制字90H送到8255的控制口所在地址“0C800h-0280h+28BH”里。
2)、考虑到人机互动,这里还要在程序运行最开始输出一些提示信息,我这里用到的是DOS中断中INT 21的09号功能,关键代码如下:
图1
步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
如图2所示:本实验使用的步进电机用直流+5V电压,每相电流为0.16A,电机线圈由四相组成:
即:φ1(BA)
φ2(BB)
φ3(BC)
φ4(BD)
驱动方式为二相激磁方式,各线圈通电顺序如下表。
MOV BUF,33H******控制信息初始化******
OUT1:MOV AL,BUF****控制信息为00110011****
MOV DX,P55C ***从C端口读出控制信息****
OUT DX,AL
PUSHDX ****控制信息入栈****
MOV AH,06H ****调用INT21控制台I/O输入**
JZ ZX0;判断K7是否为0,如果为0则跳转到ZX0处,电机顺时针转动
JMP NX0;如果不为0则跳转到NX0处,电机逆时针旋转。
K1:MOV BX,18H
JMP SAM
K2:MOV BX,20H
JMP SAM
K3:MOV BX,40H
JMP SAM
K4:MOV BX,80H
JMP SAM
K5:MOV BX,0C0H
DATA ENDS*****数据段定义结束*****
CODE SEGMENT*****代码段定义开始*****
ASSUME CS:CODE,DS:DATA*****数据段主体开始*****
START:MOV AX,CS
MOV DS,AX*****DS=CS*****
MOV AX,DATA
MOV DS,AX*****DS=DATA*****
K1:MOV BL,18H
JMP SAM
K2:MOV BL,20H
JMP SAM
K3: MOV BL,40H
JMP SAM
K4:MOV BL,80H
JMP SAM
K5:MOV BL,0C0H
JMP SAM
K6:MOV BL,0FFH
JMP SAM
ZX0: CALL DELAY
MOV AL,BUF****控制信息00110011****
1)、8255的方式控制字如下图所示:
由上图可知:8255方式控制字为10010000B=90H
知道了8255的控制字之后就可以给8255初始化了,初始化的关键代码如下
MOV DX,P55CTL;***************************************
MOV AL,90H;8255初始化:A口输入,C口输出。
JMP SAM
K6:MOV BL,0FFH
JMP SAM
第二部分:
DELAY PROC NEAR
DELAY1: MOV CX,0FFFFH;05A4H
DELAY2: LOOP DELAY2
DEC BL
JNZ DELAY1
RET
DELAY ENDP
代码解释:对应于按键K0~K6寄存器BL都有不同的值。根据BX值的不同通过指令DEC BX和指令JNZ DELAY1可以得到不同长度的延时,由不同长度的延时可以得到不同频率的输入脉冲,从而可以控制电机的转速。
6)、电机旋转方向控制的关键代码如下:
ZX0:CALL DELAY
MOV AL,BUF;AL=0011 0011
ROR AL,1;AL=1001 1001;循环右移,正转
MOV BUF,AL;BUF=1001 1001
JMP OUT1
NX0:CALL DELAY
MOV AL,BUF;AL=0011 0011
DELAY1: MOV CX,OFFFFH;05A4H
DELAY2: LOOP DELAY2
DEC BL
JNZ DELAY1
RET
DELAY ENDP*****延时子程序结束******
CODE ENDS*****代码段定义结束*****
END START*****主体程序结束*****
2、程序关键代码解释:
JNZ K6
STOP:MOV DX,P55c****程序第一次执行结束****
MOV AL,0FFH
JMP OUT1*****循环跳转*****
K0:MOV BL,10H
SAM:TEST AL,80H
JZ ZX0****检测K7是否被按下,否跳转到ZXO**
JMP NX0*****K7=1被按下跳转到NXO*****
MOV DX,OFFSET MES;************************
MOV AH,09;在屏幕上显示提示信息
INT 21H;************************
代码解释:把首地址为MES的字符串显示在屏幕上。
3)、有显示就要有输入,这里的输入用DOS调用里的INT21的06号功能,关键代码如下:
微机控制步进电机调速系统
一、实验目的
1、了解计算机控制步进电机原理
2、掌握步进电机正转反转设置方法。
3、掌握步进电机调速工作原理及程序控制原理。
二、设备与环境
TPC-2003A
微机。
Vc++编译器。
三、实验内容
硬件接线图参考实验指导书。
软件编程在TPC-2003A自带的VC++编译环境下使用。
在通用VC++下编程,需要拷贝相关的库文件。
ROL AL,1;AL=0011 0110;循环左移,反转
MOV BUF,AL;BUF=0011 0110
JMP OUT1
代码解释:根据K7键是否按下,程序分别跳转到ZX0和NX0,然后对AL分别进行循环左移和循环右移,通过把循环移动后AL的状态输出到8255的A口来实现电机的正转或反转。
教 师 评 价
ROR AL,1***控制信息右移电机正转***
MOV BUF,AL****控制信息10011001****
JMP OUT1
NX0:CALL DELAY
MOV AL,BUF
ROL AL,1***控制信息左移电机反转***
MOV BUF,AL
JMP OUT1
DELAY PROC NEAR*****延时子程序开始******
MOVAH,06h;调用INT 21的键盘输入功能**
MOXDL,0FFH
INT 21H;****ANY KEY PRESSED*******
代码解释:这里的指令:MOXDL,0FFH 表示此功能为输入,即开关K0~K7的输入。
4)、接下来程序要根据K0~K7的开关状态来进行相应的跳转动作,这里对开关状态判断指令比较关键,现列出其关键的代码段如下:
BUF DB 0
MES DB 'K0-K6 ARE SPEED CONTYOL',0AH,0DH
DB 'K6 IS THE LOWEST SPEED ',0AH,0DH
DB 'K0 IS THE HIGHEST SPEED',0AH,0DH
DB 'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$'
****检测输入值来自那一个端口****
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
用汇编语言编写控制程序需注明原理。
四、实验结果及分析
按原理图连接线路,利用8255输出脉冲序列,开关K0~K6控制步进电机转速,K7控制步进电机转向。8255 CS接288H~28FH。PC0~PC3接BA~BD;PA口接逻辑电平开关。
编程:当K0~K6中某一开关为“1”(向上拨)时步进电机启动。K7向上拨电机正转,向下拨电机反转。
JNZ K6;根据输入跳转
代码解释:首先指令IN AL,DX将开关的状态读入到AL中然后用TEST指令将AL中的内容与另一个数相与,判断相与之后的结果是否为0 如果不为零则发生相应的跳转(JNZ)去执行跳转之后的指令。
5)、跳转之后的指令的关键代码如下:
第一部分:
K0:MOV BX,01F01H
SAM:TEST AL,80H;AL与80H相与,用于判断K7是否为0
MOVDL,0FFH
INT 21HANY KEY PRESSED
POPDX *****控制信息出栈****
JE IN1***判断开关K0~K7是否被按下,是则跳转**
MOV AH,4CH
INT 21H***返回DOS****
相关主题