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

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

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

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

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