计算机控制 课程设计 三相步进电机控制.docx

上传人:b****5 文档编号:8574311 上传时间:2023-01-31 格式:DOCX 页数:19 大小:255.39KB
下载 相关 举报
计算机控制 课程设计 三相步进电机控制.docx_第1页
第1页 / 共19页
计算机控制 课程设计 三相步进电机控制.docx_第2页
第2页 / 共19页
计算机控制 课程设计 三相步进电机控制.docx_第3页
第3页 / 共19页
计算机控制 课程设计 三相步进电机控制.docx_第4页
第4页 / 共19页
计算机控制 课程设计 三相步进电机控制.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

计算机控制 课程设计 三相步进电机控制.docx

《计算机控制 课程设计 三相步进电机控制.docx》由会员分享,可在线阅读,更多相关《计算机控制 课程设计 三相步进电机控制.docx(19页珍藏版)》请在冰豆网上搜索。

计算机控制 课程设计 三相步进电机控制.docx

计算机控制课程设计三相步进电机控制

目录

1系统设计整体思路1

1.1方案选择1

1.1.1总思路1

1.1.2驱动电路选择1

1.1.3显示模块设计1

1.1.4工作状态控制模块设计2

1.2整体框图2

2硬件设计3

2.1单片机3

2.1.151单片机介绍3

2.1.2思路3

2.1.3连线4

2.2电机及其驱动模块4

2.2.1ULN2003a介绍4

2.2.2思路5

2.2.3连线5

2.3工作状态控制模块5

2.3.1并联电容消抖法5

2.3.2连线6

2.4工作状态显示模块6

2.4.1思路6

2.4.2连线6

2.5步数显示模块7

2.5.1LED数码管介绍7

2.5.27448介绍7

2.5.3思路8

2.5.4连线8

3软件设计8

3.1电机驱动模块8

3.1.1步进电机工作方式8

3.1.2设计说明10

3.2步数显示模块10

3.2.1设计说明10

3.2.2步数显示模块流程图11

3.3工作状态显示与输入模块11

3.4整体设计流程图12

4仿真演示13

5小结14

参考文献15

附录116

附录217

 

1系统设计整体思路

1.1方案选择

1.1.1总思路

此三相步进电机控制可以用单片机、PLC、EDA实现。

而单片机实现的步进电机控制系统具有成本低、使用灵活的特点。

步进电机是数字控制电机,将脉冲信号转换成角位移,电机的转速、停止的位置取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,非超载状态下,根据上述线性关系,再加上步进电机只有周期性误差而无累积误差,因此步进电机适用于单片机控制。

此系统选用51单片机既可。

步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速由脉冲信号频率决定。

步进电机的驱动电路是根据单片机产生的控制信号进行工作。

因此,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。

因此,此系统主要由单片机、电机及其驱动电路、步数显示模块、工作状态控制与显示模块组成。

1.1.2驱动电路选择

常规的步进电动机控制电路主要由脉冲分配器和驱动电路组成。

比如用PMM8713与LM331驱动三相步进电机,不过线路连接复杂,且不同工作方式的控制困难。

现在主要用微机控制取代脉冲分配器,而给步进电动机提供驱动电源的驱动电路是必不可省的,同时用微机实现对步进电动机的走步数、转向以及速度控制等。

微机已选用51单片机,而驱动电路可以用功率三极管等电子器件搭建成,电路简单,但信号不够稳定,器件较大不便于电路的集成。

而采用专门的驱动芯片便于电路的集成,且驱动简单,驱动信号稳定,不受外部的干扰。

现选用ULN2003a作为驱动电路。

1.1.3显示模块设计

步数显示模块和工作状态显示模块,都是通过单片机输出信号控制发光二极管LED的亮灭。

其中步数显示模块中LED构成数码管,要求显示4位十进制数,故用到4位数码管。

要控制多位的显示电路,需要有字段控制和字位控制。

控制方式分为静态显示方式和动态显示方式。

静态显示方式,每一位的显示器都需要配一个8位输出口来输出该字位的七段码,需要片外扩展输出口。

而动态显示方式将各数码管的对应字段的引脚都并联在一起,线路简单,减少接口,不需片外扩展。

这里选用动态显示方式。

