admin 管理员组

文章数量: 1087139


2024年1月26日发(作者:mysql修改数据类型语句change)

《嵌入式系统及应用》课程设计报告---步进电机控制

一、设计任务

1) 从键盘上输入步进电机正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。显示器上显示:第一位为0表示正转,为1表示反转;第二位0~F为转速等级,第三到第六位设定步数。

2) 单片机依显示器上显示的正、反转命令,转速级数和转动步数进相应动作,转动步数减为零时停止转动。测量步进电机绕组两端电压,并在显示器上显示。

二、工作原理

1、步进电机电路工作原理

步进电动机是一种将电脉冲信号转换成相应角位移或线位移的电动机,它的运行需要专门的驱动电源,驱动电源的输出受外部的脉冲信号控制。每一个脉冲信号可使步进电机旋转一个固定的角度,这个角度称为步距角。脉冲的数量决定了旋转的总角度,脉冲的频率决定了电动机旋转的速度,改变绕组的通电顺序可以改变电机旋转的方向。在数字控制系统中,它既可以用作驱动电动机,也可以用作伺服电动机。它在工业过程控制中得到广泛的应用,尤其在智能仪表和需要精确定位的场合应用更为广泛。

如图2.1,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。

1

图2.1 步进电机工作原理

图2.2 步进电机控制电路

2、LED显示电路

LED显示电路工作原理如图2.3。

2

图2.3 LED显示电路工作原理

3、键盘电路原理图

键盘电路原理如图2.4。

图2.4 键盘电路原理

三、设计原理及步骤

系统中使用24BYJ-48(四相八拍)型号步进电机,它使用+5V直流电源,步距角为5.625度,电机线圈由A、B、C、D四相组成。步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。HA、HB、HC、HD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。

所需模块:单片机通用CPU板、Mon51K CPU卡、键盘显示板、电机音响继电器板。

设计步骤:

1.检查设置:关闭实验仪电源,把MON51K 卡上跳线帽分别短接至“MON”、“片内”、“FOSC”、“总线”侧;CPU板跳线帽短接至“总线”;键盘显示板3

的“JK”置系统。

2.连线:

①CPU板的 USB口→计算机USB口;

②CPU板和键盘显示板:IOW→IOW,IOR→IOR,JD→JD,A0→A0,A1→A1,RST→RST,FF20→CS-8255K;

③ CPU板和电机音响继电器板:Pl.0~P1.3→HA~HD 。

3联机调试

1)开启实验箱电源,启动Keil软件,新建工程,创建文件,添加文件到工程,编译。

2)右键点击选择

①设置晶振:实验箱用11.0592MHz;

②选择硬件仿真;

③选择通信端口。

3)点击编译下载、开始调试、全速运行程序后,全速运行程序后,通过键盘设置输入正、反转命令(0、1),转动参数(0~F),转动步数后,步进电机开始转动,步数逐渐减小到零时步进电机停止转动。

四、内存使用分配表

内存使用分配表如表4.1

0FFDCH

0FFDDH

0FFDEH

ACC、R0~R7

字形口

字形口/键扫口

键入口

存入中间值

4

79H~7EH

表4.1 内存使用分配表

五、设计说明及流程

1、数码管显示字形

显示缓冲单元,存放显示器的显示数据

LED显示器是由发光二极管构成的字段组成的显示器。采用动态显示方式,即一位一位地轮流点亮(扫描)6位显示器。在8032RAM存储器中设置六个显示缓冲区单元7EH-79H,分别存放6位显示器的显示数据(从高到低)。

显示子程序程序框图如图5.1。

图5.1 显示子程序程序框图

2、键盘输入模块

实验系统有4×8的键盘结构(见键扫显示原理图)。键盘的行线通过电阻接+5V,当键盘上没有键闭合时所有的行线和列线都断开,行线都为高电平。当键盘上某一键闭合时,则该键所对应的行线和列线都短路。

5

CPU逐行逐列地检查键盘的状态,可判断键盘上有无键闭合。CPU对键盘上闭合键的键号确定,可根据行线和列线的状态计算求得,也可以根据行线和列线的状态查表求得。

键输入程序框图如图5.2。

图5.2 键输入程序框图

3、步进电机控制模块

