实验五-步进电机控制(1).doc
- 文档编号:593298
- 上传时间:2023-04-29
- 格式:DOC
- 页数:18
- 大小:547KB
实验五-步进电机控制(1).doc
《实验五-步进电机控制(1).doc》由会员分享,可在线阅读,更多相关《实验五-步进电机控制(1).doc(18页珍藏版)》请在冰点文库上搜索。
实验五步进电机控制
一、实验目的与要求
1、了解步进电机的基本原理,掌握步进电机的转动编程方法
2、了解影响电机转速的因素有那些
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
编写程序:
使用G5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在G5区的数码管上。
四、控制原理
步进电机的驱动原理是通过它每相线圈的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲来控制,所以调节脉冲的频率便可改变步进电机的转速,微控制器最适合控制步进电机。
另外,由于电机的转动惯量的存在,其转动速度还受驱动功率的影响,当脉冲的频率大于某一值(本实验为f.>100hz)时,电机便不再转动。
实验电机共有四个相位(A,B,C,D),按转动步骤可分单4拍(A->B->C->D->A),双4拍(AB->BC->CD->DA->AB)和单双8拍(A->AB->B->BC->C->CD->D->DA->A).
五、程序框图
N
Y
N
Y
N
N
N
N
0->需要刷新显示标志
1->步进电机未转动过标志
1->转动方向标志(1:
表示顺时针方向)
33H->下次送给步进电机值
5->步进电机转速
初始化8255(PC口输出)
初始化8253(计数器T0设置在模式2状态,BCD码计数,CLK0/210)
初始化8259(允许8253中断)
初始化8253中断向量
初始化显示缓冲区:
(数码管第8位:
0,顺时针方向;5、7位消隐;6位:
转速;
1、2、3、4位:
0,表示连续转动,其他值表示需要转动的步数)
调用显示子程序
有键按下
需要刷新显示标志=1
0->需要刷新显示标志
调用步数调整子程序
关中断(终止步进电机转动)
数码管的1、2、3位->2、3、4位
键值送给数码管的第一位
调用改变转向子程序
键值>9
键值=0AH
调用增速子程序
调用减速子程序
调用启动步进电机子程序
Y
键值=0BH
键值=0CH
键值=0DH
开始
Y
Y
Y
改变方向子程序:
Y
Y
N
N
Y
开始
转动方向标志=0
91H->下次送给步进电机值
下次送给步进电机值循环右移二次
1->转动方向标志
0->送给数码管的第7位
步进电机未转动过标志
33H->下次送给步进电机值
下次送给步进电机值循环左移二次
0->转动方向标志
1->送给数码管的第7位
步进电机未转动过标志
返回
启动步进电机子程序:
Y
N
Y
开始
0->步进电机未转动过标志
取转动步数
取转速对应的延时值(转速延时)
初始转速延时1=初始转速延时
转速延时<50
初始转速延时=50
返回
开中断
初始转速延时=转速延时
增速子程序:
Y
N
开始
转速=11
转速+1
转速送给数码管第5位
返回
减速子程序:
N
Y
开始
转速=0
转速-1
转速送给数码管第5位
返回
定时中断程序:
N
N
Y
N
N
N
Y
Y
N
Y
初始转速延时1=转速延时
初始转速延时-1=0
时
初始转速延时1-1
初始转速延时=初始转速延时1
1-1
转动方向标志=0
时
下次送给步进电机值循环右移一次
1-1
转动步数=0
时
1->需要刷新显示标志转动步数减一
1-1
转动步数=0
时
关中断
清中断标志
开始
下次送给步进电机值循环左移一次
1-1
返回
下次送给步进电机值->8255的PC口(控制步进电机转动一步)
Y
六、实验原理图
七、实验步骤
1、主机连线说明:
E1区:
A、B、C、D
——
B4区:
PC0、PC1、PC2、PC3
E5区:
CLK
——
B2区:
2M
E5区:
CS、A0
——
A3区:
CS5、A0
E5区:
A、B、C、D
——
G5区:
A、B、C、D
B3区:
CS、A0
——
A3区:
CS1、A0
B3区:
INT、INTA
——
ES8688:
INTR、INTA
C5区:
CS(8253)、A0、A1
——
A3区:
CS2、A0、A1
C5区:
GATE0
——
C1区:
VCC
C5区:
CLK0
——
B2区:
1M
C5区:
OUT0
——
B3区:
IR0
B4区:
CS(8255)、A0、A1
——
A3区:
CS3、A0、A1
2、调试程序,查看运行结果是否正确
八、演示程序
.MODEL
TINY
EXTRN
Display8:
NEAR,SCAN_KEY:
NEAR
IO8259_0
EQU
0F000H
IO8259_1
EQU
0F001H
Con_8253
EQU
0E003H
T0_8253
EQU
0E000H
IO8255_Con
EQU
0D003H
;CS3
IO8255_PC
EQU
0D002H
.STACK
100
.DATA
StepControl
DB
0
;下一次送给步进电机的值
buffer
DB
8DUP(0)
;显示缓冲区,8个字节
buffer1
DB
8DUP(0)
;显示缓冲区,8个字节
SpeedNo
DB
0
;选择哪一级速度
StepDelay
DB
0
;转动一步后,延时常数
StartStepDelay
DB
0;若选择速度过快,延时由长到短,最终使用对应延时常数
StartStepDelay1
DB
0
;StartStepDelay
bFirst
DB
0
;有没有转动过步进电机
bClockwise
DB
0 ;=1顺时针方向=0逆时针方向转动
bNeedDisplay
DB
0
;已转动一步,需要显示新步数
StepCount
DW
0
;需要转动的步数
StepDelayTab:
DB
250,125,83,62,50,42,36,32,28,25,22,21
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
MOV
bFirst,1
;有没有转动过步进电机
MOV
bClockwise,1
;顺时针方向
MOV
StepControl,33H
;下一次送给步进电机的值
MOV
SpeedNo,5
;第五级速度
CALL
Init8255
CALL
Init8253
CALL
Init8259
CALL
WriIntver
MOV
buffer,0
;显示缓冲器初始化
MOV
buffer+1,0
MOV
buffer+2,0
MOV
buffer+3,0
MOV
buffer+4,10H
MOV
AL,SpeedNo
MOV
buffer+5,AL
MOV
buffer+6,10H
MOV
buffer+7,0
STAR2:
LEA
SI,buffer
LEA
DI,buffer1
MOV
CX,8
REP
MOVSB
LEA
SI,buffer1
CALL
Display8
STAR3:
CALL
Scan_Key
JB
STAR5
CMP
bNeedDisplay,0
JZ
STAR3
MOV
bNeedDisplay,0
CALL
Step_SUB_1
JMP
STAR2
STAR5:
CLI
;终止步进电机转动
CMP
AL,10
JNB
STAR1
MOV
AH,buffer+2
MOV
buffer+3,AH
MOV
AH,buffer+1
MOV
buffer+2,AH
MOV
AH,buffer
MOV
buffer+1,AH
MOV
buffer,AL
JMP
STAR2
STAR1:
CMP
AL,14
JNB
STAR3
LEA
SI,DriverTab
SUB
AL,10
SHL
AL,1
XOR
AH,AH
MOV
BX,AX
JMP
CS:
[SI+BX]
DriverTab:
DW
Direction
;转动方向
DW
Speed_up
;提高转速
DW
Speed_Down
;降低转速
DW
Exec
;步进电机根据方向、转速、步数开始转动
Direction:
CMP
bClockwise,0
JZ
Clockwise
MOV
bClockwise,0
MOV
buffer+7,1
AntiClockwise:
CMP
bFirst,0
JZ
AntiClockwise1
MOV
StepControl,91H
JMP
Direction1
AntiClockwise1:
MOV
AL,StepControl
ROR
AL,2
MOV
StepControl,AL
JMP
Direction1
Clockwise:
MOV
bClockwise,1
MOV
buffer+7,0
CMP
bFirst,0
JZ
Clockwise1
MOV
StepControl,33H
JMP
Direction1
Clockwise1:
MOV
AL,StepControl
ROL
AL,2
MOV
StepControl,AL
Direction1:
JMP
STAR2
Speed_up:
MOV
AL,SpeedNo
CMP
AL,11
JZ
Speed_up2
Speed_up1:
INC
AL
MOV
SpeedNo,AL
MOV
buffer+5,AL
Speed_up2:
JMP
STAR2
Speed_Down:
MOV
AL,SpeedNo
CMP
AL,0
JZ
Speed_Down1
DEC
AL
MOV
SpeedNo,AL
MOV
buffer+5,AL
Speed_Down1:
JMP
STAR2
Exec:
MOV
bFirst,0
CALL
TakeStepCount
LEA
BX,StepDelayTab
MOV
AL,SpeedNo
XLAT
MOV
StepDelay,AL
CMP
AL,50
JNB
Exec1
MOV
AL,50
Exec1:
MOV
StartStepDelay,AL
MOV
StartStepDelay1,AL
STI
JMP
STAR2
TIMER0:
PUSH
AX
PUSH
DX
DEC
StartStepDelay
JNZ
TIMER0_1
MOV
AL,StartStepDelay1
CMP
AL,StepDelay
JZ
TIMER0_2
DEC
AL
MOV
StartStepDelay1,AL
TIMER0_2:
MOV
StartStepDelay,AL
MOV
AL,StepControl
MOV
DX,IO8255_PC
OUT
DX,AL
CMP
bClockwise,0
JNZ
TIMER0_3
ROR
AL,1
JMP
TIMER0_4
TIMER0_3:
ROL
AL,1
TIMER0_4:
MOV
StepControl,AL
CMP
StepCount,0
JZ
TIMER0_1
MOV
bNeedDisplay,1
DEC
StepCount
JNZ
TIMER0_1
add
sp,8;小写部分不允许使用单步、单步进入命令
popf
cli
pushf
sub
sp,8
nop
TIMER0_1:
MOV
DX,IO8259_0
MOV
AL,20H
OUT
DX,AL
POP
DX
POP
AX
IRET
Step_SUB_1
PROC
NEAR
MOV
CX,4
LEA
BX,buffer
Step_SUB_1_1:
DEC
BYTEPTR[BX]
CMP
BYTEPTR[BX],0FFH
JNZ
Step_SUB_1_2
MOV
BYTEPTR[BX],9
INC
BX
LOOP
Step_SUB_1_1
Step_SUB_1_2:
RET
Step_SUB_1
ENDP
TakeStepCount
PROC
NEAR
MOV
AL,buffer+3
;转动步数送入StepCount
MOV
BX,10
MUL
BL
ADD
AL,buffer+2
MUL
BL
ADD
AL,buffer+1
ADC
AH,0
MUL
BX
ADD
AL,buffer
ADC
AH,0
MOV
StepCount,AX
RET
TakeStepCount
ENDP
Init8255
PROC
NEAR
MOV
DX,IO8255_Con
MOV
AL,80H
OUT
DX,AL
;8255PC输出
DEC
DX
MOV
AL,0FFH
OUT
DX,AL
;0FFH->8255PC
RET
Init8255
ENDP
Init8253
PROC
NEAR
MOV
DX,Con_8253
MOV
AL,35H
OUT
DX,AL;计数器T0设置在模式2状态,BCD码计数
MOV
DX,T0_8253
MOV
AL,10H
OUT
DX,AL
MOV
AL,02H
OUT
DX,AL
;CLK0/210
RET
Init8253
ENDP
Init8259
PROC
NEAR
MOV
DX,IO8259_0
MOV
AL,13H
OUT
DX,AL
MOV
DX,IO8259_1
MOV
AL,08H
OUT
DX,AL
MOV
AL,09H
OUT
DX,AL
MOV
AL,0FEH
OUT
DX,AL
RET
Init8259
ENDP
WriIntver
PROC
NEAR
PUSH
ES
MOV
AX,0
MOV
ES,AX
MOV
DI,20H
LEA
AX,TIMER0
STOSW
MOV
AX,CS
STOSW
POP
ES
RET
WriIntver
ENDP
END
START
九、实验扩展及思考
1、怎样改变电机的转速?
2、通过实验找出电机转速的上限,如何能进一步提高最大转速?
3、怎样能使电机反转?
附录一8279命令功能一览表
附录二8279键值显示程序
;8279键盘显示器接口芯片
;1.查询控制方式2.输入时钟2MHZ3.8279内部20分频(100KHZ)
;4.扫描计数器采用编码工作方式(通过外部138译码)
;5.显示按键值,第九次按键,清除显示
; 8279查询工作方式
.MODEL TINY
CMD_8279EQU0BF01H ;8279命令字、状态字地址
DATA_8279EQU0BF00H ;8279读写数据口的地址
PUBLIC GetKey,GetKeyA,GetKeyB,GetBCDKey,DisPlay8,SCAN_KEY
PUBLIC F1
.STACK 100
.DATA
F1 DB?
LED_TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH
DB 0FFH,0BFH
.CODE
GetKey PROC NEAR
CMP CX,0
JZ GetKey5
CMP CX,9
JNB GetKey5
PUSH AX
PUSH BX
PUSH DX
PUSHF
MOV AX,CX
CLC
RCR AX,1
DEC AX
ADD DI,AX
STD
MOV AH,0
CMP F1,0
JZ GetKey1
CALL KeyScan
GetKey1:
PUSH AX
MOV AL,8
CLC
SUB AL,CL
CALL INIT8279_1 ;8279初始化
POP AX
CMP F1,0
JNZ GetKey3
GetKey2:
CALL KeyScan ;扫描
GetKey3:
NOT AH
PUSH AX
CMP AH,0
JZ GetKey4
ROR AL,4
MOV ES:
[DI],AL
JMP GetKey6
GetKey4:
OR AL,ES:
[DI]
STOSB
GetKey6:
POP AX
LEA BX,LED_TAB
XLAT
CALL WRITE_DATA ;显示输入值
LOOP GetKey2
POPF
POP DX
POP BX
POP AX
GetKey5:
RET
GetKey ENDP
;键值在AL中
KeyScan PROC NEAR
CALL SCAN_KEY
JNB KeyScan
RET
KeyScan ENDP
;CY=1,有键,键值在AL中;CY=0,没有按键
GetKeyA PROC NEAR
CALL SCAN_KEY
RET
GetKeyA ENDP
;键值在AL中
GetKeyB PROC NEAR
CALL SCAN_KEY
JNB GetKeyB
RET
GetKeyB ENDP
;BCD码 ;F1是否需要先清除显示
GetBCDKey PROC NEAR
CMP CX,0
JZ GetBCDKey5
CMP CX,9
JNB GetBCDKey5
PUSH AX
PUSH BX
PUSH DX
PUSHF
MOV AX,CX
CLC
RCR AX,1
DEC AX
ADD DI,AX
STD
MOV AH,0
CMP F1,0
JZ GetBCDKey1
CALL KeyScan
GetBCDKey1:
PUSH AX
MOV AL,8
CLC
SUB AL,CL
CALL INIT8279_1 ;8279初始化
POP AX
CMP F1,0
JNZ GetBCDKey3
GetBCDKey2:
CALL KeyScan ;扫描
GetBCDKey3:
CMP AL,10
JNB GetBCDKey2
NOT AH
PUSH AX
CMP AH,0
JZ GetBCDKey4
ROR AL,4
MOV ES:
[DI],AL
JMP GetBCDKey6
GetBCDKey4:
OR AL,ES:
[DI]
STOSB
GetBCDKey6:
POP AX
LEA BX,LED_TAB
XLAT
CALL WRITE_DATA ;显示输入值
LOOP GetBCDKey2
POPF
POP DX
POP BX
POP AX
GetBCDKey5:
RET
GetBCDKey ENDP
;显示以SI开始的8个数字(0~F)
DisPlay8 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,8 ;计数用
LEA BX,LED_TAB
DisPlay81:
MOV AL,[SI] ;不用显示的位调整
AND AL,7FH
CMP AL,11H
JZ DisPlay82 ;负号
Display84:
CMP AL,16
JB DisPlay82
MOV AL,10H ;显示段码中10H位对应的是暗码
DisPlay82:
XLAT
XCHG AL,[SI]
TEST AL,80H
JZ Display83
XCHG AL,[SI]
AND AL,7FH
MOV [SI],AL
Display83:
INC SI
LOOP DisPlay81
MOV AL,0
CALL INIT8279_1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 步进 电机 控制