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
版权声明:本文标题:《嵌入式系统及应用》课程设计报告---步进电机控制 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1706281650a505145.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论