四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,激励一相即对该相置“ 1”,控制每一拍的间隔时间用延时子程序实现。步进电机控制程序框图如图5.3。

6

图5.3 步进电机控制程序框图

六、程序清单

ORG 0000H

AJMP MAIN

ORG 0050H

MAIN:MOV DPTR,#0FF23H ;主程序

MOV A,#10000001B

MOVX @DPTR,A

MOV 79H,#00H

MOV 7AH,#00H

MOV 7BH,#00H

MOV 7CH,#00H

MOV 7DH,#00H

MOV 7EH,#00H

MOV R1,#7EH ;取显示内存缓充区的第一位

START:ACALL KEY1 ;调用按键程序

7

MOV @R1,A

CJNE R1,#78H,KS

CJNE A,#16H,AGAIN

LJMP RUN

AGAIN:LJMP MAIN

KS:DEC R1

LJMP START

RUN:MOV A,7EH

JZ ZHENG

JNZ FAN

SJMP $

ZHENG:MOV P1,#03H

ACALL DELAY

MOV P1,#06H

ACALL DELAY

MOV P1,#0CH

ACALL DELAY

MOV P1,#09H

ACALL DELAY

ANL 79H,#0FH

ANL 7AH,#0FH

ANL 7BH,#0FH

ANL 7CH,#0FH

;获得的值存放到7EH中

;是否到78H,不到转KS

;是否按下EXEC键,若是则跳转到RUN

;调转到步进电机控制部分

;取当前所存

;跳转到正转

;跳转到反转

;给AB两相脉冲

;调用延时子程序

;给BC两相脉冲

;调用延时子程序

;给CD两相脉冲

;调用延时子程序

;给DA两相脉冲

;调用延时子程序

;取7EH低四位

;取7DH低四位

;取7CH低四位

;取7BH低四位

8

LCALL DIR

MOV R5,79H

CJNE R5,#0,Z1

MOV 79H,#0FH

DEC 79H

MOV R5,7AH

CJNE R5,#0,Z2

MOV 7AH,#0FH

DEC 7AH

MOV R5,7BH

CJNE R5,#0,Z3

MOV 7BH,#0FH

DEC 7BH

MOV R5,7CH

CJNE R5,#0,Z4

LJMP MAIN

Z1:DEC 79H

LJMP ZHENG

Z2:DEC 7AH

LJMP ZHENG

Z3:DEC 7BH

LJMP ZHENG

Z4:DEC 7CH

;调用显示子程序

;步数由设定值降至0停止

9

LJMP ZHENG

FAN:MOV P1,#09H ;给AD相脉冲

ACALL DELAY ;调用延时子程序

MOV P1,#0CH ;给DC相脉冲

ACALL DELAY

MOV P1,#06H

ACALL DELAY

MOV P1,#03H

ACALL DELAY

ANL 79H,#0FH

ANL 7AH,#0FH

ANL 7BH,#0FH

ANL 7CH,#0FH

LCALL DIR

MOV R5,79H

CJNE R5,#0,F1

DEC 79H

MOV R5,7AH

CJNE R5,#0,F2

DEC 7AH

MOV R5,7BH

CJNE R5,#0,F3

DEC 7BH

;调用延时子程序

;给CB相脉冲

;调用延时子程序

;给BA相脉冲

;调用延时子程序

;取7EH低四位

;取7DH低四位

;取7CH低四位

;取7BH低四位

;步数自减部分

10

MOV R5,7CH

CJNE R5,#0,F4

LJMP MAIN

F1:DEC 79H

LJMP FAN

F2:DEC 7AH

LJMP FAN

F3:DEC 7BH

LJMP FAN

F4:DEC 7CH

LJMP FAN

DELAY:MOV A,#10H

SUBB A,7DH

MOV R1,A

DELAY10:ACALL DIR

DELAY13:DJNZ R1,DELAY10

RET

DIR:MOV R0,#79H

MOV R3,#0FEH

LD0:MOV DPTR,#SEG

MOV A,@R0

MOVC A,@A+DPTR

CPL A

SEG

11

;延时调速部分 ;扫描值送到 ;查表 ;取反

MOV DPTR,#0FF21H ;扫描值送到PB口

MOVX @DPTR,A

MOV A,R3 ;显示字位

MOV DPTR,#0FF20H

