四相步进电机单片机控制
我按照教程做的四相步进电机单片机控制系统,用proteus仿真,遇到很多问题,请大家帮帮忙,我是新手。1.复位开关在图中应该起到什么样的作用,我按了一点反应都没有。2.步...
我按照教程做的四相步进电机单片机控制系统,用proteus仿真,遇到很多问题,请大家帮帮忙,我是新手。1.复位开关在图中应该起到什么样的作用,我按了一点反应都没有。2.步进电机第一步走过的角度为什么是步距角的一半,我设置的是90度,图中第一步却只走过了45度。3.为什么只有把Vcc和com端用一根线连接起来,电机才能朝一个方向转,如果去掉了,就一直来回正反转。4.还有我对程序也不是太懂,能不能帮我分析一下这段汇编程序呀,万分感谢。程序如下:
SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~7
FX EQU 11H ;FX为方向标志
COUNT EQU 12H ;COUNT中断次数标志
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中断0入口地址,加速子程序
AJMP UP
ORG 0013H ;外部中断1入口地址,减速子程序
AJMP DOWN
ORG 000BH ;定时器0中断入口地址,控制中断次数来达到控制转速
AJMP ZDT0
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#01H ;工作于定时、软件置位启动!模式1(16位计时器)
MOV TH0,#0CFH
MOV TL0,#2CH
MOV COUNT,#01H
SETB ET0 ;定时/计数器允许中断
CLR IT0 ;外部中断为电平触发方式,低电平有效
CLR IT1
SETB EX0 ;外部允许中断
SETB EX1
SETB EA ;开总中断
MOV R1,#11H ; 四相单四拍运行,共阳数码管方向显示8,速度值显示0
MOV SPEED,#00H
MOV FX,#00H
XIANS: MOV A,SPEED
MOV DPTR,#LED
MOVC A,@A+DPTR ;查表获取等级对应数码管代码
MOV P2,A ;第二个数码管显示转速等级
MOV A,FX ;准备判断转向
CJNE A,#11H,ELS
MOV P0, #0F9H ;第一个数码管显示1,表示正转
AJMP QD
ELS: CJNE A,#00H,ZHENG
MOV P0,#0C0H ;第一个数码管显示0,表示不转
AJMP QD
ZHENG: MOV P0,#0BFH ;第一个数码管显示-,表示反转
QD: JB P3.4,DD ;P3.4接启动开关K1,P3.4=1时启动
CLR TR0 ;停止定时/计数器
MOV P0,#0C0H ;第一个数码管显示0,表示不转
MOV P2,#0C0H ;第二个数码管显示0,表示转速为0
MOV SPEED,#00H ;重新赋初值
MOV FX,#00H
AJMP QD
DD: MOV A,SPEED
JNZ GO ;A不等于0,即初始速度不为零,则转移到GO
CLR TR0 ;停止定时/计数器
AJMP QD
GO: SETB TR0 ;开启定时/计数器
ACALL DELAY
AJMP XIANS
DELAY: MOV R6,#10 ;延时子程序
DEL1: MOV R7,#250
HERE1: DJNZ R7, HERE1
DJNZ R6,DEL1
RET
;以下ZDT0为定时器中断程序
ZDT0: PUSH ACC
PUSH DPH
PUSH DPL
MOV TH0,#0D8H
MOV TL0,#0F0H
DJNZ COUNT,EXIT
JB P3.5,NIZHUAN ;查询方向标志,P3.5接换向开关K2
MOV FX,#11H
NIZHUAN:MOV A,FX
CJNE A,#11H,FZ ;若A不等于11,即正转,则转移到FZ
MOV A,R1 ;R1记录上一次电机脉冲状态
MOV P1,A
RR A ;循环右一位
MOV R1,A
MOV P1,A
AJMP RE
FZ: MOV A,R1
MOV P1,A
RL A ;循环左移一位
MOV P1,A
MOV R1,A
RE: MOV A,SPEED
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV COUNT,A ;把转速级别赋给COUNT
JB P3.5 ,FFX ; P3.5接换向开关K2, 即换向位,若P3.5=1,则跳到FFX
MOV FX,#11H
AJMP EXIT
FFX: MOV FX,#0FEH ;只要FX不等于11H,就可以通过循环左移或右移进行换向
EXIT: POP DPL
POP DPH
POP ACC
RETI
;以下UP为加速中断程序
UP: PUSH ACC
ACALL DELAY ;延时防抖动
JB P3.2,UPEX ;P3.2为外部中断0位,接增速开关S2,低电平有效,若P3.2=1,则退出
MOV A,SPEED
CJNE A,#7,SZ ;最大等级为7,若A不等于7,则转移到SZ
AJMP UPEX ;若A=7,则退出
SZ: INC SPEED ;SPEED= SPEED+1
程序没完:实在是看不懂,希望能把指令介绍的更通俗一点,麻烦了
UPEX: POP ACC
HERE2: JNB P3.2,HERE2 ;本条指令为防止开关S2按下去后弹不起,导致一直产生中断
RETI
;以下DOWN为减速中断程序
DOWN: PUSH ACC
ACALL DELAY
JB P3.3,DEX ; P3.3为外部中断1位,接减速开关S3,低电平有效,若P3.3=1,则退出
MOV A,SPEED
CJNE A,#0,SJ
AJMP DEX
SJ: DEC SPEED ;SPEED= SPEED-1
DEX: POP ACC
HERE3: JNB P3.3,HERE3
RETI
TAB: DB 0,60,40,35,30,28,25,21 ;经仿真,小于21时,由于脉冲太快,会出现失步
; 0 1 2 3 4 5 6 7 8 9
LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
END 展开
SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~7
FX EQU 11H ;FX为方向标志
COUNT EQU 12H ;COUNT中断次数标志
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中断0入口地址,加速子程序
AJMP UP
ORG 0013H ;外部中断1入口地址,减速子程序
AJMP DOWN
ORG 000BH ;定时器0中断入口地址,控制中断次数来达到控制转速
AJMP ZDT0
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#01H ;工作于定时、软件置位启动!模式1(16位计时器)
MOV TH0,#0CFH
MOV TL0,#2CH
MOV COUNT,#01H
SETB ET0 ;定时/计数器允许中断
CLR IT0 ;外部中断为电平触发方式,低电平有效
CLR IT1
SETB EX0 ;外部允许中断
SETB EX1
SETB EA ;开总中断
MOV R1,#11H ; 四相单四拍运行,共阳数码管方向显示8,速度值显示0
MOV SPEED,#00H
MOV FX,#00H
XIANS: MOV A,SPEED
MOV DPTR,#LED
MOVC A,@A+DPTR ;查表获取等级对应数码管代码
MOV P2,A ;第二个数码管显示转速等级
MOV A,FX ;准备判断转向
CJNE A,#11H,ELS
MOV P0, #0F9H ;第一个数码管显示1,表示正转
AJMP QD
ELS: CJNE A,#00H,ZHENG
MOV P0,#0C0H ;第一个数码管显示0,表示不转
AJMP QD
ZHENG: MOV P0,#0BFH ;第一个数码管显示-,表示反转
QD: JB P3.4,DD ;P3.4接启动开关K1,P3.4=1时启动
CLR TR0 ;停止定时/计数器
MOV P0,#0C0H ;第一个数码管显示0,表示不转
MOV P2,#0C0H ;第二个数码管显示0,表示转速为0
MOV SPEED,#00H ;重新赋初值
MOV FX,#00H
AJMP QD
DD: MOV A,SPEED
JNZ GO ;A不等于0,即初始速度不为零,则转移到GO
CLR TR0 ;停止定时/计数器
AJMP QD
GO: SETB TR0 ;开启定时/计数器
ACALL DELAY
AJMP XIANS
DELAY: MOV R6,#10 ;延时子程序
DEL1: MOV R7,#250
HERE1: DJNZ R7, HERE1
DJNZ R6,DEL1
RET
;以下ZDT0为定时器中断程序
ZDT0: PUSH ACC
PUSH DPH
PUSH DPL
MOV TH0,#0D8H
MOV TL0,#0F0H
DJNZ COUNT,EXIT
JB P3.5,NIZHUAN ;查询方向标志,P3.5接换向开关K2
MOV FX,#11H
NIZHUAN:MOV A,FX
CJNE A,#11H,FZ ;若A不等于11,即正转,则转移到FZ
MOV A,R1 ;R1记录上一次电机脉冲状态
MOV P1,A
RR A ;循环右一位
MOV R1,A
MOV P1,A
AJMP RE
FZ: MOV A,R1
MOV P1,A
RL A ;循环左移一位
MOV P1,A
MOV R1,A
RE: MOV A,SPEED
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV COUNT,A ;把转速级别赋给COUNT
JB P3.5 ,FFX ; P3.5接换向开关K2, 即换向位,若P3.5=1,则跳到FFX
MOV FX,#11H
AJMP EXIT
FFX: MOV FX,#0FEH ;只要FX不等于11H,就可以通过循环左移或右移进行换向
EXIT: POP DPL
POP DPH
POP ACC
RETI
;以下UP为加速中断程序
UP: PUSH ACC
ACALL DELAY ;延时防抖动
JB P3.2,UPEX ;P3.2为外部中断0位,接增速开关S2,低电平有效,若P3.2=1,则退出
MOV A,SPEED
CJNE A,#7,SZ ;最大等级为7,若A不等于7,则转移到SZ
AJMP UPEX ;若A=7,则退出
SZ: INC SPEED ;SPEED= SPEED+1
程序没完:实在是看不懂,希望能把指令介绍的更通俗一点,麻烦了
UPEX: POP ACC
HERE2: JNB P3.2,HERE2 ;本条指令为防止开关S2按下去后弹不起,导致一直产生中断
RETI
;以下DOWN为减速中断程序
DOWN: PUSH ACC
ACALL DELAY
JB P3.3,DEX ; P3.3为外部中断1位,接减速开关S3,低电平有效,若P3.3=1,则退出
MOV A,SPEED
CJNE A,#0,SJ
AJMP DEX
SJ: DEC SPEED ;SPEED= SPEED-1
DEX: POP ACC
HERE3: JNB P3.3,HERE3
RETI
TAB: DB 0,60,40,35,30,28,25,21 ;经仿真,小于21时,由于脉冲太快,会出现失步
; 0 1 2 3 4 5 6 7 8 9
LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
END 展开
展开全部
汇编的我不太懂,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
德晟智能
2024-09-04 广告
2024-09-04 广告
舵机伺服电机是一种在自动控制系统中广泛应用的执行元件。它具有快速响应、精准定位的特点,能够将电压信号转化为转矩和转速,以驱动控制对象。在东莞市德晟智能科技有限公司的产品中,舵机伺服电机扮演着重要的角色,广泛应用于各种精密电子设备、交通运输工...
点击进入详情页
本回答由德晟智能提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询