三相步进电机控制系统的设计.docx
《三相步进电机控制系统的设计.docx》由会员分享,可在线阅读,更多相关《三相步进电机控制系统的设计.docx(27页珍藏版)》请在冰豆网上搜索。
三相步进电机控制系统的设计
学号:
0120911360205
课程设计
题目
三相步进电机控制系统设计
学院
自动化学院
专业
自动化
班级
0902班
姓名
王周春
指导教师
张丹红
2012
年
7
月
4
日
课程设计任务书
学生姓名:
王周春专业班级:
自动化0902班
指导教师:
张丹红工作单位:
自动化学院
题目:
三相步进电机控制系统的设计
初始条件:
设计一个三相步进电机控制系统,要求系统具有如下功能:
用K0-K2做为通电方式选择键,K0为三相单三拍,K1为三相双三拍,K2为三相六拍;K3为启动/停止控制;K4方向控制(正反转);K5速度控制(快慢两档);用4位LED数码管显示工作步数。
用3个发光二极管显示状态:
正转时红灯亮,反转时黄灯亮,不转时绿灯亮。
要求完成的主要任务:
1.硬件设计:
系统总原理图及各部分详细原理图
2.软件设计:
系统总体流程图、步进电机单三拍,双三拍,三相六拍各模块流程图、显示模块流程图等
3.编写程序:
能够完成上述任务
4.完成符合要求的设计说明书。
时间安排:
2012年6月25日~2012年7月4日
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本次计算机控制技术课程设计的题目是:
三相步进电机控制系统的设计。
本次课程设计使用80c51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在
(1)三相单三拍,
(2)三相双三拍,(3)三相六拍三种工作方式下正常工作;能实现的功能有:
启动/停止控制、方向控制;速度控制(快慢两档);用4位LED数码管显示工作步数。
用3个发光二极管显示状态:
正转时红灯亮,反转时黄灯亮,不转时绿灯亮。
本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示器采用7SEG-MPX4-CC,即四位共阴二极管显示器,P0接段码,并用8只1K欧左右电阻上拉。
P2的4位IO口接位选码。
用三个发光二极管显示电路的转动状况,红灯指示正传,黄灯指示反转,绿灯指示不转。
采用Proteus软件进行仿真。
在KeiluVsuon3编程环境下编程和编译生成HEX文件,导入到80C51单片机,实现对各个模块的控制,实现我们所需要的功能。
本次设计的方案电路结构比较简单,设计思路很清晰清晰,用Proteus软件进行联调仿真,结果比较直观。
在这次课程设计学习中我学到了很多知识,知道了三相步进电机控制系统的组成以及怎样用80C51单片机去控制它,三相步进电机的工作方式压,这对我在课堂所学的计算机控制技术知识是个巩固和加强,让我把课堂所学的理论知识真实的用到实践中,亲自动手,增强了我的动手设计能力,对自己将来的学习和工作发展起到了很好的作用。
关键字:
三相步进电机单片机Proteus
三相步进电机控制系统的设计
1课程设计任务和要求
1.1课程设计任务
设计一个三相步进电机控制系统,要求系统具有如下功能:
用K0-K2做为通电方式选择键,K0为三相单三拍,K1为三相双三拍,K2为三相六拍;K3为启动/停止控制、K4方向控制;K5速度控制(快慢两档);用4位LED数码管显示工作步数。
用3个发光二极管显示状态:
正转时红灯亮,反转时黄灯亮,不转时绿灯亮。
要求完成的主要任务:
1.硬件设计:
系统总原理图及各部分详细原理图
2.软件设计:
系统总体流程图、步进电机单三拍,双三拍,三相六拍各模块流程图、显示模块流程图等
3.编写程序:
能够完成上述任务
4.完成符合要求的设计说明书。
1.2课程任务要求
题目要求设计一个三相步进电机控制系统,它需要具有以下几个基本功能:
1.三相步进电机控制系统能实现三种运行方式,能够以三相单三拍工作方式运行,通电顺序为:
A-B-C-A;三相双三拍工作方式运行,通电顺序为:
AB-BC-CA-AB;三相六拍工作方式运行,通电顺序为:
A-AB-B-BC-C-CA-A,因此要输出相应的控制字进行控制.
2.三相步进电机控制系统能实现正转和反转和调速(快和慢)控制,能够改变电机运行的方向和速率.
3.三相步进电机控制系统有显示功能,可以采用共阴极的LED数码管对步数进行显示。
4.三相步进电机的工作性能可靠,电路设计简单.
2课程设计的方案比较及选择
2.1步进电机驱动方案选择
方案1:
使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。
这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。
方案2:
使用专门的电机驱动芯片ULN2003A来驱动电机运行。
驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。
通过对两种方案的比较,我选择方案2使用ULN2003A电机驱动芯片来作为驱动。
2.2LED显示方案选择
方案1:
把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。
优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。
方案2:
通过程序把所要的数据转化为七段显示的数据,直接通过单片机接口来显示,其优点是简化了电路,但增加了软件编写的负担。
通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。
2.3控制状态的读取
方案1:
把按键接到单片机的中断口,若有按键按下,单片机接收到中断信号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。
方案2:
不使用中断,直接把开关分别接在单片机的接口上,通过查询端口信号来动作。
其优点是程序得到简化,可读性加强。
通过对方案的比较,我选择通过查询方式来读取端口信号。
3控制系统的工作原理
3.1三相步进电机控制工作原理
3.1.1步进电机的工作原理
图1步进电机三相接线图
如图1所示,U1、V1、W1接电源,分别有三个开关控制,U2、V2、W2分别接地。
如果给处于错齿状态的相通电,则转子在电磁力的作用下,将向磁导率最大(即最小磁阻位置)位置转动,即向趋于对齿的状态转动。
3.1.2步进电机的工作方式
三相步进电机可以在三相单拍,三相双拍和三相六拍三种工作过方式下工作。
在三相单三拍工作方式运行时,通电顺序为:
A-B-C-A;三相双三拍工作方式运行时,通电顺序为:
AB-BC-CA-AB;三相六拍工作方式运行时,通电顺序为:
A-AB-B-BC-C-CA-A,因此要输出相应的控制字进行控制。
3.1.3步进电机的转向控制
如果给定工作方式正序换相通电,步进电机正转。
若步进电机的励磁方式为三相六拍,即A-AB-B-BC-C-CA。
如果按反序通电换相,即则电机就反转。
其他方式情况类似。
3.1.4步进电机的启停控制
步进电机由于其电气特性,运转时会有步进感,即振动感。
为了使电机转动平滑,减小振动,可在步进电机控
制脉冲的上升沿和下降沿采用细分的梯形波,可以减小步进电机的步进角,提高电机运行的平稳性。
在步进电机停转时,为了防止因惯性而使电机轴产
生顺滑,则需采用合适的锁定波形,产生锁定磁力矩,锁定步进电机的转轴,使步进电机的转轴不能自由转动。
3.1.5步进电机的速度控制
步进电动机运转的速度是由输入到A、B、C三相绕组的频率所决定的。
脉冲的频率越高,电动机运转的速度越快,否则,速度就越慢。
因而通过延时程序控制输出脉冲的频率,就可以实现对步进电机速度的控制。
3.2控制系统的设计思路
此次我所设计的是一个三相步进电机控制系统,主要由单片机80C51,3相步进电机,7段数码管,及一些其他相关元件设计而成。
可以通过开关来控制系统的启/停工作,当系统运转时,用开关来控制方向,并使相应的指示灯亮起,同样由开关来选择工作模式。
运转时,用4位7段数码管来输出步数。
最后根据思路所设计出来的硬件图设计相适应的软件。
3.3控制系统的整体框图
下图为系统总体设计整体框图,单片机80C51,ULN2003A驱动芯片,三相步进电机,7段LED数码管等一些电路模块组成。
图2系统的整体框图
4控制系统的硬件设计
4.1总体的硬件设计
设计一个单片机三相步进电机控制系统要求系统具有如下功能:
(1)用K0-K2做为通电方式选择键,K0为单三拍,K1为双三拍,K2为三相六拍;
(2)K3、K4分别为启动和方向控制;
(3)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿色指示灯亮;
(4)用4位LED显示工作步数。
根据设计要求用PROTEUS所做的硬件连线图如图3:
图3总体硬件连线
4.2三相步进电机控制电路
4.2.1启/停控制、正/反转控制、工作模式控制电路分析
原理图如图4所示:
图4按键控制图
(1)K0-K2为工作模式控制开关,KO接电时,为步进电机单三拍工作模式;K1接电时,为步进电机双三拍工作模式;K2接电时,步进电机工作模式为三相六拍,
(2)K3为启动/停止控制开关,控制整个系统的开启和关闭。
(3)K4为正转/反转控制开关,控制步进电机的转向。
(4)K5速度控制(快慢两档)。
4.2.2步进电机驱动电路
将80C51的P1.0-P1.3作为步进电机的输出控制口。
电路图如下所示:
图5步进电机的输出控制口
4.3LED显示电路
4.3.1发光二极管显示电路
用3个不同颜色的发光二极管来作为指示灯显示,将P3.6接红灯,P3.7接黄灯,P3.3接绿灯,正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿色指示灯亮。
电路图如下:
图6指示灯接线图
4.3.2八段数码管显示电路
由80C51的P0口取出显示码,从80C51的P2.0-P2.3输出位选码,设计中我们主要用到4位显示步数既可。
原理图如下:
图7显示器接线图
5控制系统的软件设计
5.1总体的软件设计
5.1.1步进电机的工作方式
(1)三相单三拍工作方式
在这种工作方式下,A、B、C三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。
因此这种通电方式叫做三相单三拍工作方式。
A-B-C为正转,C-B-A为反转这时步距角θb(度)为
(公式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)双三拍工作方式
在这种工作方式下,每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CA─AB(或反之)方式通电,故称为双三拍工作方式。
以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置。
它的步距角计算公式与单三拍时的公式相同。
极分度角/齿距角=R+k·1/m
进一步化简得齿数z:
(公式2)
式中:
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
表2
(3)三相六拍工作方式
在这种工作方式下,绕组以A—AB—B—BC—C—CA—A时序(或反时序)转换6次,磁场旋转一周,转子前进一个齿距,每次切换均使转子转动1.5°,故这种通电方式称为三相六柏工作方式。
其步距角θb为:
(公式3)
式中:
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
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
表3
5.1.2系统总体流程图
设计说明:
首先复位单片机,然后从P3口读出开关状态,判断是否启动,没启动绿灯亮重新确认启动。
启动后再次读取P3口数据,判断工作方式并将对应的用来存储步进电机工作方式字的数组首地址值给q。
由P3.4口的双向开关来控制步进电机的正反转,如果是正转则红灯亮,反转则绿灯亮。
在电机每走一步后,步数记数加1,然后通过LED显示把工作步数显示出来。
再从P3口把状态信息读出来,与之前的P3口的状态信息进行比较。
如果状态信息没有改变,电机继续运行。
如果状态信息改变了,就需要重新返回程序的开端,对电机的运行状态进行判断,让电机重新以新的状态运行。
由此,开关的状态在电机每走一步都会查询一遍,做到实时地反映。
图8总体流程图
5.2系统关键模块设计
5.2.1.三相步进电机模块设计
设计说明:
在此设计中,采用的是三相步进电机,对于步进电机模块的程序设计采用循环程序设计方法。
先把正反转向的控制模型存放在内存单元中,然后再逐一从单元中取出控制模块并输出。
首先启动,选择步进电机的拍数,输入步数,然后读入正反转的控制模型驱动步进电机转动。
三相步进电机的流程框图:
图9三相步进电机的流程框图
5.2.2显示模块设计
设计说明:
显示模块是用4位八段数码管来显示工作步数。
先将显示码存入数组中,指向最左边一位,然后取出要显示的数据,指向换码表首地址,取出显示码,从P0口输出显示码,P2口输入位选码,显示出4位工作步数,最后修改数组地址,求下一位位选码继续显示。
图10显示模块的程序框图
5.2.3进电机调速模块流程图
如图5.8为步进电机调速模块流程图,当P3.4=1时,即K5按下,系统选择单位延时程序的循环次数为5,此时步进电机快速运转,当P3.4=0时,即K5无效,系统选择单位延时程序的循环时间为50次,此时步进电机慢速运转。
6系统仿真结果
6.1三相步进电机三种工作方式
图12为步进电机工作在三相单三拍,此时K0,K3接高电平,K1,K2接低电平启动;图13为步进电机工作在三相双三拍,此时K1,K3接高电平,K0,K2接低电平;图14为步进电机工作在三相六拍,此时K0,K1接低电平,K2,K3接高电平;若K4接高电平则反转,低电平则正转;若K5接高电平速度快,接低电平速度慢。
这三种工作方式工作不同,三相单三拍时,通电顺序为A-B-C-A;三相双三拍时,通电顺序为AB-BC-CA-AB;三相六拍时,通电顺序为A-AB-B-BC-C-CA-A;以上通电方式是三种工作方式正转的情况,若要反转,则通电方式放过来即可,
图12步进电机工作在三相单三拍
图13步进电机工作在三相双三拍
图14步进电机工作在三相六拍
6.2相步进电机启动和停止
图15为步进电机工作在启动状态,此时步进电机工作在三种方式之一,K3接高电平。
图15步进电机工作在启动状态
图16为步进电机工作在停止状态,此时步进电机工作在三种方式之一,K3接低电平。
图16步进电机工作在停止状态
6.3三相步进电机正转和反转
图17为三相步进电机工作在正转状态,此时K4接低电平。
图17为三相步进电机工作在正转状态
图18为三相步进电机工作在反转状态,此时K4接高电平
图18为三相步进电机工作在反转状态
6.4三相步进电机速度控制
图19为三相步进电机处于快速度状态,此时K5接高电平。
图19为三相步进电机处于高速度状态
图20为三相步进电机处于慢速度状态,此时K5接低电平
图20为三相步进电机处于慢速度状态
心得体会
经过一个星期的努力和付出,完成了本次<<计算机控制技术>>课程设计,通过本次课程设计提高了我的设计方案和分析问题的能力,加深了对理论知识的理解,做到了理论知识与实践的联系。
学会了Proteus这个仿真软件的运用,积累进行课程设计的经验。
大二下学期,我们做的课程设计有微机原理课程设计和自动控制原理,为我们这个学期的课程设计打下一个基础,初步掌握了Proteus这个软件的使用,因而这次使用它更加熟悉。
首先通过本次课程设计,熟练地掌握了三相步进电机控制系统的设计,了解其工作原理,以及电路所用到一些芯片的工作状况,如80C51单片机芯片和ULN2003A驱动芯片以及7SEG-MPX4-CC四位共阴二极管显示器阴,熟悉了它们各自的特点和用途。
通过本次课程设计,对理论知识有了更深入的理解,感受到计算机控制技术的魅力。
其次,通过本次课程设计,大大提高了自己的动手能力和设计能力,加深对Proteus软件功能的理解,学会用这个软件设计三相步进电机控制系统,将理论知识与实践相联系,为以后在学习和工作的发展打下一个良好的基础。
然后,通过该课程设计,初步理解了利用计算机控制技术进行三相步进电机控制系统的设计。
最后,我明白:
知识不是孤立的,相互之间有联系的,我们要学会理解知识点以及学科之间的融合渗透。
本次课程设计涉及到了计算机技术,自动控制技术,微机技术,数字电子技术等众多知识,因而我们需要把把各个学科之间的知识融合起来,形成一个整体。
认识到Proteus这个软件的强大功能,为以后的学习和工作打下基础。
我相信未来是属于我们的,随着科学技术的发展,计算机控制技术的应用将将越来越广泛,发挥越来越重要的作用。
参考文献
[1]于海生编著.《计算机控制技术》.北京:
机械工业出版社.2005
[2]谭浩强编著.《C程序设计》(第三版).北京:
清华大学出版社.2008
[3]彭虎、周佩琳编著.《微机原理与接口技术》.北京:
电子工业出版社.2007.
[4]刘教瑜、曾勇编著.《单片机原理与应用》.武汉:
武汉理工大学出版社.2008
[5]顶明亮、唐前辉编著.《51单片机应用设计与仿真:
基于keil与proteus》.
北京:
北京航空航天大学出版社.2009
[6]徐安编著.《微型计算机控制技术》.北京:
科学出版社.2005.
[7]杨立编著.《计算机控制与仿真技术》.北京:
中国水利水电出版社.2006
[8]彭旭昀编著.《机电控制系统原理及工程应用》.北京:
机械工业出版社.2006
[9]杨益强、李长虹编著.《控制器件》.北京:
中国水利水电出版社》.2005
附录1:
总电路图
附录2:
源程序
#include
#include
voiddelay1(void);
voiddelay2(void);
voiddisplay(int);
intbs=0;
intcishu;
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};
P3=0x20;//P3.5口置1,绿灯亮,不工作
delay1();
L:
a=P3;
while(!
(a&0x08))//判断是否启动,若没启动则重新启动
{P3=0x20;
a=P3;
delay1();}
a=P3;//判断工作模式
if(a&0x01)//方式1模型
q=done1;
if(a&0x02)//方式2模型
q=done2;
if(a&0x04)//方式3模型
q=done3;
if(a&0x20)
cishu=5;
elsecishu=50;
if(a&0x10)//判断电机是否要正转
{P3=0x80;//P3.4口为1,电机正转,红灯亮
b=0;}
else
{P3=0x40;//P3.4口为,电机反转,黄灯亮
if(a&0x04)b=7;
elseb=4;
}
d=b;
while
(1)
{c=*(q+b);//判断电机步数是否走完
if(c==0)b=d;//步数走完,电机重新再走
else
{P1=c;//从P1输出电机控制信号
b++;
bs++;//总步数加1
display(bs);//显示步数
j=a;
a=P3;
if(a!
=j)//判断P3口状态信号是否改变
{if(!
(a&0x08))bs=0;//若为停止信号,总步数清零
gotoL;}//状态信号改变,返回到开始,重新对电机控制
}
}
}
voiddelay1()
{inti,j;
for(i=0;i<200;i++)
for(j=0;j<300;j++);
}
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/1000)%10;
for(t=0;t{k=0x08;//位选码指向最左一位,第四位
for(i=0;i<4;i++)
{P2=k;//从P2口输入位选码
P0=~(tab[num[i]]);//取出显示码,并从P0口输出显示码
k=k>>1;//求