MOVX @DPTR,A ;扫描方式8255口

ACALL DL1 ;延时

INC R0 ;缓冲区地址加1

MOV A,R3

JNB ACC.5,LD1 ;判断是否扫描到第六个显示位

RL A

MOV R3,A

AJMP LD0

LD1:RET

SEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, ;显示字码段

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H,73H

DL1:MOV R7,#02H ;延时子程序

DL:MOV R6,#0FFH

DLA:DJNZ R6,DLA

DJNZ R7,DL

RET

KEY1:ACALL KS1 ;调用判断有无键按下子程序

JNZ LK1 ;有键按下,转消颤延时

ACALL DIR ;无键按下,调用显示子程序

12

AJMP KEY1 ;返回KEY1,继续等待

LK1:ACALL DIR ;调用显示子程序

ACALL T12ms ;调用12ms延时子程序

ACALL KS1

JNZ LK2

AJMP KEY1

LK2:MOV R2,#0FEH

MOV R4,#00H

LK4:MOV DPTR,#0FF20H

MOV A,R2

MOVX @DPTR,A

MOV DPTR,#0FF22H

MOVX A,@DPTR

JB ACC.0,LONE

MOV A,#00H

AJMP LKP

LONE:JB ACC.1,LTOW

MOV A,#08H

AJMP LKP

LTOW:JB ACC.2,LTHR

MOV A,#10H

AJMP LKP

LTHR:JB ACC.3,NEXT

;调用判断有无键按下子程序,确认按键真实性

;有键按下转逐列扫描子程序

;否则返回KEY1,继续等待

;首列扫描字入R2

;首列号入R4

;列扫面字送至键扫口

;第一次列扫描

;使第0列线为0

;指向键入口

;键入口读入行状态

;第0行无键按下,转查第1行

;第0行有键按下,该行首键号#00H

;第1行无键按下,转查第2行

;第1行有键按下,该行首键号#08H

;第2行无键按下,转查第3行

;第2行有键按下,该行首键号#10H

;第3行无键按下,转查下一列

13

MOV A,#18H

LKP:ADD A,R4

MOV DPTR,#TAB

MOVC A,@A+DPTR

PUSH ACC

LK3:ACALL DIR

ACALL KS1

JNZ LK3

POP ACC

RET

NEXT:INC R4

MOV A,R2

JNB ACC.7,KND

RL A

MOV R2,A

AJMP LK4

KND:AJMP KEY1

KS1:MOV DPTR,#0FF20H

MOV A,#00H

MOVX @DPTR,A

MOV DPTR,#0FF22H

MOVX A,@DPTR

CPL A

;第3行有键按下,该行首键号#18H

;求原理图上的键号=行首键号+列号

;查找TAB1,将实际键号赋给A

;将键号压入堆栈

;调用显示子程序

;等待键释放

;未释放,等待

;键释放,键号A

;键扫描结束,出口状态(A)=实际键号;指向下一列,列号加1

;判断8列是否扫描完

;8列扫描完,返回

;扫描字左移一位,转变为下一列扫描字

;扫描字入R2

;转下一列扫描

;指向键扫口

;全扫描字#0H

;全扫描字入键扫口

;指向键入口

;读键入口行状态

;变正逻辑,以高电平表示有键按下

14

ANL A,#0FH ;屏蔽高4位

RET ;出口状态,(A)=1时有键按下

T12ms:MOV R7,#18H ;延时12ms子程序

TM:MOV R6,#0FFH

DJNZ R6,$

DJNZ R7,TM

RET

TAB:DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H, ;键表

DB 0FH,03H,0EH,0CH,0DH,00H,00H,00H,00H,00H,00H,16H

END

七、设计心得

通过四天的学习和设计,让我将课上学习到的知识与实践更好的结合起来,通过单片机来实行简单或复杂的控制不再陌生。通过编程,我更熟悉单片机的原理和汇编语言。这对我们以后的学习或工作肯定大有益处。我们电气专业的各个专业之间都有着紧密的联系,嵌入式系统及应用的各种知识也会运用到其他学科,比如微机原理或PLC课程,所以我们不仅仅要学好一门课程,更要注重各个学科之间的联系。

15


本文标签: 电机 显示 步进 键盘 子程序