单片机课程设计步进电机控制.docx
《单片机课程设计步进电机控制.docx》由会员分享,可在线阅读,更多相关《单片机课程设计步进电机控制.docx(16页珍藏版)》请在冰豆网上搜索。
单片机课程设计步进电机控制
单片机课程设计
姓名:
穆森
学号:
3090501068
班级:
电气0903
2012/6/21
一、设计任务、原理、步骤
任务:
从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。
显示器上显示:
第一位为0表示正转,为1表示反转;第二位0~F为转速等级,第三到第六位设定步数。
单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。
原理:
如图,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。
那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。
相数:
产生不同对极N、S磁场的激磁线圈对数。
拍数:
指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍运行方式即A-AB-B-BC-C-CD-D-DA-A.
步距角:
对应一个脉冲信号电机转子转过的角位移.步距角=360/(转子齿数*拍数)
系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。
步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。
步骤:
先设计键盘显示程序,根据书本的键盘扫描程序与数码管显示程序,把二者整合到一起,成功后,再做驱动电机程序,在键盘显示程序的基础上,进行扩张,实现电机的正反转与调速控制。
二、硬件原理接线图
键盘显示原理图
连线图
⏹步进电机模块插头接实验系统J3插座,(顺接)
⏹把P1.0~P1.3分别接到BA~BD插孔。
三、流程图
按键流程图
数码管显示流程图
电机控制程序流程图
四、程序清单
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVSP,#40H;主程序
MOV79H,#10H;初始化,使数码管“灭”
MOV7AH,#10H
MOV7BH,#10H
MOV7CH,#10H
MOV7DH,#10H
MOV7EH,#10H
MOVR1,#7EH
MAIN1:
ACALLKEY;调用键盘扫描子程序
MOV@R1,A;把键值送入显示缓冲区
CJNER1,#78H,KS;显示缓冲区是否存满
CJNEA,#16H,MAIN;确认键是否按下
LJMPRUN
KS:
DECR1
LJMPMAIN1
RUN:
MOVA,7EH;电机运行
JZZHEN;跳正转子程序
JNZFAN;跳反转子程序
ZHEN:
MOVP1,#03H;AB相加脉冲
ACALLDELAY;延时
ACALLJINAYI1;减一
ACALLDIR;显示
MOVP1,#06H;BC相加脉冲
ACALLDELAY
ACALLJINAYI1
ACALLDIR
MOVP1,#0CH
ACALLDELAY
ACALLJINAYI1
ACALLDIR
MOVP1,#09H
ACALLDELAY
ACALLJINAYI1
ACALLDIR
ACALLZHEN
FAN:
MOVP1,#09H
ACALLDELAY
ACALLJIANYI2
ACALLDIR
MOVP1,#0CH
ACALLDELAY
ACALLJIANYI2
ACALLDIR
MOVP1,#06H
ACALLDELAY
ACALLJIANYI2
ACALLDIR
MOVP1,#03H
ACALLDELAY
ACALLJIANYI2
ACALLDIR
LJMPFAN
DELAY:
MOVR7,#02H
DELAY10:
MOVR6,7DH
DELAY12:
DJNZR6,DELAY12
DJNZR7,DELAY10
RET
JIANYI1:
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
RET
Z2:
DEC7AH
RET
Z3:
DEC7BH
RET
Z4:
DEC7CH
RET
JIANYI2:
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
RET
F2:
DEC7AH
RET
F3:
DEC7BH
RET
F4:
DEC7CH
RET
KEY:
ACALLKS1;调用判断有无键按下子程序
JNZLK1
ACALLDIR
AJMPKEY
LK1:
ACALLDIR
ACALLDIR
ACALLKS1
JNZLK2
AJMPKEY
LK2:
MOVR2,#0FEH;首列扫描字入R2
MOVR4,#00H;首列号入R4
LK3:
MOVDPTR,#0FFDDH
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#0FFDEH
MOVXA,@DPTR
JBACC.0,LK4;ACC.0为1则跳转,即第0行按键未按下
MOVA,#00H
AJMPLKP
LK4:
JBACC.1,LK5;第1行无按键按下,转差第2行
MOVA,#08H
AJMPLKP
LK5:
JBACC.2,LK6;第2行无按键按下,转差第3行
MOVA,#10H
AJMPLKP
LK6:
JBACC.3,NEXT;第3行无按键按下,改查下一列
MOVA,#18H
LKP:
ADDA,R4;求键号
MOVDPTR,#TAB
MOVCA,@A+DPTR
PUSHACC;键号进栈保护
LKP1:
ACALLKS1;等待键释放
JNZLKP1
POPACC
RET
NEXT:
INCR4;指向下一列,列号加1
MOVA,R2
JNBACC.7,KND;8列扫描完,返回
RLA
MOVR2,A
AJMPLK3
KND:
AJMPKEY
KS1:
MOVDPTR,#0FFDDH
MOVA,#00H
MOVX@DPTR,A
INCDPTR
MOVXA,@DPTR
CPLA
ANLA,#0FH
RET
TAB:
DB07H,04H,08H,05H,09H,06H,0AH,0BH
DB01H,00H,02H,0FH,03H,0EH,0CH,0DH
DB00H,00H,00H,00H,00H,00H,00H,16H
END
DIR:
MOVR0,#79H;显示程序
MOVR3,#01H
LD0:
MOVDPTR,#TEP;写字形
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVDPTR,#0FFDCH
MOVX@DPTR,A
MOVA,R3;写字位
MOVDPTR,#0FFDDH
MOVX@DPTR,A
ACALLDL1;延时
INCR0;显示缓冲区地址加一
MOVA,R3
JBACC.5,LD1;判断是否扫描到第六个显示位
RLA
MOVR3,A
AJMPLD0
LD1:
RET
TEP:
DB3FH,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,00H,73H
DL1:
MOVR7,#02H
DL:
MOVR6,#0FFH
DLA:
DJNZR6,DLA
DJNZR7,DL
RET
五、设计心得体会
为期一周的单片机课程设计,我有很多心得体会,有关于单片机方面的,更多的是人与人之间的。
此次单片机课程设计意义非凡。
一开始,我们组出现了很多问题,例如,如何把键盘与显示程序整合到一起,但是在老师的悉心指导和同学的帮助下,各种问题都被解决了。
此次课程设计不仅增强了同学们的动手实践能力,而且更加丰富了同学们的理论知识,熟悉了汇编语言的编程方法。
除此之外,我还学到了如何与人合作,与人交流。
总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