四相步进电机控制系统设计.docx

上传人:b****6 文档编号:6056636 上传时间:2023-01-03 格式:DOCX 页数:16 大小:356.38KB
下载 相关 举报
四相步进电机控制系统设计.docx_第1页
第1页 / 共16页
四相步进电机控制系统设计.docx_第2页
第2页 / 共16页
四相步进电机控制系统设计.docx_第3页
第3页 / 共16页
四相步进电机控制系统设计.docx_第4页
第4页 / 共16页
四相步进电机控制系统设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

四相步进电机控制系统设计.docx

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

四相步进电机控制系统设计.docx

四相步进电机控制系统设计

《单片机课程设计》设计报告

设计题目:

四相步进电机控制系统设计

系别:

控制工程学院

专业:

测控技术与仪器

设计时间:

2012/12/30

目录

1概述……………………………………………………………………………………..1

2四项步进电机………………………………………………………………………2

2.1步进电机………………………………………………………………………..2

2.2步进电机的控制……………………………………………………..……..2

2.3步进电机的工作过程…………………………………………………….2

3电路图设计…………………………………………………………………….……4

3.1AT89S52概述………………………………………………………………4

3.2最小系统…………………………………………………………………..…4

3.3复位电路………………………………………………………………..……5

3.4拨码电路……………………………………………………………………..5

3.5电机驱动电路………………………………………………………………6

4程序设计……………………………………………………………………………...7

4.1主程序框图…………………………………………………………………7

4.2步进电机速度控制程序框图………………………………………8

4.3拨码开关输入程序框图……………………………………………...10

5总结……………………………………………………………………………………..11

5.1心得……………………………………………………………………………….11

5.2收获……………………………………………………………………….……..11

附录一源程序……………………………………………………………….……….12

附录二电路原理图………………………………………………………….…….15

1概述

本实验旨在通过控制AT89S52芯片,实现对四相步进电机的转动控制。

具体功能主要是控制电机正转、反转、加速与减速。

具体工作过程是:

给试验箱上电后,拨动启动开关,步进电机按照预先设置的转速和转动方式转动。

调整正反转按钮,步进电机实现正反转切换;拨动加速开关,步进电机转速加快,速度达到最大值,不再加速;拨动减速开关时,电机减速转动,速度减到最小速度,停止减速。

 

 

 

实验具体用到的仪器:

AT89S52(试验箱上为89C58)芯片、拨码开关单元、四项步进电机等硬件设备。

实验具体电路单元有:

单片机最小系统、步进电机连接电路、拨码开关连接电路。

 

2四项步进电机

2.1步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。

电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

2.2步进电机的共组原理

2.2步进电机的控制

1.换相顺序控制:

通电换相这一过程称为脉冲分配。

例如:

混合式步进电机的工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

2.控制步进电机的转向控制:

如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

3.控制步进电机的速度控制:

如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。

两个脉冲的间隔越短,步进电机就转得越快。

2.3步进电机的工作过程

开关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方向转动。

  

四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。

单四拍与双四拍的步距角相等,但单四拍的转动力矩小。

八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

  

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.a、b、c所示:

  

a.单四拍b.双四拍c八拍 

步进电机工作时序波形图

对步进电机四个绕组依次实现如下方式的循环通电控制:

单四拍运行:

正转A-B-C-D;反转D-C-B-A

双四拍运行:

正转AB-BC-CD-DA;反转DC-CB-BA-AD

八拍运行:

正转A-AB-B-BC-C-CD-D-DA

本实验使用的是单双八拍循环控制

 

3电路图设计

3.1AT89S52概述

AT89S52单片机是ATMEL公司推出的高档型AT89S系列单片机中的增强型产品。

关于其功能原理及其应用不再赘述。

这里只介绍本实验用到的端口和功能。

P1口:

用户使用的通用I/O口,8位准双向,编程和校验时,可做为高8位地址线;P1.0和P1.1引脚另有第二功能(此实验没用到,不再介绍)

P3口:

8位准双向I/O口

RST:

复位信号输入端,高电平有效

EA:

访问芯片内部和芯片外部程序存储器的选择信号

XTAL1,XTAL2:

芯片内振荡器反相放大器的输出端和输入端

3.2最小系统

单片机最小系统或者称为最小应用系统,就是用最少的元件组成的单片机可以工作的系统,对52系列单片机来说,最小系统一般应该包括:

单片机、复位电路、晶振电路。

3.3复位电路

复位电路采用手动复位和上电自动复位。

上电自动复位:

在单片机上电的瞬间,RC电路充电,由于电容上电电压不能突变,所以RST引脚出现高电平,RST引脚出现的高电平将会随着对电容C的充电过程而逐渐回落。

手动复位:

当按下复位按钮时,RST出现高电平,实现复位。

3.4拨码电路

拨码开关和P3口相连,拨动开关sw1、sw2、sw3、sw4来控制电机的启停、正反转、速度的加减。

3.5电机驱动电路

将步进电机的A、B、C、D分别接到P1.0、P1.1、P1.2、P1.3管脚上

