完整51单片机汇编语言步进电机转速控制系统推荐文档Word格式文档下载.docx
《完整51单片机汇编语言步进电机转速控制系统推荐文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《完整51单片机汇编语言步进电机转速控制系统推荐文档Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
(MH)
其它特点
E²
PROM
ROM
RAM
89C51
4K
128
2
32
1
6
24
低电压
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
其引脚如图1.2所示。
图1.2单片机的引脚排列
管脚说明如下:
VCC:
供电电压GND:
接地
P0口:
8位漏级开路双向I/O口,每脚可吸收8TTL门电流;
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流;
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(记时器0外部输入)
P3.5
T1(记时器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
4.2ZLG7290B
ZLG7290B是数码管动态显示驱动、键盘扫描管理芯片。
接口采用I2C结构。
内部寄存器有13个单元00H-0DH:
1)系统寄存器(地址00H),第0位称作按键有效位,为1表示按键按下,为0表示没有按键操作,并且有按键按下的时候在ZLG7290B的/INT引脚会产生一个低电平的中断请求信号。
2)键值寄存器(地址01H),如果按下的是普通键,键值寄存器就保存按键对应的兼职(1-56)。
3)连击计数器(02H),就是芯片为普通键提供的一种连击计数功能,当按下某一按键就可以产生连续的中断请求信号。
4)功能键值寄存器(地址03H),功能按键不产生键值,但是在按下和抬起都会产生中断请求信号。
5)命令寄存器(地址07H和08H),向命令寄存器送入相关的控制命令可以实现段寻址,下载显示数据和控制闪烁等功能。
6)闪烁控制寄存器(地址0HCH),闪烁控制寄存器决定闪烁的频率和占空比。
7)扫描位数寄存器(地址0DH),扫描位数寄存器决定着ZLG7290B动态扫描显示的位数,取值0-7,对应的显示1-8位。
8)显示缓冲寄存器(地址10H-17H),八个显示缓冲寄存器直接决定着数码管上显示的字形和显示的位置。
ZLG7290B的引脚图如下:
图1.3.ZLG7290B引脚逻辑图
4.3步进电机
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
(一)步进电机的静态指标术语
1、相数:
产生不同对N、S磁场的激磁线圈对数。
常用m表示。
2、拍数:
完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数。
3、步距角:
对应一个脉冲信号,电机转子转过的角位移用θ表示。
(二)步进电机动态指标及术语:
1、最大空载起动频率:
电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。
2、最大空载的运行频率:
电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。
3、电机正反转控制:
当电机绕组通电时序为D-DC-C-CB-B-BA-A-AD时为正转,通电时序为AD-A-AB-B-BC-C-CD-D时为反转。
如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1.4是该四相反应式步进电机工作原理示意图。
图1.4
四相步进电机步进示意图
5主程序中主要变量定义
变量名称
RAM单元/寄存器
功能
SDA
IIC数据总线
SCL
IIC时钟线
RST
IIC复位线
BA
P1.0
步进电机驱动
BB
P1.1
BC
P1.2
BD
P1.3
WSLA
70H
取器件地址(写)
RSLA
71H
取器件地址(读)
DISDA
20H
源数据块首地址
DISCON
08H
写入数据个数
DATA_1
30H
变量区首地址
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
INT_7290
A
按键中断
TI_INT
无
定时器中断
CF
R3、R4
拆分,高4位存在R4中,低4位存在R3中
DELAY
步进电机相旋转邻角延时;
按键抖动消除延时
RDKEY
读出键值
SHOW
将当前10H-17H的字形码输出
WRNBYT
R7,R0,R2,R3
通用的IIC通讯子程序(多字节写操作)
RDADD
R7,R0,R2,R3,R4
R0指向的主器件内部数据块
通用的IIC通讯子程序(多字节读操作)
6主程序程序流程图
7程序清单
SDABITP3.3
SCLBITP3.4
RSTBITP3.5
BABITP1.0
BBBITP1.1
BCBITP1.2
BDBITP1.3
WSLAEQU70H
RSLAEQU71H
DISDAEQU20H
DISCONEQU08H
DATA_1EQU30H
ORG8000H
LJMP8100H
ORG8003H
LJMPINT_7290
;
按键中断入口地址
ORG801BH
LJMPTI_INT
;
定时器中断入口地址
ORG8100H
********主程序开始*************
INT0实现按键中断,INT1用于定时器
*******************************
START:
MOVSP,#60H
CLRRST;
复位
LCALLDELAY
SETBRST
SETBEA
SETBEX0
CLRIT0;
开INT0中断
SETBPX0;
高优先级
MOVTMOD,#10H;
定时器1设
为模式1
MOVTH1,#00H
MOVTL1,#00H
SETBET1;
开INT1中断
SETBTR1
CLRA
SETBF0;
初始标识位
MOVR1,#10H;
节拍初始
MOVR5,#08H
相序表
MOV10H,#08H;
D正转
MOV11H,#0CH;
DC
MOV12H,#04H;
C
MOV13H,#06H;
CB
MOV14H,#02H;
B
MOV15H,#03H;
MOV16H,#01H;
MOV17H,#09H;
AD
MOV18H,#09H;
AD反转
MOV19H,#01H;
MOV1AH,#03H;
AB
MOV1BH,#02H;
B
MOV1CH,#06H;
MOV1DH,#04H;
MOV1EH,#0CH;
CD
MOV1FH,#08H;
D
建立变量缓冲区(30H~37H)
显示SPEED=00
MOVDATA_1,#00H
MOVDATA_1+1,#00H
MOVDATA_1+2,#12H
MOVDATA_1+3,#17H
MOVDATA_1+4,#16H
MOVDATA_1+5,#16H
MOVDATA_1+6,#15H
MOVDATA_1+7,#14H
通过查表建立显示缓冲区
(20H~27H)
*******************************MOVDPTR,#LEDSEG
MOVR7,#DISCON
MOVR0,#DISDA
MOVR1,#DATA_1
LOOP1:
MOVA,@R1
MOVCA,@A+DPTR
MOV@R0,A
INCR1
INCR0
DJNZR7,LOOP1
写入数据
*******************************LOOP:
MOVR7,#DISCON
MOVR2,#10H
MOVR3,#WSLA
MOVR0,#DISDA
LCALLWRNBYT
LCALLDELAY
SJMP$;
等待中断
字形码
LEDSEG:
DB0FCH,60H,0DAH,0F2H
DB66H,0B6H,0BEH,0E4H
DB0FEH,0F6H,0EEH,3EH
DB9CH,7AH,9EH,8EH
DB0FAH,1EH,12H,00H
DB0B6H,0CEH,0DEH,7AH;
SPED
选择相速(INT1)
*******************************TI_INT:
PUSHACC
MOVA,29H;
判断键值
J0:
CJNEA,#00H,J1
MOVTH1,#00H
MOVTL1,#00H
SETBF0
F0高电平正转
SJMPOUTPUT;
输出步进
J1:
CJNEA,#01H,J2
MOVTL1,#00H;
档1
SETBF0
SJMPOUTPUT
J2:
CJNEA,#02H,J3
MOVTH1,#60H
MOVTL1,#60H;
档2
不同按键设置不同速度,
正反转各设四档
SJMPOUTPUT
J3:
CJNEA,#03H,J4
MOVTH1,#90H
MOVTL1,#90H;
档3
J4:
CJNEA,#04H,J5
MOVTH1,#0D0H
MOVTL1,#0D0H;
档4
J5:
CJNEA,#05H,J6
CLRF0
J6:
CJNEA,#06H,J7
J7:
CJNEA,#07H,J8
J8:
OUTPUT:
MOVA,P1;
步进电机转
ANLA,#0FH;
取低四位
MOVA,@R1
MOVP1,A
INCR1
DJNZR5,OUT
JBF0,CWISE;
判断正/反
MOVR1,#18H;
反转
SJMPNUM
CWISE:
MOVR1,#10H;
正转
NUM:
MOVR5,#08H
OUT:
POPACC
RETI
*******************************;
拆分
CF:
PUSH02H
PUSHDPH
PUSHDPL
MOVDPTR,#LEDSEG
MOVR2,A
ANLA,#0FH
MOVCA,@A+DPTR
MOVR3,A;
存低4位
MOVA,R2
SWAPA
MOVR4,A;
存高4位
POPDPL
POPDPH
POP02H
RET
延时程序
DELAY:
PUSH00H
PUSH01H
MOVR0,#00H
DELAY1:
MOVR1,#00H
DJNZR1,$
DJNZR0,DELAY1
POP01H
POP00H
7290中断
INT_7290:
PUSH00H
PUSH02H
PUSH03H
PUSH04H
PUSH07H
PUSHACC
PUSHPSW
LCALLDELAY;
按键消抖
LCALLRDKEY;
读键值
NOP;
用于观察读入键值
CJNEA,#10H,AKEY1
PANDUAN:
SETBPT1;
标志位
CLRPX0
交换优先级,用于停止后再继续工作
AKEY:
JBP3.2,$;
查询LCALLDELAY
LCALLRDKEY
CJNEA,#0AH,AKEY1
SJMPPANDUAN
AKEY1:
JCINPUT
此时为档速设定键
SJMPRESTART
INPUT:
CJNEA,#05H,NEXT;
判断正/反转
NEXT:
JNCWISE
LCALLCF
MOV20H,R3
MOV21H,R4
MOV21H,#0FCH
0,正转表示
SJMPOVER
WISE:
SUBBA,#04H
MOV20H,R3
MOV21H,R4
MOV21H,#60H
1,反转表示
RESTART:
LCALLCF
MOV21H,R4
OVER:
LCALLSHOW
SETBPX0
重新将INT0的优先级置高
POPPSW
POP07H
POP04H
POP03H
POP02H
RETI
读键值
RDKEY:
MOVR0,#28H
MOVR7,#04H
MOVR2,#00H
MOVR3,#WSLA
MOVR4,#RSLA
LCALLRDADD
MOVA,29H
RET
显示程序
SHOW:
MOVR7,#02H
MOVR2,#10H
MOVR3,#WSLA
MOVR0,#DISDA
LCALLWRNBYT
LCALLDELAY
*****************************
通用的I2C通讯子程序(略)
*****************************
END
8系统调试运行结果说明、分析所出现得问题,设计体会与建议
8.1系统调试运行结果
运行程序后,LED显示屏上显示“speed=00”。
按下对应按键后,LED显示屏与步进电机状态如下表所示。
按键
LED显示屏
步进电机
无(初始化)
speed=00
初始速度
S1
speed=01
正转档1
S2
speed=02
正转档2
S3
speed=03
正转档3
S4
speed=04
正转档4
S5
speed=11
反转档1
S6
speed=12
反转档2
S7
speed=13
反转档3
S8
speed=14
反转档4
S10(复位键)
S16(停止键)
speed=**(当前步进电机转速与旋转方向)
停止
8.2实验出现问题分析
●问题一:
加入定时器后,LED显示屏无法正常显示
●解决方法:
改变7290连线从P1.4~P1.7至P3.2~P3.5。
单步调试,注意中断优先级的设定。
等待中断的指令应为SJMP$
●问题二:
7290中断键值读入后,键值被改变
在调用的子程序中,CF、RDKEY、TI_INT中对A进行保护。
●问题三:
步进电机停止后无法重启
在比较停止键的键值后,改变按键中断INT0与定时器中断INT1的优先级。
定时器中断设为高优先级,按键中断设为低优先级。
●问题四:
步进电机停止后,LED显示屏上无法显示当前步进电机转速与旋转方向
当步进电机停止后,调用拆分子程序,显示子程序显示当前步进电机转速与旋转方向。
8.3设计体会与建议
本次设计时出现了许多小问题,在解决时需要仔细单步调试,观察各寄存器存储数值的变化。
程序里有外部中断和定时器中断,需要处理好优先级关系。
单片机的综合设计实验涉及以前学过的多方面知识,是对个人能力一个很好的提高。
期望以后能有更多的选题。
9结论及设计体会
本实验基本完成设计要求。
在完成设计的过程中,遇到不少问题,一一解决后,收获颇深。
单片机的语言和汇编语言很相似,因此借助以前的知识可以很快上手,但是51单片机使用更方便,应用也更广。
许多知识只有实践后才能真正了解,作为工科生,多实践,在实践中多思考,善于发现。
正如此次51单片机调试的过程,单步调试找出问题所在,分析原因,就能快速改正错误了。
参考文献
MCS-51单片机应用实验教程陈育斌主编