基于单片机的三相步进电机控制系统设计Word文档下载推荐.docx
《基于单片机的三相步进电机控制系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的三相步进电机控制系统设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
电机定子有六个磁极,相对的磁极为同一绕组励磁,整个电机有三个绕组,按Y形接法接线。
转自为软磁材料,无绕组。
若绕组通电顺序为Ⅰ-Ⅱ-Ⅲ-Ⅰ-Ⅱ-Ⅲ-…,则电动机逆时针转动;
若绕组通电顺序为Ⅰ-Ⅲ-Ⅱ-Ⅰ-Ⅲ-Ⅱ-…,则电动机顺时针转动。
此种控制方式称为三相单三拍方式。
若通电顺序为Ⅰ-ⅠⅡ-Ⅱ-ⅡⅢ-Ⅲ-ⅢⅠ-…(逆时针),称为三相六拍方式。
步进电机控制装置发出运行方式、旋转方向和旋转角度(步数),前两项一般由电平表示,后一项用脉冲个数表示。
脉冲分配器根据步进电机控制装置发来的命令(电平信号和脉冲)使步进电机按照要求的工作方式、旋转方向及步数旋转。
步进电机磁极的旋转有速率限制,如果过快,电动机会出现失步现象(转自跟不上磁极的旋转),特别是在电动机的起停阶段,要求有脉冲速率限制措施。
(三)系统硬件原理图
图1.9硬件原理框图
(四)系统软件设计
为防止输入脉冲频率过快导致电动机失步,可将输入脉冲在单片机缓存,之后在进行脉冲分配,分配时注意脉冲速率。
脉冲输入模块在每个输入脉冲到来时,将缓存单元进行加1计数;
脉冲分配模块时刻扫描缓存单元,当缓存单元不为零时,使步进电机旋转一步,之后缓存单元减1,减到0时停止分配脉冲。
为使三相电平同时变化,程序中应予以考虑。
非同步分配脉冲可能导致电机错转。
为使电动机以最快速度运行,脉冲分配速率应按照梯形曲线分配,如图1.10所示。
图示的含义是:
开始时(零转速)脉冲分配要慢,当电动机旋转起来后,脉冲速率逐渐加快,并达到最高速率;
当要停止时,也不可马上停止,必须先降低脉冲速率,最后降到零,电动机停转。
图1.10脉冲速率分配
2方案
2.1设计思路与方案
本次设计是一个对于三相步进电机的控制系统,而单片机实现的步进电机控制系统具有成本低、使用灵活的特点,此系统选用51单片机即可。
根据要求整个设计大体可分为四块:
一是5个按键K0~K4将用户所需来选择步进电机的工作状态。
我们将开关连入单片机的P1口,通过按键开关的高低电平状态来读入我们所需的控制信号。
硬件上直接把开关分别接在单片机的接口上,通过查询端口信号来动作,将控制信号处理。
在设计开关部分时,还考虑到机械抖动的影响,采取硬件方式—并联电容来去抖。
二是3个LED发光二极管的显示步进电机工作状态模块。
在设计要求中步进电机正转是红灯亮,反转是黄灯亮,停止不转是绿灯亮。
设计中将3个发光二极管分别接到单片机P3口,受到单片机的输出信号控制。
三是步进电机的工作模块。
要想步进电机按照我们想要的方式运转,将步进电机一端接到+12V的电源,一端接到单片机P3口,受单片机的输出信号控制。
四是4位数码管显示步数的模块。
设计中主要是利用软件编程的算法来实现步数的累计和显示,同样,4位数码管接到单片机的P0口和P2口受单片机输出信号的控制,在硬件上使用的是动态显示的接法。
由此可知所需要设计一个系统,可以通过不同按键来选择步进电机的工作方式,且有LED发光二极管来显示电机对应的工作状态,除此之外还能在数码管上显示出步进电机转动的步数。
2.2总体设计框图
此系统主要由单片机、步进电机、步数显示模块、工作状态控制与显示模块组成。
整体框图如图1。
图1系统整体框图
3系统实现的原理说明
3.1步进电机控制工作原理
3.1.1步进电机的工作原理
步进电机的不同驱动方式,都是在工作时,脉冲信号按一定顺序轮流加到三相绕组上,从而实现不同的工作状态。
由于通电顺序不同,其运行方式有三相单三相拍、三相双三拍和三相单、双六拍三种(注意:
上面“三相单三拍”中的“三相”指定子有三相绕组;
“拍”是指定子绕组改变一次通电方式;
“三拍”表示通电三次完成一个循环。
“三相双三拍”中的“双”是指同时有两相绕组通电)。
1.2.1三相单三拍运行方式:
下页图所示为反应式步进电动机工作原理图,若通过脉冲分配器输出的第一个脉冲使A相绕组通电,B,C相绕组不通电,在A相绕组通电后产生的磁场将使转子上产生反应转矩,转子的1、3齿将与定子磁极对齐,如果图(a)所示。
第二个脉冲到来,使B相绕组通电,而A、C相绕组不通电;
B相绕组产生的磁场将使转子的2、4齿与B相磁极对齐,如图(b)所示,与图(a)相比,转子逆时针方向转动了一个角度。
第三个脉冲到来后,是C相绕组通电,而A、B相不通电,这时转子的1、3齿会与C组对齐,转子的位置如图(c)所示,与图(b)比较,又逆时针转过了一个角度。
图1.1反应式步进电机工作原理图
当脉冲不断到来时,通过分配器使定子的绕组按着A相--B相--C相--A相……的规律不断地接通与断开,这时步进电动机的转子就连续不停地一步步的逆时针方向转动。
如果改变步进电动机的转动方向,只要将定子各绕组通电的顺序改为A相--C相--B相--A相,转子转动方向即改为顺时针方向。
单三拍分配方式时,步进电动机由A相通电转换到B相通电,步进电动机的转子转过一个角度,称为一步。
这时转子转过的角度是30度。
步进电动机每一步转过的角度称为步距角。
1.2.2三相双三拍运行方式三相双三拍运行方式:
每次都有两个绕组通电,通电方式是AB--BC--CA--AB……,如果通电顺序改为AB--CA--BC--AB……则步进电机反转。
双三拍分配方式时,步进电动机的步距角也是30度
1.2.3三相单,双六拍运行方式:
三相六拍分配方式就是每个周期内有六个通电状态。
这六中通电状态的顺序可以使A--AB--B--BC--C--CA--A……或者A--CA--C--BC--B--AB--A……六拍通电方式中,有一个时刻两个绕组同时通电,这时转子齿的位置将位于通电的两相的中间位置。
在三相六拍分配方式下,转子每一步转过的角度只是三相三拍方式下的一半,步距角是15度。
单三拍运行的突出问题是每次只有一相绕组通电,在转换过程中,一相绕组断电,另一相绕组通电,容易发生失步;
另外单靠一相绕组通电吸引转子,稳定性不好,容易在平衡位置附近震荡,故用的较少。
双三拍运行的特点是每次都有两相绕组通电,且在转换过程中始终有一相绕组保持通电状态,因此工作稳定,且步距角与单三拍相同。
六拍运行方式转换时始终有一相绕组通电,且步距角较小,故工作稳定性好,但电源较复杂,实际应用较多。
3.1.2步进电机的启停控制
步进电机由于其电气特性,运转时会有步进感,即振动感。
为了使电机转动平滑,减小振动,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波,可以减小步进电机的步进角,提高电机运行的平稳性。
在步进电机停转时,为了防止因惯性而使电机轴产生顺滑,则需采用合适的锁定波形,产生锁定磁力矩,锁定步进电机的转轴,使步进电机的转轴不能自由转动。
3.1.3步进电机的转向控制
如果给定工作方式正序换相通电,步进电机正转。
若步进电机的励磁方式为三相六拍,即A-AB-B-BC-C-CA。
如果按反序通电换相,即则电机就反转。
其他方式情况类似。
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按键选择工作状态模块
首先我们来考虑所有机械触点式按键在状态输出时的共性问题就是按键抖动问题,由于机械触点的弹性振动,按键在按下时不会马上稳定地接通而在弹起时也不能一下子完全地断开,因而在按键闭合和断开的瞬间均会出现一连串的抖动,这称为按键的抖动干扰。
这种抖动可能会造成按一次键产生的开关状态被CPU误读几次。
为了使CPU能正确地读取按键状态,本次设计中我们采用并联电容消抖法,利用电容的放电延时来实现。
如图5所示,这是唯一的一块输入模块的设计。
5个按键开关一端通过电阻接高电平,另一端全部接到地,其中接高电平的一端对应也接到单片机的P1口分别为P1.0~P1.4。
当开关断开,就是输入到单片机对应端口高电平,而开关闭合,是使端口接地,输入低电平。
所以这个设计中开关断开时才是有效的。
各按键功能:
(1)K0-K2为工作模式控制开关,KO接电时,为步进电机单三拍工作模式;
K1接电时,为步进电机双三拍工作模式;
K2接电时,步进电机工作模式为三相六拍。
(2)K3为启/停控制开关,控制整个系统的开启和关闭。
(3)K4为正/反转控制开关,控制步进电机的转向。
图5按键模块原理图
4.2.3步进电机工作模块
将三相步进电机三个端口直接接到单片机P3.0~P3.2即可,另三个端口接到+12V的高电平给步进电机供电。
只需在软件编写上控制算法便可以调节这三个端口的高低电平来控制步进电机的开启与停止,正反转以及工作模式。
步进电机硬件接线图如图6所示。
图6步进电机模块原理图
4.2.4工作状态显示模块
LED发光二极管显示步进电机的工作状态,它们分别接到单片机的P3.3~P3.5。
如图7,让单片机输出通过一个反相器再接到LED阴极,LED阳极接VCC。
这样可以提高电流,有利于二极管的导通,我们可以通过控制P3口的数据,实现LED的亮灭。
图7工作状态显示模块原理图
4.2.54位数码管显示步数模块
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
P0口和P2口的前四个分别接步数显示中对数码管的字段控制及数码管片选,如图8所示,这里主要是由软件算法来实现单片机输出的控制。
图8数码管显示模块原理图
5软件设计
5.1系统总体设计
图9系统总流程图
设计说明:
首先是数码管显示清零,单片机再读入P1口输入的按键状态,先判断是否启动,如果没有启动则是绿灯亮并再判断,如果启动了,就接着判断所需的电机工作模式,再读入P1口状态判断电机的转向,输出控制信号为正转红灯亮,反转黄灯亮,由此可以让步进电机按照指定的方式运转,并且累计步数再显示到数码管上。
最后检验P1口是否状态改变,如果改变则步数清零重新开始判断,不改变则继续转动。
5.2步进电机工作模块
5.2.1步进电机的工作方式说明
(1)三相单三拍工作方式
在这种工作方式下,A、B、C三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。
因此这种通电方式叫做三相单三拍工作方式。
这时步距角
(度)为:
式中:
m──定子相数;
z──转子齿数
表1单三拍的相位控制
步序
控制位
工作
状态
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
C相
P1.1
B相
P1.0
A相
1
A
01H
2
B
02H
3
C
04H
(2)三相双三拍工作方式
这种工作方式每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CA─AB(或反之)方式通电,故称为双三拍工作方式。
以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置。
它的步距角计算公式与单三拍时的公式相同。
表2双三拍的相位控制
控制位
AB
03H
BC
06H
CA
05H
(3)三相六拍工作方式
在这种工作方式下,绕组以A—AB—B—BC—C—CA—A时序(或反时序)转换6次,磁场旋转一周,转子前进一个齿距,每次切换均使转子转动1.5°
故这种通电方式称为三相六柏工作方式。
其步距角
为:
表3六拍的数学模型
4
5
6
5.2.2设计说明及流程图
在此设计中,采用的是三相步进电机,对于步进电机模块的程序设计采用循环程序设计方法。
先把正反转向的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。
首先启动,通过P1口读入所需的工作方式,即选择步进电机的拍数,然后读入正反转的控制,再来输出对应的控制模型来驱动步进电机转动。
三相步进电机工作的流程图:
图10三相步进电机工作流程图
5.3数码管步数显示模块
步数显示模块是整个程序里的一个子程序。
其是用4位八段数码管来显示工作步数。
先将要显示的数化为10进制数,每位分别储存,从P0口输出显示码,P2口输入位选码,需要一定的延时,让此位数字显示闪烁出来。
然后修改数组地址,求下一位位选码继续显示,直至输出四位数。
这个扫描过程重复50次,保证人眼能观察到步数显示。
流程图如图11:
图11数码管显示模块流程图
6仿真调试记录
如图12所示,当选择电机工作在单三拍,反转的模式下,K0断开,K1、K2、K4、闭合,系统启动,K3断开,电机开始转动。
LED四位显示屏显示工作步数,LED指示灯黄灯亮显示电机反转的状态。
图12仿真图
如图13所示,此种工作方式下步进电机的旋转角度:
图13步进电机旋转角度
7心得体会
本次课设为期一周,所以时间比较紧张,给课设的顺利完成增加了难度。
单片机原理是一门应用性很强综合性很强的学科,在这次课设中,我充分感受到了这一点,在老师给的课题之中,是来自于各个方面各个领域的应用,不得不说,计算机控制很强大,确实改变了我们的生活。
课设里最困难的部分就是编写程序和仿真调试,也许硬件连接没问题,程序运行没问题,但是,当把程序导入,发现电动机就是不转,灯就是不亮,数码管就是乱跳,这是很考验耐心的时候,一遍一遍地去调试程序,修改连接部分,有时真的看着很崩溃,但是当你不放弃地调试,才有仿真成功的可能,在这种反复中,对我们自身的能力是提高很多的。
另一个收获就是关于软件的使用了。
PROTEUS,KEIL51,以前好像也用过,但是平时较少接触,这次的课设让我比较熟练的掌握了这两个学习软件强大的功能,而且发现从PROTEUS里导出来的电路图特别漂亮和清晰。
单片机原理一直是自己比较喜欢的一门学科,拿到课程设计的题目也想着可以好好检验自己的学习成果,一直认为,期末考试是所谓的应试教育,而课程设计似乎更加地考验所学的知识,所谓实践与理论相结合就是这个道理吧。
课程设计总能让我有一种我站在山面前的感觉,看上去比较陌生高大,但是攀登的技巧早已在平时的学习中习得,不断地去攀登,不断地在回味课堂上老师讲的东西,书本上的东西,这是一种奇妙的体验。
我明白遇到的电路或者课题并不一定在你的知识范围之内,而面对新的东西,我们要冷静地去寻求解决之道,去搜寻网络资源,图书馆资源以及和同学们的讨论之中,再结合自己所学过的知识来吃透理解那些未知的东西,扩宽知识面,这样就会觉得学到了远远超过课堂的东西,但是却源于课堂,想必这就是课设的意义吧,很有收获。
参考文献
[1]谭浩强.C程序设计.北京:
清华大学出版社.2005.
[2]于海生.《计算机控制技术》.北京:
机械工业出版社,2007.
[3]潘新民.《微型计算机控制技术》.北京:
电子工业出版社,2003.
[4]魏立峰,王宝兴.单片机原理与应用技术.北京:
北京大学出版社.2006.
[5]陈明荧.8051单片机课程设计实训教材.北京:
清华大学出版社.2004
[6]张靖武,周灵彬编著.《单片机系统的PROTEUS设计与仿真》.北京:
电子工业出版社,2007.
附录:
程序清单
#include<
reg51.h>
stdio.h>
voiddelay1(void);
voiddelay2(void);
voiddisplay(int);
intbs=0;
main()
{chara,b,c,d,j,*q,
done1[8]={0x01,0x02,0x04,0x00,0x01,0x04,0x02,0x00},
done2[8]={0x03,0x06,0x05,0x00,0x03,0x05,0x06,0x00},done3[14]={0x01,0x03,0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00};
L:
a=P1;
while(!
(a&
0x08))//判断是否启动,若没启动则重新判断
{P3=0x08;
delay1();
}
//...............................................判断工作模式
if(a&
0x01)//方式1模型
q=done1;
elseif(a&
0x02)//方式2模型
q=done2;
0x04)//方式3模型
q=done3;
//...............................................判断电机转向
0x10)//判断电机是否要正转
{P3=0x10;
//P1.4口为1,电机正转,红灯亮
b=0;
}
else
{P3=0x20;
//P1.4口为0,电机反转,黄灯亮
0x04)b=7;
//反转时将b置数,使指针指到数组反相序部分
elseb=4;
//....................................................
d=b;
while
(1)
{c=*(q+b);
//判断电机步数是否走完
if(c==0)b=d;
//步数走完,电机重新再走
{P3=c;
//从P3输出电机控制信号
b++;
bs++;
//总步数加1
display(bs);
//显示步数
j=a;
a=P1;
if(a!
=j)//判断P1口状态信号是否改变
{if(!
0x08))bs=0;
//若为停止信号,总步数清零
gotoL;
}//状态信号改变,返回到开始,重新对电机控制
}
}
voiddelay1()//延时5ms子程序
{inti,j;
for(i=0;
i<
200;
i++)
for(j=0;
j<
300;
j++);
voiddelay2()//延时50us子程序
10;
for(j=0;
60;
voiddisplay(intn)
{unsignedchartab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
unsignedchari,k,t,num[4];
num[0]=n%10;
//将总步数的各位分别存在num数组中
num[1]=(n/10)%10;
num[2]=(n/100)%10;
num[3]=(n