四相步进电机控制系统设计课程设计.docx
《四相步进电机控制系统设计课程设计.docx》由会员分享,可在线阅读,更多相关《四相步进电机控制系统设计课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
四相步进电机控制系统设计课程设计
四相步进电机控制系统设计课程设计
课程设计论文(设计)
四相步进电机控制系统
二级学院
医药信息工程
专业
电子信息工程
班级
10电子信息工程
学生姓名
马靖蔡燕微谭美君
学号
指导教师
何永玲余华芳
2013年7月
课程设计任务书
学生姓名:
马靖蔡燕微谭美君专业班级:
10电子信息工程
指导教师:
何永玲余华芳学校:
广东药学院
题目:
四相步进电机控制系统的设计
初始条件:
1、基本要求
自制稳压电源。
1)控制器能够驱动步进电机以四相四拍方式(步距1.8°)正向运转。
2)步进电机运行步数能够预置,每转一步自动减1,直到减到零,此时步进电机应能停止运转。
3)绕组驱动电流不低于0.1安培。
要求性能可靠、操作简便。
2、发挥部分
1)步进电机还可以按四相相单四拍方式(步距1.8°)、四相八拍(步距0.9°)、四相双四拍(步距1.8°)工作。
2)步进电机还可以反向运转。
绕组驱动电流能够达到0.2安培。
由于步进电机价格比较昂贵,控制器的负载可以用低阻值的电阻代替,通过电阻的电流应符合要求,示波器观察脉冲序列应符号要求。
要求完成的主要任务:
1.硬件设计:
系统总原理图及各部分详细原理图
2.软件设计:
系统总体流程图、步进电机单四拍,双四拍,四相八拍各模块流程图、显示模块流程图等
3.编写程序:
能够完成上述任务
4.完成符合要求的设计说明书
时间安排:
2013年6月25日~2013年7月2日
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要1
1设计任务及要求2
2方案论证2
2.1设计思路与方案3
2.2总体设计框图3
3系统实现的原理说明4
3.1步进电机控制工作原理4
3.1.1步进电机的工作原理5
3.1.2步进电机的启停控制5
3.1.3步进电机的转向控制5
3.2步数显示模块原理5
4硬件设计6
4.1系统总原理图7
4.2各部分硬件原理图设计7
4.2.1单片机控制模块7
4.2.2按键选择工作状态模块8
4.2.3步进电机工作模块9
4.2.4工作状态显示模块10
4.2.54位数码管显示步数模块10
5软件设计11
5.1系统总体设计12
5.2步进电机工作模块13
5.2.1步进电机的工作方式说明13
5.2.2设计说明及流程图14
5.3数码管步数显示模块15
6仿真调试记录16
7心得体会17
附录:
程序清单······························································18
摘要
本设计详细介绍了基于单片机的四相步进电机控制系统。
步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,因此,单片机通过向步进电机发送控制信号就能实现对步进电机的控制。
单片机实现的步进电机控制系统具有成本低、使用灵活的特点,该系统采用80C51单片机作为主控芯片,来完成对步进电机转动及LED显示的控制。
本设计主要由单片机80C51,4相步进电机,7段数码管,及一些其他相关元件设计而成,分为按键选择工作状态模块、步进电机工作模块、LED二极管显示工作状态模块以及4位数码管显示步数模块。
可以通过开关来控制系统的启/停工作,当系统运转时,用开关来控制方向,并使相应的指示灯亮起,同样由开关来选择工作模式。
运转时,用4位7段数码管来输出步数。
最后根据思路所设计出来的硬件图设计相适应的软件。
电路结构简单,设计思路清晰,同时利用KEIL和Proteus进行联调仿真,结果比较直观。
仿真结果收到了预期的效果。
关键字:
四相步进电机、单片机、PROTEUS仿真
四相步进电机控制系统的设计
1设计任务及要求
设计一个四相步进电机控制系统,要求系统具有如下功能:
用SW11-SW13做为通电方式选择键,SW11为四相单四拍,SW12为四相双四拍,SW13为四相八拍;SW14为启动/停止控制、SW1方向控制;用4位LED数码管显示工作步数。
用3个发光二极管显示状态:
正转时红灯亮,反转时黄灯亮,不转时绿灯亮。
2方案论证
2.1设计思路与方案
本次设计是一个对于四相步进电机的控制系统,而单片机实现的步进电机控制系统具有成本低、使用灵活的特点,此系统选用51单片机即可。
根据要求整个设计大体可分为四块:
一是5个按键SW11-SW13将用户所需来选择步进电机的工作状态。
我们将开关连入单片机的P1口,通过按键开关的高低电平状态来读入我们所需的控制信号。
硬件上直接把开关分别接在单片机的接口上,通过查询端口信号来动作,将控制信号处理。
二是3个LED发光二极管的显示步进电机工作状态模块。
在设计要求中步进电机正转是红灯亮,反转是黄灯亮,停止不转是绿灯亮。
设计中将3个发光二极管分别接到单片机P3口,受到单片机的输出信号控制。
三是步进电机的工作模块。
要想步进电机按照我们想要的方式运转,将步进电机一端接到+12V的电源,一端接到单片机P3口,受单片机的输出信号控制。
四是4位数码管显示步数的模块。
设计中主要是利用软件编程的算法来实现步数的累计和显示,同样,4位数码管接到单片机的P0口和P2口受单片机输出信号的控制,在硬件上使用的是动态显示的接法。
由此可知所需要设计一个系统,可以通过不同按键来选择步进电机的工作方式,且有LED发光二极管来显示电机对应的工作状态,除此之外还能在数码管上显示出步进电机转动的步数。
2.2总体设计框图
此系统主要由单片机、步进电机、步数显示模块、工作状态控制与显示模块组成。
整体框图如图1。
图1系统整体框图
3系统实现的原理说明
3.1步进电机控制工作原理
3.1.1步进电机的工作原理
步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路是根据单片机产生的控制信号进行工作。
因此,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。
如图2所示,开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相 绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
图2步进电机工作原理图
3.1.2步进电机的启停控制
步进电机由于其电气特性,运转时会有步进感,即振动感。
为了使电机转动平滑,减小振动,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波,可以减小步进电机的步进角,提高电机运行的平稳性。
在步进电机停转时,为了防止因惯性而使电机轴产生顺滑,则需采用合适的锁定波形,产生锁定磁力矩,锁定步进电机的转轴,使步进电机的转轴不能自由转动。
3.1.3步进电机的转向控制
如果给定工作方式正序换相通电,步进电机正转。
若步进电机的励磁方式为四相八拍,即A-AB-B-BC-C-CD-D-DA-A。
如果按反序通电换相,即则电机就反转。
其他方式情况类似。
3.2步数显示模块原理
步数显示模块和工作状态显示模块,都是通过单片机输出信号控制发光二极管LED的亮灭。
其中步数显示模块中LED构成数码管,要求显示4位十进制数,故用到4位数码管。
要控制多位的显示电路,需要有字段控制和字位控制。
控制方式分为静态显示方式和动态显示方式。
静态显示方式,每一位的显示器都需要配一个8位输出口来输出该字位的七段码,需要片外扩展输出口。
而动态显示方式将各数码管的对应字段的引脚都并联在一起,线路简单,减少接口,不需片外扩展。
这里选用动态显示方式。
4硬件设计
4.1系统总原理图
图3系统总原理图
根据设计要求用PROTEUS所做的硬件连线图如图3。
4.2各部分硬件原理图设计
4.2.1单片机控制模块
单片机选用最经典的80C51,其4个I/O口都要用到,P3接步进电机驱动电路及工作状态显示模块,P0和P2分别接步数显示中对数码管的字段控制及数码管片选,P1接工作状态控制电路,,时钟用内部方式需外接晶体振荡器。
硬件图如图4所示。
图4单片机模块原理图
此设计中接的是12MHZ的晶振,故一个机器周期为1/12us。
根据经验数据,与晶振一起的两个电容设为15PF。
单片机的VCC和GROUD都隐藏了,已自动接好,VCC应设为+5V。
4.2.2按键选择工作状态模块
5个按键开关一端通过电阻接高电平,另一端全部接到地,其中接高电平的一端对应也接到单片机的P1口分别为P1.0~P1.4。
当开关断开,就是输入到单片机对应端口高电平,而开关闭合,是使端口接地,输入低电平。
所以这个设计中开关断开时才是有效的。
各按键功能:
(1)SW11~SW13为工作模式控制开关,SW11接电时,为步进电机单四拍工作模式;SW12接电时,为步进电机双四拍工作模式;SW13接电时,步进电机工作模式为四相八拍。
(2)SW14为启/停控制开关,控制整个系统的开启和关闭。
(3)SW1为正/反转控制开关,控制步进电机的转向。
图5按键模块原理图
4.2.3步进电机工作模块
将四相步进电机四个端口直接接到单片机P3.0~P3.3即可,另两个端口接到+12V的高电平给步进电机供电。
只需在软件编写上控制算法便可以调节这四个端口的高低电平来控制步进电机的开启与停止,正反转以及工作模式。
步进电机硬件接线图如图6所示。
图6步进电机模块原理图
4.2.4工作状态显示模块
LED发光二极管显示步进电机的工作状态,它们分别接到单片机的P3.5~P3.7。
图7工作状态显示模块原理图
4.2.54位数码管显示步数模块
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
P0口和P2口的前四个分别接步数显示中对数码管的字段控制及数码管片选,如图8所示,这里主要是由软件算法来实现单片机输出的控制。
图8数码管显示模块原理图
5软件设计
5.1系统总体设计
开始
数码管显示清零
启动?
选择工作模式
正转?
b赋予正向指针增量
b赋予反向指针增量
红灯亮
黄灯亮
P3输出控制模块使电机运转
P1口改变?
步数自增一
调用步数显示程序
绿灯亮
N
N
N
Y
Y
Y
图9系统总流程图
设计说明:
首先是数码管显示清零,单片机再读入P1口输入的按键状态,先判断是否启动,如果没有启动则是绿灯亮并再判断,如果启动了,就接着判断所需的电机工作模式,再读入P1口状态判断电机的转向,输出控制信号为正转红灯亮,反转黄灯亮,由此可以让步进电机按照指定的方式运转,并且累计步数再显示到数码管上。
最后检验P1口是否状态改变,如果改变则步数清零重新开始判断,不改变则继续转动。
5.2步进电机工作模块
5.2.1步进电机的工作方式说明
(1)四相单四拍工作方式
在这种工作方式下,A、B、C、D三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。
因此这种通电方式叫做三相单三拍工作方式。
这时步距角
(度)为:
式中:
m──定子相数;z──转子齿数
表1单四拍的相位控制
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
D相
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
4
0
0
0
0
1
0
0
0
D
08H
(2)四相双四拍工作方式
这种工作方式每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CD─DA—AB(或反之)方式通电,故称为双四拍工作方式。
以这种方式通电,转子齿所处的位置相当于八拍控制方式中去掉单四拍后的四个位置。
它的步距角计算公式与单四拍时的公式相同。
表2双四拍的相位控制
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
D相
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
0CH
4
0
0
0
0
1
0
0
1
DA
09H
(3)四相八拍工作方式
在这种工作方式下,绕组以A—AB—B—BC—C—CD—D—DA—A时序(或反时序)转换8次,磁场旋转一周,转子前进一个齿距,每次切换均使转子转动0.9°,故这种通电方式称为四相八柏工作方式。
其步距角
为:
表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
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
1
1
0
0
CD
0CH
7
0
0
0
0
1
0
0
0
D
08H
8
0
0
0
0
1
0
0
1
DA
09H
5.2.2设计说明及流程图
设计说明:
在此设计中,采用的是四相步进电机,对于步进电机模块的程序设计采用循环程序设计方法。
先把正反转向的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。
首先启动,通过P1口读入所需的工作方式,即选择步进电机的拍数,然后读入正反转的控制,再来输出对应的控制模型来驱动步进电机转动。
5.3数码管步数显示模块
设计说明:
步数显示模块是整个程序里的一个子程序。
其是用4位八段数码管来显示工作步数。
先将要显示的数化为10进制数,每位分别储存,从P0口输出显示码,P2口输入位选码,需要一定的延时,让此位数字显示闪烁出来。
然后修改数组地址,求下一位位选码继续显示,直至输出四位数。
这个扫描过程重复50次,保证人眼能观察到步数显示。
流程图如图11:
取出要显示的数据
送一位位段码到P0口输出
送位选码到P2.0-P2.3输出
延时
4位显示完
修改数组地址
求下一位选码
将该数据化为10进制数,每位分别储存
扫描50次完
计数减1
开始
返回
图11数码管显示模块流程图
6仿真调试记录
如图12所示,当选择电机工作在单四拍,正转的模式下,SW11、SW1接高电平,SW12、SW13接低电平,系统启动,SW14接高电平,电机开始转动。
LED四位显示屏显示工作步数,LED指示灯红灯亮显示电机正转的状态。
图12仿真图
7心得体会
本次课设是在实习之中穿插进行的,所以时间比较紧张,给课设的顺利完成增加了难度。
计算机控制技术是一门应用性很强综合性很强的学科,在这次课设中,我充分感受到了这一点,在老师给的课题之中,是来自于各个方面各个领域的应用,不得不说,计算机控制很强大,确实改变了我们的生活。
课设里最困难的部分就是编写程序和仿真调试,也许硬件连接没问题,程序运行没问题,但是,当把程序导入,发现电动机就是不转,灯就是不亮,数码管就是乱跳,这是很考验耐心的时候,一遍一遍地去调试程序,修改连接部分,有时真的看着很崩溃,但是当你不放弃地调试,才有仿真成功的可能,在这种反复中,对我们自身的能力是提高很多的。
另一个收获就是关于软件的使用了。
PROTEUS,KEIL51,以前好像也用过,但是平时较少接触,这次的课设让我比较熟练的掌握了这两个学习软件强大的功能,而且发现从PROTEUS里导出来的电路图特别漂亮和清晰。
计算机控制技术一直是自己比较喜欢的一门学科,拿到课程设计的题目也想着可以好好检验自己的学习成果,一直认为,期末考试是所谓的应试教育,而课程设计似乎更加地考验所学的知识,所谓实践与理论相结合就是这个道理吧。
课程设计总能让我有一种我站在山面前的感觉,看上去比较陌生高大,但是攀登的技巧早已在平时的学习中习得,不断地去攀登,不断地在回味课堂上老师讲的东西,书本上的东西,这是一种奇妙的体验。
我明白遇到的电路或者课题并不一定在你的知识范围之内,而面对新的东西,我们要冷静地去寻求解决之道,去搜寻网络资源,图书馆资源以及和同学们的讨论之中,再结合自己所学过的知识来吃透理解那些未知的东西,扩宽知识面,这样就会觉得学到了远远超过课堂的东西,但是却源于课堂,想必这就是课设的意义吧,很有收获。
附录:
程序清单
#include"reg52.h"
//Motor
sbitF1=P3^0;
sbitF2=P3^1;
sbitF3=P3^2;
sbitF4=P3^3;
//sbitTIM=P3^4;
#definem500
///////////////////////////////////////
//步进电机驱动
unsignedcharMotorStep=0;
unsignedintMotorTimer=0;
unsignedintTIM,CT,STEP=0,TIM1,num;
voidInitMotor()
{
F1=1;
F2=1;
F3=1;
F4=1;
}
voidSetMotor()
{
//if(Speed==0)return;
if(P1&0x01)//单四
{
if(P1&0x10)//正
switch(MotorStep)
{
case0:
if(TIM)
{
P3=0xb1;//F1=0;F2=0;F3=0;F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
if(TIM)
{
P3=0xb2;//F1=1;F2=0;F3=0;F4=0;
MotorStep=2;
TIM=0;
}
break;
case2:
if(TIM)
{
P3=0xb4;//F1=0;F2=1;F3=0;F4=0;
MotorStep=3;
TIM=0;
}
break;
case3:
if(TIM)
{
P3=0xb8;//F1=0;F2=0;F3=1;F4=0;
MotorStep=0;
TIM=0;
}
break;
}
else//单四反
switch(MotorStep)
{
case0:
if(TIM)
{
P3=0x71;//F1=0;F2=0;F3=0;F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
if(TIM)
{
P3=0x78;//F1=0;F2=0;F3=1;F4=0;
MotorStep=2;
TIM=0;
}
break;
case2:
if(TIM)
{
P3=0x74;//F1=0;F2=1;F3=0;F4=0;
MotorStep=3;
TIM=0;
}
break;
case3:
if(TIM)
{STEP++;
P3=0x72;//F1=1;F2=0;F3=0;F4=0;
MotorStep=0;
TIM=0;
}
break;
}}
elseif(P1&0x02)//双四正转
{
if(P1&0x10)//则正转
switch(MotorStep)
{
case0:
if(TIM)
{
P3=0xb3;//F1=0;F2=0;F3=1;F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
if(TIM)
{
P3=0xb6;//F1=0;F2=1;F3=1;F4=0;
MotorStep=2;
TIM=0;
}
break;
case2:
if(TIM)
{
P3=0xbc;//F1=1;F2=1;F3=0;F4=0;
MotorStep=3;
TIM=0;
}
break;
case3:
if(TIM)
{
P3=0xb9;//F1=1;F2=0;F3=0;F4=1;
MotorStep=0;
TIM=0;
}
break;
}
else//双四反
switch(MotorStep)
{
case0:
if(TIM)
{
P3=0x73;//F1=0;F2=0;F3=1;F4=1;
MotorStep=1;
TIM=0;
}
break;
case1:
if(TIM)
{
P3=0x79;//F1=1;F2=0;F3=0;F4=1;
MotorStep=2;
TIM=0;