步进电机控制系统课程设计.docx
《步进电机控制系统课程设计.docx》由会员分享,可在线阅读,更多相关《步进电机控制系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
步进电机控制系统课程设计
计算机与信息科学系
课程设计报告
课程名称:
微型计算机控制技术
设计题目:
步进电机控制系统
1.系统概述1
1.1步进电机控制工作原理1
1.2系统设计思路1
2.系统硬件设计2
2.1总体设计2
2.2步进电机控制电路3
2.3显示电路4
3.系统软件设计5
3.1总体设计5
3.2关键模块设计10
4.结束语10
4.1设计感想14
4.2个人分工情况15
参考文献15
附录15
1.系统概述
1.1步进电机控制工作原理
步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。
步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。
从结构上看,步进电机分为三相、四相、五相等类型,常用的则以三相为主。
三相步进电机的工作方式有三相单三拍、三相双三拍和三相六拍3种,下面具体加以阐述。
1.1.1步进电机的启停控制
步进电机由于其电气特性,运转时会有步进感,即振动感。
为了使电机转动平滑,减小振动,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波,可以减小步进电机的步进角,提高电机运行的平稳性。
在步进电机停转时,为了防止因惯性而使电机轴产生顺滑,则需采用合适的锁定波形,产生锁定磁力矩,锁定步进电机的转轴,使步进电机的转轴不能自由转动。
1.1.2步进电机的转向控制
如果给定工作方式正序换相通电,步进电机正转。
若步进电机的励磁方式为三相六拍,即A-AB-B-BC-C-CA。
如果按反序通电换相,即则电机就反转。
其他方式情况类似。
1.1.3步进电机的速度控制
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
2个脉冲的间隔越短,步进电机就转得越快。
调整送给步进电机的脉冲频率,就可以对步进电机进行调速。
1.1.4步进电机的换向控制
步进电机换向时,一定要在电机减速停止或降到突跳频率范围之内再换向,以免产生较大的冲击而损坏电机。
换向信号一定要在前一个方向的最后一个脉冲结束后以及下一个方向的第1个脉冲前发出。
对于脉冲的设计主要要求要有一定的脉冲宽度(一般不小于5μs)、脉冲序列的均匀度及高低电平方式。
在某一高速下的正、反向切换实质包含了减速→换向→加速3个过程。
1.2系统设计思路
此次我们所设计的是一个步进电机控制系统,主要由单片机80C51,并行输入/输出接口8255A,3相步进电机,7段数码管,及一些其他相关元件设计而成。
可以通过开关来控制系统的启/停工作,当系统运转时,用开关来控制方向,并使相应的指示灯亮起,同样由开关来选择工作模式,这次设计并不是使用键盘来输入运转步数,而是由8个开关置0/1设步数。
运转时,用3位7段数码管来输出剩余步数。
最后根据思路所设计出来的硬件图设计相适应的软件。
详细的设计步骤将在下面说明。
2.系统硬件设计
2.1总体设计
设计一个单片机三相步进电机控制系统要求系统具有如下功能:
(1)用K0-K2做为通电方式选择键,K0为单三拍,K1为双三拍,K2为三相六拍;
(2)K3、K4分别为启动和方向控制;
(3)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿色指示灯亮;
(4)用K5-K12作为步数的给定值。
(5)用3位LED显示剩余工作步数。
根据设计要求用PROTIU所做的硬件连线图如下图1:
图1
2.2步进电机控制电路
2.2.1启/停控制、正/反转控制、工作模式控制电路分析
(1)K3为启/停控制开关,控制整个系统的开启和关闭。
(2)K4为正/反转控制开关,控制步进电机的转向。
(3)K0-K3为工作模式控制开关,KO接电时,为步进电机单三拍工作模式;K1接电时,为步进电机双三拍工作模式;K2接电时,步进电机工作模式为三相六拍。
如图2:
图2
2.2.2步数给定值控制电路
用8255A的PA8个口来作为步数的输入口,用开关K5-K12来控制8位2进制数的数值,开关接电则为1,接地为0,控制步数范围0—255。
如图3:
图3
2.2.3步进电机控制电路
将80c51的P1.0-P1.3作为步进电机的输出控制口。
如图4:
图4
2.3显示电路
2.3.1发光二极管显示电路
用3个不同颜色的发光二极管来作为指示灯显示,将PC7接红灯,PC6接黄灯,PC5接绿灯,正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿色指示灯亮。
图5
2.3.2八段数码管显示电路
由8255A的PB口取出显示码如图6,从80c51的P1.5-1.7输出位选码如图7,设计中我们主要用到3位显示步数既可。
图6图7
3.系统软件设计
3.1总体设计
3.1.1步进电机的工作方式
(1)三相单三拍工作方式
在这种工作方式下,A、B、C三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。
因此这种通电方式叫做三相单三拍工作方式。
这时步距角θb(度)为
θb=360/mz (公式1)
式中:
m──定子相数;z──转子齿数
单三拍的数学模型:
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
C相
P1.1
B相
P1.0
A相
1
0
0
0
0
0
0
0
1
A
01H
2
0
0
0
0
0
0
1
0
B
02H
3
0
0
0
0
0
1
0
0
C
04H
表1
(2)三相六拍工作方式
在这种工作方式下,绕组以A—AB—B—BC—C—CA—A时序(或反时序)转换6次,磁场旋转一周,转子前进一个齿距,每次切换均使转子转动1.5°,故这种通电方式称为三相六柏工作方式。
其步距角θb为:
θb=360/2mz=180/mz (公式2)
六拍的数学模型:
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
C相
P1.1
B相
P1.0
A相
1
0
0
0
0
0
0
0
1
A
01H
2
0
0
0
0
0
0
1
1
AB
03H
3
0
0
0
0
0
0
1
0
B
02H
4
0
0
0
0
0
1
1
0
BC
06H
5
0
0
0
0
0
1
0
0
C
04H
6
0
0
0
0
0
1
0
1
CA
05H
表2
(3)双三拍工作方式
这种工作方式每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CA─AB(或反之)方式通电,故称为双三拍工作方式。
以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置。
它的步距角计算公式与单三拍时的公式相同。
极分度角/齿距角=R+k·1/m
进一步化简得齿数z:
z=q(mR+k) (公式3)
式中:
m──相数;q──每相的极数;k──≤(m-1)的正整数;
R──正整数,为0、1、2、3……。
双三拍的数学模型:
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
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
0
1
0
1
CA
05H
表3
3.1.2系统总体流程图
设计说明:
设8255地址为8000-8300H,显示位地址为30H。
首先复位单片机,然后判断是否启动,没启动绿灯亮重新确认启动。
启动后读取PC口数据,判断工作方式。
接着由双向开关K5到K12来置入步数值到R0中。
由PC4口的双向开关来控制步进电机的正反转,如果是正转则红灯亮,反转则绿灯亮。
前置流程已经完毕,接着就是由P1口输入控制模型来让步进电机转动,每走一步R0-1,没走完继续直至RO=0。
最后由八段数码管同步输出所剩步数。
具体流程详见下流程图。
图8
总体程序设计:
ORG0000H
AJMPMAIN
MAIN:
MOVA,#020H;PC5口置1,绿灯亮,不工作
MOVDPTR,#8002
MOVX@DPTR,A
LCALLDELAY
LOOP:
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#020H;判断是否启动,若没启动则重新启动
JZMAIN
MOVDPTR,#8002;判断工作模式;
MOVXA,@DPTR
ANLA,#01H
JNZL1
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#02H
JNZL2
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#04H
JNZA,L3
L1:
MOVDPTR,#DONE1;跳转到方式1的控制模型
JMPLP2
L2:
MOVDPTR,#DONE2;跳转到方式2的控制模型
JMPLP2
L3:
MOVDPTR,#DONE3;跳转到方式3的控制模型
JMPLP2
LP2:
MOVDPTR,#8000;读入PA口设定的步数到R2
MOVXA,#DPTR
MOVR0,A
LP3:
MOVDPTR,#8002;判断PC4口(正反转口)是否为0,为0电机反转
MOVXA,#DPTR
ANLA,#010H
JZLP5
MOVA,#080H;PC4不为0,正转,红灯亮
MOVR1,#00H
LP4:
MOVA,R1;P1口输出电机模型
MOVCA,@A+DPTR
JZLP3
MOVP1,A
LCALLDELAY
INCR1;控制步数加1
DECR0;剩余步数减1
LCALLLED;LED显示剩余步数
DJNZR0,LP4;步数未走完,继续
RET
LP5:
MOVA,#040H;PC4为0,反转,黄灯亮
MOVR1,A
AJMPLP4
DONE1:
DB01H,02H,04H,00H,01H,04H,02H,00H
DONE2:
DB03H,06H,05H,00H,03H,05H,06H,00H
DONE3:
DB01H,03H,02H,06H,04H,05H,00H,01H,05H,04H,06H,02H,03H,00H
DELAY:
MOVR2,#0
DELAY0:
MOVR4,DELAY0
RET
DISPLY:
MOVA,#30H;(显示输出参考课本P68)
MOVDPTR,#8001
MOV@DPTR,A
MOVR2,#30H;显示缓冲区首地址送R2
MOVR3,#04H;位选码指向最左一位,第三位
DISPY1:
MOVA,@R;取出要显示的数
MOVDPTR,#SEGTAB;指向换吗表首址
MOVCA,@A+DPTR;取出显示码
MOVDPTR,#8001;从B口输出显示码
MOVA,R3;从P1口输入位选码
MOVP1,A
LCALLDELAY
MOVA,R3
JNBACC.O,DISPY2
RET
DISPY2:
INCR2;求下一位待显示的数的存放地址
MOVA,R3;求下一个位选码
RRA
MOVR3,A
AJMPDISPY1
DELAY:
MOVR4,#20;延时程序
DELAY1:
MOVR5,#0
DJNZR5,DELAY1
DJNZR4,DELAY1
RET
SEGTAB:
DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;对应字符0~F,8段管显示码
END
3.2关键模块设计
3.2.1三相步进电机模块设计
设计说明:
在此设计中,采用的是三相步进电机,对于步进电机模块的程序设计采用循环程序设计方法。
先把正反转向的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。
首先启动,选择步进电机的拍数,输入步数,然后读入正反转的控制模型驱动步进电机转动。
三相步进电机的模块子程序设计:
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#020H;判断是否启动,若没启动则重新启动
JZMAIN
MOVDPTR,#8002;判断工作模式;
MOVXA,@DPTR
ANLA,#01H
JNZL1
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#02H
JNZL2
MOVDPTR,#8002
MOVXA,@DPTR
ANLA,#04H
JNZA,L3
L1:
MOVDPTR,#DONE1;跳转到方式1的控制模型
JMPLP2
L2:
MOVDPTR,#DONE2;跳转到方式2的控制模型
JMPLP2
L3:
MOVDPTR,#DONE3;跳转到方式3的控制模型
JMPLP2
LP2:
MOVDPTR,#8000;读入PA口设定的步数到R2
MOVXA,#DPTR
MOVR0,A
LP3:
MOVDPTR,#8002;判断PC4口(正反转口)是否为0,为0电机反转
MOVXA,#DPTR
ANLA,#010H
JZLP5
MOVA,#080H;PC4不为0,正转,红灯亮
MOVR1,#00H
LP4:
MOVA,R1;P1口输出电机模型
MOVCA,@A+DPTR
JZLP3
MOVP1,A
LCALLDELAY
INCR1;控制步数加1
DECR0;剩余步数减1
LCALLLED;LED显示剩余步数
DJNZR0,LP4;步数未走完,继续
RET
LP5:
MOVA,#040H;PC4为0,反转,黄灯亮
MOVR1,A
AJMPLP4
DONE1:
DB01H,02H,04H,00H,01H,04H,02H,00H
DONE2:
DB03H,06H,05H,00H,03H,05H,06H,00H
DONE3:
DB01H,03H,02H,06H,04H,05H,00H,01H,05H,04H,06H,02H,03H,00H
三相步进电机的流程框图:
图9
3.2.2显示模块设计
设计说明:
显示模块是用3位八段数码管来显示剩余步数。
先将显示缓冲区首地址送R2,指向最左边一位,然后取出要显示的数据,指向换码表首地址,取出显示码,从PB口输出显示码,P1口输入位选码,显示出3位剩余步数,最后修改显示缓冲区,求下一位位选码继续显示。
显示模块的程序框图:
图10
显示模块子程序:
DISPLY:
MOVA,#30H
MOVDPTR,#8001
MOV@DPTR,A
MOVR2,#30H;显示缓冲区首地址送R2
MOVR3,#04H;位选码指向最左一位,第三位
DISPY1:
MOVA,@R;取出要显示的数
MOVDPTR,#SEGTAB;指向换吗表首址
MOVCA,@A+DPTR;取出显示码
MOVDPTR,#8001;从B口输出显示码
MOVA,R3;从P1口输入位选码
MOVP1,A
LCALLDELAY
MOVA,R3
JNBACC.O,DISPY2
RET
DISPY2:
INCR2;求下一位待显示的数的存放地址
MOVA,R3;求下一个位选码
RRA
MOVR3,A
AJMPDISPY1
DELAY:
MOVR4,#20;延时程序
DELAY1:
MOVR5,#0
DJNZR5,DELAY1
DJNZR4,DELAY1
RET
SEGTAB:
DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;对应字符0~F,8段管显示码
4.结束语
4.1设计感想
经过这个学期对微机的深入学习,并且在老师的悉心指导和严格要求下,我们终于完成了三相步进电机设计课程。
从书本上的知识到自己亲手的课程设计,每一步对我们来说无疑是巨大的尝试和挑战,也成就了我们目前在大学期间独立完成的最大的项目。
记得在刚接到这个课题时,由于对相关知识不是很了解,我们都有些茫然不知所措。
设计好一个步进电机需要什么专业知识?
带着这个疑问我们开始了地学习和实验:
去图书馆查阅相关资料、上网去了解相关的内容,渐渐头脑中的概念清晰了起来。
在具体设计的过程中,我们遇到了更大的困难。
我们不断地给自己提出新的问题,然后去论证、推翻,再接着提出新的问题。
在这个循环往复的过程中,我们这篇稚嫩的设计日臻完善。
虽然我们的设计作品不是很成熟,即使借鉴前人的很多资料仍然还有很多不足之处,但我仍然心里有一种莫大的幸福感,因为我们实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程。