而对数码管的字段控制,可以加入一个专门的7段显示译码器7448,可以实现输出数据直接显示,而不用对照表来译码。

1.1.4工作状态控制模块设计

在单片机系统中,与主机交换信息,有时并不需要复杂的键盘,只要几个简单的开关就可以了。

如果系统装备的开关数量不多,可以直接装在接口上,这种连接的键盘称为独立式键盘。

本次设计需有6个开关,故选用独立式键盘。

独立式键盘一般用查询指令检查某接口上的开关是否按下。

而且在开关闭合或断开时刻,由于触点接触不稳定,使检测点电压发生抖动,会造成被查询的开关状态无法准确读到,为此需加入一些去抖动措施。

分为硬件去抖动和软件去抖动。

软件去抖动,是在检测到有键按下时,执行一个10ms-20ms的延时程序,避开抖动信号,然后再检测该键是否完全闭合。

为了避免程序的复杂,这里采用硬件去抖动方式。

硬件去抖动一般是在开关和单片机接口间加一个RS触发器,或者加入有较长时间常数的积分电路来消除这种振荡。

由于积分电路中元器件更加常见易得,此次设计选用加入积分电路方案。

1.2整体框图

 

 

图1系统整体框图

2硬件设计

2.1单片机

2.1.151单片机介绍

单片机引脚图及引脚功能如下:

单片机的40个引脚大致可分为4类:

电源、时钟、控制和I/O引脚。

电源:

⑴VCC-芯片电源,接+5V;

⑵VSS-接地端;

时钟:

XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。

控制线:

控制线共有4根。

1ALE/PROG:

地址锁存允许/片内EPROM编程

脉冲。

图2单片机引脚图

⑵PSEN:

外ROM读选通信号。

⑶RST/VPD:

复位/备用电源。

⑷EA/Vpp:

内外ROM选择/片内EPROM编程电源。

I/O线:

80C51共有4个8位并行I/O端口:

P0、P1、P2、P3口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。

2.1.2思路

连接好单片机的电源和接地端,时钟用内部方式(需外接晶体振荡器),控制脚中要用到复位功能,接一个手动复位电路。

其4个I/O口都要用到,P3接步进电机驱动电路及工作状态显示模块,P0和P2分别接步数显示中对数码管的字段控制及数码管片选,P1接工作状态控制电路。

2.1.3连线

 

图3单片机部分连线图

此设计中接的是12MHZ的晶振,故一个机器周期为1/12us。

根据经验数据,与晶振一起的两个电容设为15PF。

复位开关按普通开关的形式接入RST脚,且由于人手的反应时间比机器周期要大得多,故不用加入去抖动措施,合上再开通,即完成了一次复位。

单片机的VCC和GROUD都隐藏了,已自动接好,VCC应设为+5V。

2.2电机及其驱动模块

2.2.1ULN2003a介绍

ULN2003是高耐压、大电流、内部由七个硅NPN达林顿管组成的驱动芯片。

其属于可控大功率器件,可以通过扩展电流来满足被控元件对电压、电流的要求。

其可达到高电压输出50V,一般用来驱动继电器、步进电机。

逻辑图如右图:

COM端一般加12V的电压,分析逻辑图知,B端口如果输入高电平,经反相器即为低电平,则该路二极管不导通,C口输出为低电平。

而B口如果输入低电平,经反相器后为高电平,则该路二极管导通,C口输出为图4ULN2003a逻辑图

高电平。

可见,ULN2003a是一个7路反相器电路,即当输入端为高电平时输出端为低电平,当输入端为低电平时输出端为高电平。

2.2.2思路

这里需驱动一个三相步进电机,用一片ULN2003a既可,选用其中三路,对应接到单片机和步进电机上。

用单片机内程序的设定来实现相位的控制,按一定顺序实现绕组的通断。

2.2.3连线

Proteus中没有三相步进电机,故用一个伺服电机代替。

其接线图都是相同的。

ULN2003的COM端和步进电机的VCC都接12V的电源。

 

图5电机驱动模块连线图

2.3工作状态控制模块

2.3.1并联电容消抖法

利用电容的放电延时,采用并联电容法,可以实现硬件消抖。

在通常的开关接法中,在开关两端并联一个电容,即实现了并联电容硬件消抖。

图6并联电容消抖法原理图

2.3.2连线

 

