步进电机调速系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机调速系统
一.设计目的
1.掌握步进电机的工作原理及控制方法
2.了解控制步进电机转速的原理
3.进一步掌握微机接口中的相关知识
4.熟悉设计系统的方法
二.设计要求
1.以8086极其支持电路为基础,配必要的存储器、定时系统、控制接口、驱动电路、LED显示接口等构成微机
控制的电机调速系统。

2.对步进电机的工作原理进行分析,通过“启、停、转速”
等按键命令,实现对电机的平稳启动、停止和不同
速率上的匀速转动,并通过LED显示转速;
3.方案设计中要突出信号的变换、驱动电路的设计和步进电机控制程序的编制;
三.设计思路
(1)步进电机基本原理
所谓步进,就是指每给步进电机一个递进脉冲,步进电机各绕组的通电顺序就改变一次,电机就回转动一次。

使用键盘控制方式能对步进电机的转动方向、速度和角度进行调节。

(2)步进电机激励方式
步进电机有三相激励,也有四相激励的。

现以两相四拍
为例说明。

2相激励。

这种方式的工作波形如图所示。

它可看作是一种周期信号,每个周期可以为四个状态。

显然,任何时刻步进电机都有两相绕组有电流。

每一状态,步进电机走一步。

四.设计内容
1.程序流程图
2. 源程序
P8255_A EQU 9800H
P8255_B EQU 9801H
P8255_C EQU 9802H
P8255_MODE EQU 9803H
DELAY_SET EQU 07FH ;延时常数MY_STACK SEGMENT PARA 'STACK'
DB 100 DUP(?)
MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
BUF DB ?
KVL DB 2 DUP(?) ;击键次数备份,键值PT DB ? ;显示缓冲区指针DSBUF DB 4 DUP(?) ;显示缓冲区
KD DB ? ;数码管数据信号
KH DB ? ;键盘行信号
KL DB ? ;键盘列信号、数码管位选信号
KV A DB ? ;键值备份
KVB DB ? ;在闪烁子程序中保存显示器原有的数据
COUNT2 DB ? ;击键次数
COUNT4 DB ? ;连续击键次数
KTB DB 48H ;0 键码
DB 44H ;1
DB 34H ;2
DB 24H ;3
DB 42H ;4
DB 32H ;5
DB 22H ;6
DB 41H ;7
DB 31H ;8
DB 21H ;9
DB 11H ;A
DB 12H ;B
DB 14H ;C
DB 18H ;D
DB 28H ;E
DB 38H ;F
DB 00H ;10
SGTB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H
DB 0F8H,80H,90H,88H,83H,0C6H,0A1H
DB 86H,8EH,0FFH,8CH,89H,8EH,0BFH,0F7H
; CHAR DB '
MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE'
MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK START: MOV AX,MY_DATA
MOV DS,AX
SSS: MOV DX,P8255_MODE
MOV AL,81H ;写8255控制字A、B输出,C输入
OUT DX,AL
START1: MOV BX,OFFSET DSBUF
MOV PT,BL
MOV DSBUF,15H ;_
MOV DSBUF+1,10H ;空格
MOV DSBUF+2,10H
MOV DSBUF+3,10H
;
START2: CALL BLINK3 ;键盘扫描、显示子程序、光标闪动
START3: CALL CHAG ;转数字键处理程序; CALL DELAY
JMP START2 ;转下一轮处理程序
MY_PROC ENDp
CHAG PROC NEAR
MOV BH,00H
MOV BL,PT
MOV AL,COUNT4
MOV [BX],AL ;键值送到显示缓冲区中
CMP BL,OFFSET [DSBUF+3]
JNZ CHAG2
mov BL,OFFSET DSBUF
MOV PT,BL
CHAG1: RET
CHAG ENDp
CHAG2: INC BL
MOV PT,BL
JMP CHAG1
BLINK PROC NEAR
MOV CX,100H ;熄灭显示器时间常数
MOV BH,00H
MOV BL,PT
MOV Al,[BX]
MOV KVB,AL
;保存原显示器数据
MOV AL,10H ;填入熄灭显示器的码
MOV [BX],AL
BLINK1: CALL DSKS ;键盘扫描
BLINK2: CMP COUNT4,10H
JNZ BLINK6 ;键按下返回
LOOP BLINK1 ;没键按下继续循环
MOV AL,KVB
MOV BL,PT
MOV [BX],AL
BLINK3: MOV CX,150H ;点亮显示器时间常数BLINK4: CALL DSKS
BLINK5: CMP COUNT4,10H
JNZ BLINK7 ;键按下返回
LOOP BLINK4 ;没键按下继续循环
JMP BLINK
BLINK6: MOV AL,KVB ;恢复原显示器中的数据MOV BL,PT
MOV [BX],AL
BLINK7: RET
BLINK ENDp
DSKS PROC NEAR ;键盘扫描处理程序
PUSH CX
CALL DSUP ;显示
CALL KBS ;键盘扫描
MOV AL,KVL+1 ;取上次按键键值
CMP KV A,AL ;与本次键值相比
MOV AL,KVL ;按键次数
MOV COUNT2,AL
MOV AL,KVL
MOV COUNT4,AL
JZ DSKS1
MOV COUNT2,0FFH ;不相等,重新赋值
MOV COUNT4,0FFH
DSKS1: DEC COUNT4
CMP COUNT4,0F8H ;为E0?
JZ DSKS3
CMP COUNT4,0EH ;为0E?
JZ DSKS3
CMP COUNT4,00H ;为00?
JZ DSKS2
MOV COUNT4,10H ;赋值
DEC COUNT2
JMP DSKS4
DSKS2: MOV COUNT4,0fH ;按下键时间足够长则为连续击键
DSKS3: MOV AL,COUNT4
MOV COUNT2,AL
MOV AL,KV A
MOV COUNT4,AL
DSKS4: MOV AL,COUNT2
MOV KVL,AL
MOV AL,KV A
MOV KVL+1,AL ;备份键值
MOV AL,COUNT4
POP CX
RET
DSKS ENDp
DSUP PROC NEAR
PUSH CX
MOV CX,04H ;显示器个数
MOV KL,01H ;选中的显示器
MOV BX,OFFSET DSBUF
DSUP2: MOV AL,00H
MOV DX,P8255_B ;关闭显示器
OUT DX,AL
MOV AL,[BX] ;取显示缓冲区中的数据
PUSH BX
MOV AH,00H
MOV DI,AX
MOV BX,OFFSET SGTB ;编码
MOV AX,[BX+DI]
MOV AH,00H
POP BX
MOV DX,P8255_A ;送显示器显示
OUT DX,AL
INC BX
MOV AL,KL
MOV DX,P8255_B ;送位选信号
OUT DX,AL
ROL AL,1
MOV KL,AL
CALL DELAY ;下一位
PUSH CX
MOV CX,-1
LOOP $
POP CX
LOOP DSUP2
POP CX
MOV AL,00H
MOV DX,P8255_B ;关闭显示器
OUT DX,AL
RET
DSUP ENDp
KBS PROC NEAR ;键盘扫描程序
MOV DX,P8255_A ;清显示器
MOV AL,0FFH
OUT DX,AL
MOV CX,04H ;送列数
MOV KL,0FEH ;扫描列初始值KBS1: MOV AL,KL
MOV DX,P8255_B ;逐列清零
OUT DX,AL
SAL AL,1
MOV KL,AL
MOV DX,P8255_C ;读行信号
IN AL,DX
NOT AL
AND AL,0FH
CMP AL,00H ;是否有键按下
JNZ KBS2
LOOP KBS1 ;没键扫描下一列KBS2: CMP AL,0C0H
JMP K0
CMP AL, 0F9H
JMP K1
CMP AL, 0A4H
JMP K2
CMP AL ,0B0H
JMP DSUP2
K0:MOV BL,18H
CALL DELAY
MOV AL,BUF
ROR AL,1
MOV BUF,AL
JMP DSUP2
K1:MOV BL,20H
CALL DELAY
MOV AL,BUF
ROL AL,1
MOV BUF,AL
JMP DSUP2
K2:MOV BL,30H
CALL DELAY
MOV AL,BUF
ROR AL,1
MOV BUF,AL
JMP DSUP2
MOV BX,CX
MOV CX,04H ;拼装键号
SAL BX,CL
MOV CX,BX
OR AL,CL
MOV KV A,AL
MOV DI,10H ;键盘个数
MOV BX,OFFSET KTB
KBS3: MOV AL,[BX+DI]
CMP AL, KV A ;计算键值,无键按下返回00H
JNZ KBS5
KBS4: MOV AX,DI
MOV KV A,AL ;保存键值
CALL BREAK
RET
KBS5: DEC DI
MOV AX,DI
CMP AL,00H
JNZ KBS3
JMP KBS4
KBS ENDp
DELAY PROC NEAR ;延时程序
PUSHF
PUSH DX
PUSH CX
MOV DX,DELAY_SET
D1: MOV CX,-1
D2: DEC BL
DEC CX
JNZ D2
DEC DX
JNZ D1
POP CX
POP DX
POPF
RET
DELAY ENDp
BREAK PROC NEAR ;按任意键退出
PUSHF
PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN: POP DX
POP AX
POPF
RET
BREAK ENDP
MY_CODE ENDS
END START
五.运行结果
当按下键盘上的0键时,电机开始转动,当按下键盘上的1键时,电机开始正向转动,当按下键盘上的2键时,电机开始反向转动,当按下键盘上的3键时,电机停止转动。

当键盘上有键按下时,对应的数值轮流显示在四个数码管上。

六.心得体会
通过这两周的硬件实习,我从中学到了很多东西。

在刚开始
实习时,我首先学会了怎样使用PROTEL 9E这个软件工具。

从查找芯片到联线,我现在已经很熟悉了;其次,我对计算机组成与接口技术这门可又进行了进一步的学习,掌握了8255的各种工作方式及其应用知道怎样在系统接口实验单元上构造实验电路。

从一开始的调试到最终运行成功,这中间遇到了不少困难,在老师的指点下解决了问题,从而我学到了很多。

但是由于时间等一些问题,最终并没有达到老师的要求。

总的来说,实验中我还是有很多收获的。

为今后打下了牢固的基础。

相关文档
最新文档