基于单片机的步进电机的控制课程设计报告.docx
《基于单片机的步进电机的控制课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机的控制课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机的控制课程设计报告
单片机课程设计报告
步进电机控制
学院:
电气学院
班级:
电气0904
******
学号:
*******097
一.设计任务
了解步进电机的原理,设计一套以51单片机为核心的步进电机控制器,步进电机采用四相四拍或四相八拍工作方式,键盘和显示器采用实验室试验箱。
了解十六只键组成的键盘(用于输入)及六只LED构成的显示器(用于显示)的原理,分别设计他们的程序,在电脑上进行仿真。
具体要求
1、从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。
2、显示器上显示:
第一位为0表示正转,为1表示反转;第二位0~F为转速等级,第三到第六位设定步数。
3、单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。
二.工作原理
1、步进电机基本原理
如图,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。
那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。
相数:
产生不同对极N、S磁场的激磁线圈对数。
拍数:
指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍运行方式即A-AB-B-BC-C-CD-D-DA-A.
步距角:
对应一个脉冲信号电机转子转过的角位移.步距角=360/(转子齿数*拍数)
2、LED显示器原理
LED显示器由七条发光二极管组成显示字段,有的还带有一个小数点。
将七段发光二极管阴极连在一起,称为共阴极接法,当某个字段的阳极为高电平时,对应的字段就点亮。
共阳极接法是将LED的所有阳极并联后接到+5v上,当某一字段的阴极为0时,对应的字段就点亮。
3、键盘接口原理
键盘实际上是又排列成矩阵形式的一系列按键开关组成,用户通过键盘可以向CPU输入数据、地址和命令。
本设计采用8155接口芯片构成的4*8键盘的接口电路,其中A口为输出,作为列线;C口为输入,作为行线。
当所有的键没有被按下时,C口输入均为高;若某列线为低,恰好该列上有键被按下,则键所在的行线为低。
三.设计原理
系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。
步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。
四.连线图
步进电机模块插头接实验系统J3插座,(顺接)
把P1.0~P1.3分别接到BA~BD插孔。
五.设计说明及流程
1.数码管显示字形
LED显示器是由发光二极管构成的字段组成的显示器。
显示程序任务:
设置显示缓冲区(7EH-79H),存放待显示数据和字符(位置码)。
显示译码:
程序存储器中建立字形码常数表,查表得出对应数据和字符的字形码。
输出显示:
输出字形码到显示端口
2.字位口表(从高位起)
3.键盘显示原理图
(1)显示子程序模块
采用动态显示方式,即一位一位地轮流点亮(扫描)6位显示器。
在8032RAM存储器中设置六个显示缓冲区单元7EH-79H,分别存放6位显示器的显示数据(从高到低)。
(2)键盘输入模块
实验系统有4×8的键盘结构(见键扫显示原理图)。
键盘的行线通过电阻接+5V,当键盘上没有键闭合时所有的行线和列线都断开,行线都为高电平。
当键盘上某一键闭合时,则该键所对应的行线和列线都短路。
CPU逐行逐列地检查键盘的状态,可判断键盘上有无键闭合。
CPU对键盘上闭合键的键号确定,可根据行线和列线的状态计算求得,也可以根据行线和列线的状态查表求得。
(3)步进电机控制模块
实现步进电机的转动方式以及转速控制原理:
四相四拍运行方式,即AB-BC-CD-DA-AB或A-B-C-D-A
或者四相八拍方式,即A-AB-B-BC-C-CD-D-DA-A-AB实验时控制P1口对应位为“1”。
通过控制每一拍的间隔来控制电机的转速
内存使用分配表
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3D相
P1.2
C相
P1.1
B相
P1.0
A相
1
0
0
0
0
0
0
1
1
AB
03H
2
0
0
0
0
0
1
1
0
BC
06H
3
0
0
0
0
1
1
0
0
CD
OCH
4
0
0
0
0
1
0
0
1
DA
09H
键位地址分配:
07H,04H,08H,05H,09H,06H,
0AH,0BH,01H,00H,02H,0FH,
03H,0EH0CH,0DH,00H,00H,
00H,00H,00H,00H,16H
六.程序清单
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVSP,#40H;主程序部分
MOV79H,#00H
MOV7AH,#00H
MOV7BH,#00H
MOV7CH,#00H
MOV7DH,#00H
MOV7EH,#00H
MOVR1,#7EH;取显示内存缓冲区的第一位a
MAIN1:
ACALLKEY;调用按键程序
MOV@R1,A;获得的值存放到7E中
CJNER1,#78H,KS;是否到79,不是,转KS
CJNEA,#16H,AGAIN;按下的不是exc(给定值0FFH),是则跳转到run
LJMPRUN;跳转到步进电机控制部分
AGAIN:
LJMPMAIN
KS:
DECR1
LJMPMAIN1
RUN:
MOVA,7EH;取(7EH)当前所存
JZZHEN;跳转到正转
JNZFAN;跳转到反转
SJMP$
ZHEN:
MOVP1,#03H;正转部分
ACALLDELAY
MOVP1,#06H
ACALLDELAY
MOVP1,#0CH
ACALLDELAY
MOVP1,#09H
ACALLDELAY;调用延时子程序
ANL79H,#0FH
ANL7AH,#0FH
ANL7BH,#0FH
ANL7CH,#0FH
LCALLDIR
LCALLDIR
MOVR5,79H
CJNER5,#0,Z1
DEC79H
MOVR5,7AH
CJNER5,#0,Z2
DEC7AH
MOVR5,7BH
CJNER5,#0,Z3
DEC7BH
MOVR5,7CH
CJNER5,#0,Z4
LJMPMAIN
Z1:
DEC79H
LJMPZHEN
Z2:
DEC7AH
LJMPZHEN
Z3:
DEC7BH
LJMPZHEN
Z4:
DEC7CH
LJMPZHEN
FAN:
MOVP1,#09H;反转部分
ACALLDELAY
MOVP1,#0CH
ACALLDELAY
MOVP1,#06H
ACALLDELAY
MOVP1,#03H
ACALLDELAY
ANL79H,#0FH
ANL7AH,#0FH
ANL7BH,#0FH
ANL7CH,#0FH
LCALLDIR
LCALLDIR
MOVR5,79H
CJNER5,#0,F1
DEC79H
MOVR5,7AH
CJNER5,#0,F2
DEC7AH
MOVR5,7BH
CJNER5,#0,F3
DEC7BH
MOVR5,7CH
CJNER5,#0,F4
LJMPMAIN
F1:
DEC79H
LJMPFAN
F2:
DEC7AH
LJMPFAN
F3:
DEC7BH
LJMPFAN
F4:
DEC7CH
LJMPFAN
DELAY:
MOVR7,#0FFH
DELAY10:
MOVR6,7DH
DELAY11:
MOVR5,7DH
DELAY12:
DJNZR6,DELAY12
DELAY13:
DJNZR5,DELAY13
DJNZR7,DELAY10
RET
DIR:
MOVR0,#79H;显示子程序
MOVR3,#01H
DI0:
MOVDPTR,#TEP
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVDPTR,#0FFDCH
MOVX@DPTR,A
MOVA,R3
MOVDPTR,#0FFDDH
MOVX@DPTR,A
ACALLDELAY1
INCR0
MOVA,R3
JBACC.5,DI1
RLA
MOVR3,A
AJMPDI0
DI1:
RET
TEP:
DB3FH,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,00H
DELAY1:
MOVR7,#02H;显示延时10ms子程序
DE1:
MOVR6,#0FFH
DE2:
DJNZR6,DE2
DJNZR7,DE1
RET
;按键子程序
KEY:
ACALLKS1;掉用判断有无键按下子程序
JNZK1;有键按下时,(A)!
=0,转消抖延时
ACALLDIR;调用显示
AJMPKEY;无键按下返回
K1:
ACALLDIR;调用显示
ACALLDIR;调用显示
ACALLKS1;查有无键按下,若有则为键确认按下
JNZK2;键按下,(A)!
=0,转逐列扫描
AJMPKEY;不是键按下就返回
K2:
MOVR2,#0FEH;首列扫描字入R2
MOVR4,#00H;首列号入R
K3:
MOVDPTR,#0FFDDH;列扫描字送8155PA口
MOVA,R2;第一次列扫描
MOVX@DPTR,A;使第0列线为0
INCDPTR
INCDPTR;指向8155PC口
MOVXA,@DPTR;8155PC口读入行状态
JBACC.0,K4;第0行无键按下,转查第1行,ACC.0=0时为有键按下
MOVA,#00H;第0行有键按下,该行首键号#00H送A
AJMPLKP;转求键号
K4:
JBACC.1,K5;第1行无键按下,转查第2行
MOVA,#08H;该行有键按下,该行首键号#08H送A
AJMPLKP
K5:
JBACC.2,K6;第2行无键按下,转查第3行
MOVA,#10H;若该行有键按下,该行首键号#10H送A
AJMPLKP
K6:
JBACC.3,NEXT;若第3行无键按下,改查下一列
MOVA,#18H;若该行有键按下,该行首键号#18H送A
LKP:
ADDA,R4;键号=行首键号+列号
MOVDPTR,#TAB
MOVCA,@A+DPTR
PUSHACC;键号进栈保护
LK3:
ACALLDIR
ACALLKS1;等待键释放
JNZLK3;若未释放,等待
POPACC;键释放,缄好送A
RET;键扫描结束,出口状态:
(A)=键号
NEXT:
INCR4;指向下一列,列号加1
MOVA,R2;判断8列扫描完没有
JNBACC.7,KND;8列扫描完,返回
RLA;扫描字左移一位,转变为下一列扫描字
MOVR2,A;扫描字入R2
AJMPK3;转向下一列扫描
KND:
AJMPKEY
KS1:
MOVDPTR,#0FFDDH;指向PA口
MOVA,#00H;全扫描字#00H=00000000B
MOVX@DPTR,A;全扫描字送PA口
INCDPTR;指向PC口
MOVXA,@DPTR;读入PC口行状态
CPLA;变正逻辑,以高电平表示有键按下
ANLA,#0FH;屏蔽高四位
RET;出口状态:
(A)!
=0时有键按
TAB:
DB07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH;键表
DB0CH,0DH,00H,00H,00H,00H,00H,00H,16H;16H对应启动键(即exc键)
END
七.心得体会
这次单片机课程设计我们历时一个星期,在我们班里算是倒数几组完成的吧,但经过这两个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。
现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的