实物连接

 

4程序设计

4.1主程序框图

系统分为电机转动、电机正转、电机反转、电机加速、电机减速和电机停止这几个部分组成,其主程序框图如图下所示

 

4.2步进电机速度控制程序框图

正转部分:

送P1口不同的值,从而改变电机电源的相序,是电机正转,数值分别为0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9。

流程图如下

 

反转部分:

送P1口不同的值,从而改变电机电源的相序,是电机反转,数值分别为0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8。

流程图如下

 

加速部分:

当电机处于正转或反转的时候,按下K2,调用加速程序,是电机每转动一部的延时时间变短,从而实现电机的加速。

 

减速部分:

当电机处于正转或反转的时候,按下K3,调用加速程序,是电机每转动一部的延时时间变长,从而实现电机的减速。

 

运行与停止:

按下K1键,系统默认是停止,拨动一次是运行,在拨动一次是停止,即是基数次运行,偶数次停止(一般不会拨动N次,为了看到现象,就拨动少数几次)

 

4.3拨码开关输入程序框图

用于判断P3.1、P3.2、P3.3、P3.4,

 

 

5总结

5.1心得

这次课程设计,历时多天,失败多次,不断总结失败的经验,从中取得进步。

经过这次课程设计,我明白了具体怎么来实现一个单片机的项目,熟悉了流程,获取信息的途径。

彻底的了解了单片机的用途。

5.2收获

1、能够将理论知识与实践相结合,对理论的理解更透彻。

2、对单片机C语言编程,有了初步的了解,为以后的进一步学习打下了基础。

3、增强了自己的团队意识,在以后的学习和工作中能够更好的与他人合作。

 

【附录一】源程序

/*****************************************************************************************************/

//名称:

四项步进电机的控制

//功能:

实现电机的正反转,以及电机的转速

//指导老师:

吕江涛张宝健

/****************************************************************************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitK1=P3^0;

sbitK2=P3^1;

sbitK3=P3^2;

sbitK4=P3^3;

ucharspeed=0;//定义转速变量,初始值为25

uchark=0;//用来记录驱动数组的位数

bitflagcon=0;//定义正反转

ucharcodeup_data[8]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};//正向驱动数组

ucharcodedown_data[8]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8};//反向驱动数组

ucharcodemotor_h[]={0x9e,0xae,0xba,0xc3,0xc9,0xcf,0xd3,0xd7,0xda,0xdd,

0xdf,0xe1,0xe3,0xe4,0xe6,0xe7};//步进电机计数值TH1高位表

ucharcodemotor_l[]={0x58,0xa2,0x3c,0x1a,0xbe,0x2c,0xad,0x4c,0x6c,0x1e,

0x76,0x7e,0x4a,0xe4,0xc1,0x96};//步进电机计数值TL1低位表

 

/*********************************************************************************************/

//名称:

延时函数

//功能:

定量延时,延时时间=x*1ms

/*******************************************************************************************/

voidDelay_ms(uintx)

{

uinti,j;

for(i=x;i>0;i--)

for(j=112;j>0;j--);//延时约1ms毫秒

}

/*****************************************************************************************/

//名称:

定时器T1初始化函数

/***************************************************************************************/

voidtimer()

{

TMOD=0x10;//定时器T1均为工作模式1,16位定时方式

TH1=0xff;

TL1=0xff;//装定时器T1计数初值

EA=1;//开总中断

ET1=1;//开定时器T1中断

TR1=0;//暂时不启动定时器T1

}

/********************************************************************************************/

//按键处理

/*********************************************************************************************/

voidKeyProcess()

{

if(K1==0)

{

Delay_ms(10);

if(K1==0)

{

TR1=~TR1;//K1键按下后,启动定时器T1

}//再次按下关闭T1,控制步进电机启停

}

if(K2==0)

{

Delay_ms(10);

if((K2==0)&&(speed!

=15))

{

speed++;//转速加1

}

}

if(K3==0)

{

Delay_ms(10);

if((K3==0)&&(speed!

=0))

{

speed--;//转速减1

}

}

if(K4==0)

{

Delay_ms(10);

if(K4==0)

{

flagcon=~flagcon;//正反转

}

}

}

/***************************************************************************************/

//主函数

/*************************************************************************************/

main()

{

timer();//定时器T0和T1初始化

while

(1)

{

KeyProcess();//按键处理函数

}

}

 

/*****************************************************************************************/

//名称:

定时器T1中断函数

//功能:

用于步进电机转速控制,定时时间由查表可知

/****************************************************************************************/

voidtimer1()interrupt3

{

TH1=motor_h[speed];//查计数值高位值表

TL1=motor_l[speed];//查计数值低位值表

if(flagcon==0)//判断正反转

P1=up_data[k];//将驱动值送P1,驱动步进电机运转

else

P1=down_data[k];

k++;

if(k==8)k=0;

}

 

【附录二】电路图

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

当前位置:首页 > 工程科技 > 电子电路

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

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