步进电机角度控制1.docx
《步进电机角度控制1.docx》由会员分享,可在线阅读,更多相关《步进电机角度控制1.docx(16页珍藏版)》请在冰豆网上搜索。
步进电机角度控制1
考试序列号19
论文题目:
步进电机角度控制
(1)
课程名称:
计算机控制技术
学院自动化学院
专业班级
学号
姓名
指导教师
2013年06月25日
一、系统设计说明
1.硬件设计
本次设计要求通过键盘按键实现对步进电机的转动次数和每次转动的角度的控制,并通过数码管显示出来。
本方案中通过按键对步进电机的转动角度进行设定,给各个按键设置不同的键值。
按下按键时,给8255A一个信号设定步进电机下一步的动作。
8086通过8255A的数据总线读取该信号,并作出反应,通过给8255A一系列的指令驱动其工作,从而驱动步进电机和LED显示器。
2.软件设计
显示模块设计说明:
为使显示程序具有通用性和灵活性,在8086内设置一个显示缓冲区,显示缓冲区的每个单元与LED的各位一一对应。
当主程序需要显示,只需将要显示的字符送入显示缓冲区,然后调用显示子程序。
显示子程序的任务则是逐一取出显示缓冲区中的字符、查字形表转换成相应字型码,然后通过字段口输出显示。
显示模块是用四位七段数码管来显示转动次数和每次转动的角度。
给八个按键设置不同的子程序,当按下按键时,根据事先设定好的各个按键对应的转动角度的值输出到数码管进行显示。
步进电机模块设计说明:
在此设计中,采用的是八拍步进电机。
步进电机控制程序就是完成环形分配器的任务,从而控制电动机的转动,以达到控制转动角度和位移的目的。
控制模型可以以立即数的形式一一给出。
对于步进电机模块的程序设计采用循环程序设计方法。
先把转动的次数和角度的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。
首先启动,按下按键选择步进电机的角度,然后读入转动的控制模型驱动步进电机转动。
二、系统原理图(见任务书)
三、设计流程图、
开始
8255初始化
检测是否有N
按键按下
Y
检测是否有转动电位
SET键按下Y器调角度
N
检测STARTY根据保存的N检测C键
键是否按下数据依次转是否按下
动步进电机
NY
检测CLRN保存所调的
键是否按下角度数据
Y
根据保存的
数据依次反
转步进电机
四、源程序
STACKSEGMENT
DB64DUP(?
)
STACKENDS
DATASEGMENT
DATA6DB3FH,06H,5BH,4FH,66H,6DH,07H,7FH,6FH,77H
DATA1DB01H,03H,02H,06H
DATA3DB04H,0CH,08H,09H;正转
DATA11DB00H
DATA2DB00H
ORG0080H
DATA4DB00H,00H,00H,00H;保存所要转的数据
ORG0100H
DUSHUDB3FH,3FH,3FH,3FH;数码管显示的值
DATA44DB02H,03H,01H,09H
DATA55DB08H,0CH,04H,06H;反转
DATA444DB00H;走过4拍的总次数
CISHUDB00H;步进电机所要转的次数
SETSHUDB00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,88H
MOVDX,0606H
OUTDX,AL;初始化
STT:
MOVAL,00H
MOVDX,0600H
OUTDX,AL
NEXT:
MOVDX,0604H
INAL,DX
ANDAL,30H
CMPAL,30H
JNZKEY
CALLXIANSHI
JMPSTT;检测是否有按键按下
KEY:
MOVAL,0F7H
MOVDX,0600H
OUTDX,AL
MOVDX,0604H
INAL,DX
TESTAL,10H;检测SET键是否按下
JNZKEY1
CALLKEY_SET
KEY1:
MOVAL,0BFH
MOVDX,0600H
OUTDX,AL
MOVDX,0604H
INAL,DX
TESTAL,10H;检测START是否按下
JNZKEY2
CALLKEY_START
KEY2:
MOVAL,0EFH
MOVDX,0600H
OUTDX,AL
MOVDX,0604H
INAL,DX
TESTAL,20H;检测CLR键是否按下
JNZSTT
CALLKEY_CLR
JMPSTT
KEY_START:
LEABX,CISHU
MOVAL,[BX]
CMPAL,00H;检测是否有数据保存
JZSTT
LEASI,DATA4
MOVAL,[SI]
MOVAH,00H
A0:
MOVBX,0018H
MULBX
MOVBX,0011H
DIVBX
MOVBL,0FH
DIVBL;计算转多少次4拍
MOVAH,AL
LEADI,DATA444
ADDAL,[DI]
MOV[DI],AL;保存走过4拍的总次数
A1:
LEABX,DATA1
MOVCX,0004H
A2:
MOVAL,[BX]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA2
DECAH
JZA000
A3:
LEABX,DATA3
MOVCX,0004H
A4:
MOVAL,[BX]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA4;电机正转
DECAH
JZA000
JMPA1
RET
A000:
CALLTIME2
LEABX,CISHU
MOVAL,[BX]
DECAL
MOV[BX],AL
JZB3;判断步进电机是否还要继续转
INCSI
MOVAL,[SI]
MOVAH,00H
JMPA0
B3:
JMPSTT
KEY_CLR:
LEABX,DATA444
MOVAL,[BX]
TESTAL,01H
JZB10;计算反转的第一位置
JMPB20
B10:
MOVAX,0000H
LEASI,DATA55
MOVCX,0004H
A20:
MOVAL,[SI]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA20
DECAH
JNZA00
JMPSTT
A00:
LEABX,DATA44
MOVCX,0004H
A30:
MOVAL,[BX]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA30;电机反转
DECAH
JNZB10
JMPSTT
B20:
MOVAX,0000H
LEASI,DATA44
MOVCX,0004H
A200:
MOVAL,[SI]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA200
DECAH
JNZA900
JMPSTT
A900:
LEABX,DATA55
MOVCX,0004H
A300:
MOVAL,[BX]
MOVDX,0604H
OUTDX,AL
CALLXIANSHI
INCBX
LOOPA300
DECAH
JNZB20
JMPSTT
KEY_SET:
MOVDX,0640H
OUTDX,AL;启动AD转换
CALLXIANSHI
INAL,DX
LEASI,DATA2
MOV[SI],AL
MOVAH,00H
MOVBX,18H
MULBX
MOVBX,11H
DIVBX
MOVBL,64H
DIVBL
LEABX,DATA6
XLATDATA6
LEASI,DUSHU
MOV[SI+1],AL;保存数码管要显示的数
MOVAL,AH
MOVAH,00H
MOVBL,0AH
DIVBL
LEABX,DATA6
XLATDATA6
LEASI,DUSHU
MOV[SI+2],AL
MOVAL,AH
LEABX,DATA6
XLATDATA6
LEASI,DUSHU
MOV[SI+3],AL
CALLXIANSHI
MOVAL,0F7H
MOVDX,0600H
OUTDX,AL
MOVDX,0604H
INAL,DX
TESTAL,20H
JNZKEY_SET
JMPB0
RET
B0:
CALLB1
JMPSTT
B1:
PUSHBX
PUSHSI
PUSHDI
LEABX,CISHU
MOVAL,[BX]
INCAL
MOV[BX],AL
LEABX,DATA11
MOV[BX],AL
MOVAH,00H
MOVCX,AX
LEASI,DATA4
B2:
INCSI
LOOPB2
DECSI
LEADI,DATA2
MOVAL,[DI]
MOV[SI],AL
POPDI
POPSI
POPBX
RET
XIANSHI:
PUSHBX;显示子程序
PUSHDX
PUSHAX
LEABX,DUSHU
MOVAL,[BX]
MOVDX,0602H
OUTDX,AL
MOVAL,0BFH
MOVDX,0600H
OUTDX,AL
CALLTIME
INCBX
MOVAL,[BX]
MOVDX,0602H
OUTDX,AL
MOVAL,0DFH
MOVDX,0600H
OUTDX,AL
CALLTIME
INCBX
MOVAL,[BX]
MOVDX,0602H
OUTDX,AL
MOVAL,0EFH
MOVDX,0600H
OUTDX,AL
CALLTIME
INCBX
MOVAL,[BX]
MOVDX,0602H
OUTDX,AL
MOVAL,0F7H
MOVDX,0600H
OUTDX,AL
CALLTIME
POPAX
POPDX
POPBX