图7工作状态控制模块连线图

这里K0、K1、K2分别为三相单三拍、三相双三拍、三相六拍三种通电方式选择键,K3为启动/停止控制,K4为方向控制,K5为转速控制。

2.4工作状态显示模块

2.4.1思路

LED发光二级管可以直接接单片机。

如果让LED的阳极接单片机IO口,阴极接地,则可以实现IO口输出高电平时,LED亮,低电平时,LED灭。

但是也可以反向,让单片机输出通过一个反相器再接到LED阴极,LED阳极接VCC。

这样可以提高电流,有利于二极管的导通,此时仍是IO口输出高电平时,LED亮,低电平时,LED灭。

LED模块跟单片机P3口的三个脚连接,可以通过控制P3口的数据,实现LED的亮灭。

2.4.2连线

 

图8工作状态显示模块连线图

2.5步数显示模块

2.5.1LED数码管介绍

LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。

这些段分别由字母a,b,c,d,e,f,g,dp来表示。

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。

通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

2.5.27448介绍

7段显示译码器7448是输出高电平有效的译码器,其真值表如表1。

其工作电压为5V。

7448除了有实现7端显示译码器基本功能的输入(DCBA)和输出(Ya~Yg)端外,7448还引入了灯测试输入

端和动态灭零输入端,以及既有输入功能又有输出功能的消隐输入/动态灭零输出端。

在灯测试输入端和动态灭零输入端都接无效电图9显示译码器7448管脚图

平时,输入DCBA经7448译码,输出高电平有效的7段字符显示器的驱动信号,显示相应字符。

除DCBA=0000外,RBI也可以接低电平,见表1中1~16行。

现只用用其7段译码功能,其它管脚悬空既可。

表17448译码关系表

2.5.3思路

运用7段显示译码器7884后,不用去计算与显示字符对应的输出,方便很多,P0口只用输出想显示的数据即可,但注意只能输出至一位数码管,多位数码管采用动态方式,需分别计算每位数码管上希望输出的值。

2.5.4连线

图10步数显示模块连线图

3软件设计

3.1电机驱动模块

3.1.1步进电机工作方式

1)三相单三拍工作方式

在这种工作方式下,A、B、C三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。

因此这种通电方式叫做三相单三拍工作方式。

这时步距角

(度)为:

式中:

m──定子相数;z──转子齿数

表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

0

B

02H

3

0

0

0

0

0

1

0

0

C

04H

2)三相双三拍工作方式

这种工作方式每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CA─AB(或反之)方式通电,故称为双三拍工作方式。

以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置。

它的步距角计算公式与单三拍时的公式相同。

表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)三相六拍工作方式

在这种工作方式下,绕组以A—AB—B—BC—C—CA—A时序(或反时序)转换6次,磁场旋转一周,转子前进一个齿距,每次切换均使转子转动1.5°,故这种通电方式称为三相六柏工作方式。

其步距角

为:

表4六拍的数学模型

步序

控制位

工作

状态

控制

模型

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.1.2设计说明

在此设计中,采用的是三相步进电机,对于步进电机模块的程序设计采用循环程序设计方法。

首先判断工作模式,即电机拍数,将指针指向该方式的数组首端。

工作方式数组不是简单地顺序给出控制模型,而是一个正相的模型,然后加一个0作为判断数,再一个反相的模型,同样加一个0作为判断数。

这是为了方便正反转控制。

即把正反转向的控制模型存放在内存单元中,然后再有判断地逐一从单元中取出对应的控制模块并输出。

还要判断电机的转速,设定一个标志位后通过控制延时使转速变化。

3.2步数显示模块

3.2.1设计说明

步数显示模块是整个程序里的一个字程序。

其是用4位八段数码管来显示工作步数。

先将要显示的数化为10进制数,每位分别储存,从P0口输出显示码,P2口输入位选码,短延时,让此位显示闪烁出来。

然后修改数组地址,求下一位位选码继续显示,直至输出四位数。

这个扫描过程重复50次,保证人眼能观察到步数显示。

3.2.2步数显示模块流程图

 

 

N

\

Y

N

Y

Y

图11步数显示模块流程图

3.3工作状态显示与输入模块

最开始判断是否启动,如没有启动则将P3口输出0X08,即使绿灯与单片机连接端口输出高,则绿灯亮。

