51单片机汇编语言步进电机转速控制系统.docx

上传人:b****5 文档编号:5170654 上传时间:2022-12-13 格式:DOCX 页数:18 大小:109.39KB
下载 相关 举报
51单片机汇编语言步进电机转速控制系统.docx_第1页
第1页 / 共18页
51单片机汇编语言步进电机转速控制系统.docx_第2页
第2页 / 共18页
51单片机汇编语言步进电机转速控制系统.docx_第3页
第3页 / 共18页
51单片机汇编语言步进电机转速控制系统.docx_第4页
第4页 / 共18页
51单片机汇编语言步进电机转速控制系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

51单片机汇编语言步进电机转速控制系统.docx

《51单片机汇编语言步进电机转速控制系统.docx》由会员分享,可在线阅读,更多相关《51单片机汇编语言步进电机转速控制系统.docx(18页珍藏版)》请在冰豆网上搜索。

51单片机汇编语言步进电机转速控制系统.docx

51单片机汇编语言步进电机转速控制系统

大连理工大学本科设计报告

 

题目:

步进电机转速控制系统设计

 

课程名称:

单片机综合设计

学院(系):

电子信息与电气工程学部

专业:

班级:

学号:

学生姓名:

成绩:

 

2013年7月20日

题目:

步进电机转速控制系统设计

1设计要求

1)利用ZLG7290的键盘控制直流电机(或步进电机的转速、转向);

2)也可以利用ADC模块(与电位器配合),利用电位器控制转速;

3)利用ZLG7290的8位LED数码管显示电机转向、转速参数显示。

2设计分析及系统方案设计

实验要求使用步进电机作为被控制对象,由ZLG7290做人机对话平台,利用单片机的P1(8位)和P3(部分口线)构造系统。

实验最终实现功能、设计思路以及方案设计如以下几个小节所述。

2.1系统设计实现功能

根据设计要求、现有设备以及知识储备,完成功能如下:

1由按键S1~S8实现转速切换,其中S1~S4正转,S5~S8反转

2按键S16作为停止键,按下S10后步进电机停止转动,再按S1~S16步进电机按照按键对应转速以及转向转动

3按键S10作为复位键,当按下S10后,无论当前处于何种状态,系统恢复至初始态

48为LED数码管显示当前步进电机转速(speed=0/11~4),转速前0表示正转,1表示反转

5若按下停止键,数码管显示当前转速;若按下复位键,数码管显示初始态speed=00

2.2设计思路

本次的设计是LED显示与步进电机相结合以及若干功能键的组合的一种设计。

根据之前学习的按键中断显示实验和定时器实验,使用INT0和INT1,INT0作为按键中断,INT1作为定时器。

在主程序中实现LED初始显示、定时器计时初始、按键中断初始。

INT0中断调用中断服务子程序实现对按键键值的判断,并根据相应的按键值实现对应步进电机的变化,并显示该按键对应的转速。

INT1定时器中断根据INT0的按键键值,对定时器设定相应的初值,实现步进电机按规定的转速转动。

对于按键停止,则是利用中断优先级,当INT0的中断优先级高时,系统进入中断,此时INT1停止计时,也就实现了步进电机的停止,当改变定时器与按键中断的优先级时,即把INT0设为低优先级,INT1设为高优先级,步进电机重新开始转动。

此时添加一个对INT0位地址的查询,若有按键即正/反转的4档转速所对应的按键,步进电机开始重新转动。

对于复位功能,则同样是利用按键键值的判断,在对应键值下控制电机初始化。

2.3系统方案设计

系统总设计方案框图如下所示:

 

 

图1.1系统总框图

3系统电路图

见附录

4外围接口模块硬件电路功能描述

本设计主要用到的器件是AT89C51、ZLG7290B和步进电机。

4.1AT89C51

AT89C51的主要参数如下表所示:

型号

存储器

定时器

I/0

串行口

中断

速度

(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

P3.3

IIC数据总线

SCL

P3.4

IIC时钟线

RST

P3.5

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

A

按键中断

TI_INT

A

定时器中断

CF

A

R3、R4

拆分,高4位存在R4中,低4位存在R3中

DELAY

步进电机相旋转邻角延时;按键抖动消除延时

RDKEY

A

读出键值

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;BA

MOV16H,#01H;A

MOV17H,#09H;AD

MOV18H,#09H;AD反转

MOV19H,#01H;A

MOV1AH,#03H;AB

MOV1BH,#02H;B

MOV1CH,#06H;BC

MOV1DH,#04H;C

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

MOVTH1,#00H

MOVTL1,#00H;档1

SETBF0

SJMPOUTPUT

J2:

CJNEA,#02H,J3

MOVTH1,#60H

MOVTL1,#60H;档2

;不同按键设置不同速度,

;正反转各设四档

SETBF0

SJMPOUTPUT

J3:

CJNEA,#03H,J4

MOVTH1,#90H

MOVTL1,#90H;档3

SETBF0

SJMPOUTPUT

J4:

CJNEA,#04H,J5

MOVTH1,#0D0H

MOVTL1,#0D0H;档4

SETBF0

SJMPOUTPUT

J5:

CJNEA,#05H,J6

MOVTH1,#00H

MOVTL1,#00H;档1

CLRF0

SJMPOUTPUT

J6:

CJNEA,#06H,J7

MOVTH1,#60H

MOVTL1,#60H;档2

CLRF0

SJMPOUTPUT

J7:

CJNEA,#07H,J8

MOVTH1,#90H

MOVTL1,#90H;档3

CLRF0

SJMPOUTPUT

J8:

MOVTH1,#0D0H

MOVTL1,#0D0H;档4

CLRF0

SJMPOUTPUT

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

ANLA,#0FH

MOVCA,@A+DPTR

MOVR4,A;存高4位

POPDPL

POPDPH

POP02H

RET

;*******************************;延时程序

;*******************************

DELAY:

PUSH00H

PUSH01H

MOVR0,#00H

DELAY1:

MOVR1,#00H

DJNZR1,$

DJNZR0,DELAY1

POP01H

POP00H

RET

;*******************************

;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

LCALLCF

MOV20H,R3

MOV21H,R4

MOV21H,#60H

;1,反转表示

SJMPOVER

RESTART:

LCALLCF

MOV20H,R3

MOV21H,R4

OVER:

LCALLSHOW

SETBPX0

;重新将INT0的优先级置高

POPPSW

POPACC

POP07H

POP04H

POP03H

POP02H

POP00H

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

RET

;*****************************

;通用的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(复位键)

speed=00

初始速度

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单片机应用实验教程陈育斌主编

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1