(3)外部中断设计外部中断所要完成的工作是根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,也就是改变了电机的转速。速度增加按钮S2为INT0中断,其程序流程为原数据,当值等于7时,不改变原数值返回,小于7时,数据加1后返回;速度减少按钮S3,当原数据不为0,减1保存数据,原数据为0则保持不变。程序流程图如图12所示。
Y
按钮是否弹起?
图 12外部中断程序流程图
Y 恢复现场 N 速度值±1 速度=上限值? N 延时去抖 保护现场 外部中断入口 中断返回 15
(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
16
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
17
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,低电平有效,若 3.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
18
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时,由于脉冲太快,会出现失 步 ;
LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H END
总结
本设计通过分析步进电机结构、工作原理,查阅步进电机控制系统的相关科技文献,遵循实用、简单、可靠和低成本的原则,设计了一种既可用于精度要求不高,但控制需完备的场合。对本次设计,有以下结论:
(1)采用单片机为控制核心,利用其强大的功能,把键盘和显示电路有机的结合起来,组成一个操作方便、交互性强的控制系统。而且整个系统所包含的技术几乎包括了现本科学校控制专业所要求的知识,有利于实践教学取得最大效果。
(2)键盘电路和显示电路采用了动态扫描技术,节约了单片机资源。 (3)系统软件采用结构化设计,具有易维护性,根据用户新的要求,对软件系统进行少量的修改,使系统功能得到一定程度的提高。
致谢
本人深知自己做的课设还很不够,由于软件和硬件的各方面原因,系统的应
用讨论不够,精度还有待于进一步提高。由于时间的原因,设备的原因,实验
19