判断电机正转时,红灯亮;判断电机反转时,黄灯亮。

同样,通过输出数值使对应管教为1即可。

输入判断是通过用P1口输入值每位和对应管脚为1,其它为零的数值每位相与,则只有在此管脚输入为1时,位与的结果是1,否则为0。

故用此法可以判断P1口某管脚的输入。

3.4整体设计流程图

图12总流程图

4仿真演示

当选择电机工作在单三拍,正转,高速的模式下,K0置高电平,K1、K2、K4、K5置低电平,系统启动,K3置高电平,电机开始转动。

LED四位显示屏显示工作步数,LED指示灯红灯亮显示电机正转的状态。

仿真图如下:

图13仿真示例图

 

5小结

经过这个学期对计算机控制的深入学习,并且在老师的悉心指导和严格要求下,我终于完成了三相步进电机设计课程。

从书本上的知识转移到自己实践的课程设计,每一步对我们来说无疑是巨大的尝试和挑战,也让我在不断地学习改进中获得了很大的提高。

刚接到这个课题时,被很多陌生的或不甚了解的知识弄的无头绪。

后来静下心来,一个一个问题地解决,终于对整个设计有了个大概的理解。

不断地去图书馆查阅相关资料、上网去了解相关的内容,渐渐头脑中的概念清晰了起来。

在具体设计的过程中,我遇到了更大的困难,海量资料中要不断去检索、比较、选择。

不断地给自己提出新的问题,然后去论证、推翻,再接着提出新的问题。

在这个循环往复的过程中,终于完成了整个设计。

设计借鉴了很多前人的想法,看他人的思路对自己受益匪浅,考虑问题有了更多方向。

最终完成仿真让我感到很有满足感。

 

参考文献

[1]谭浩强.C程序设计.北京:

清华大学出版社.2005.[2]于海生.《计算机控制技术》.北京:

机械工业出版社,2007.[3]潘新民.《微型计算机控制技术》.北京:

电子工业出版社,2003.[4]魏立峰,王宝兴.单片机原理与应用技术.北京:

北京大学出版社.2006.[5]陈明荧.8051单片机课程设计实训教材.北京:

清华大学出版社.2004

附录1

整体电路图:

 

附录2

整体程序:

#include

#include

voiddelay1(void);

voiddelay2(void);

voiddisplay(int);

intbs=0;

main()

{chara,b,c,d,e,f,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();

a=P1;}

//...............................................判断工作模式

if(a&0x01)//方式1模型

q=done1;

elseif(a&0x02)//方式2模型

q=done2;

elseif(a&0x04)//方式3模型

q=done3;

//...............................................判断电机转向

if(a&0x10)//判断电机是否要正转

{P3=0x10;//P1.4口为1,电机正转,红灯亮

b=0;}

else

{P3=0x20;//P1.4口为0,电机反转,黄灯亮

if(a&0x04)b=7;//反转时将b置数,使指针指到数组反相序部分

elseb=4;}

//...............................................判断电机转速

if(a&0x20)

{d=0;}

else

{d=1;}

//....................................................

e=b;

f=P3;

while

(1)

{c=*(q+b);//判断电机步数是否走完

if(c==0)b=e;//步数走完,电机重新再走

else

{switch(d)

{case1:

delay1();

case0:

P3=c+f;//从P3口输出电机控制信号

b++;

bs++;//总步数加1

display(bs);//显示步数

j=a;

a=P1;

if(a!

=j)//判断P1口状态信号是否改变

{if(!

(a&0x08))bs=0;//若为停止信号,总步数清零

gotoL;}//状态信号改变,返回到开始,重新对电机控制

}

}

}

}

voiddelay1()//延时5ms子程序

{inti,j;

for(i=0;i<200;i++)

for(j=0;j<300;j++);

}

voiddelay2()//延时50us子程序

{inti,j;

for(i=0;i<10;i++)

for(j=0;j<60;j++);

}

voiddisplay(intn)//电机步数显示子程序

{

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<50;t++)//扫描50次

{k=0xf7;//位选码指向最右一位,第四位

for(i=0;i<4;i++)

{P2=k;//从P2口输入位选码

P0=num[i];//从P0口输出显示码

k=k>>1;//求下一个位选码

delay2();}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1