基于51单片机控制步进电机.docx

上传人:b****6 文档编号:15407409 上传时间:2023-07-04 格式:DOCX 页数:12 大小:129.18KB
下载 相关 举报
基于51单片机控制步进电机.docx_第1页
第1页 / 共12页
基于51单片机控制步进电机.docx_第2页
第2页 / 共12页
基于51单片机控制步进电机.docx_第3页
第3页 / 共12页
基于51单片机控制步进电机.docx_第4页
第4页 / 共12页
基于51单片机控制步进电机.docx_第5页
第5页 / 共12页
基于51单片机控制步进电机.docx_第6页
第6页 / 共12页
基于51单片机控制步进电机.docx_第7页
第7页 / 共12页
基于51单片机控制步进电机.docx_第8页
第8页 / 共12页
基于51单片机控制步进电机.docx_第9页
第9页 / 共12页
基于51单片机控制步进电机.docx_第10页
第10页 / 共12页
基于51单片机控制步进电机.docx_第11页
第11页 / 共12页
基于51单片机控制步进电机.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机控制步进电机.docx

《基于51单片机控制步进电机.docx》由会员分享,可在线阅读,更多相关《基于51单片机控制步进电机.docx(12页珍藏版)》请在冰点文库上搜索。

基于51单片机控制步进电机.docx

基于51单片机控制步进电机

单片机原理及系统课程设计

1引言

步进电机又称为脉冲电动机或阶跃电动机.它是基于最基本的电磁感应作用.将电脉冲信号转变为角位移或线位移的开环控制元件。

单片机控制的步进电机广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机.大型望远镜.卫星天线定位系统等等。

随着经济的发展.技术的进步和电子技术的发展.步进电机的应用领域更加广阔.同时也对步进电机的运行性能提出了更高的要求。

步进电机的原始模型起源于1830年至1860年.1870年前后开始以控制为目的的尝试.应用于氩弧灯的电极输送机构中.这被认为最早的步进电机。

1950年后期晶体管的发明也逐渐应用在步进电机上.对于数字化的控制变得更为容易。

到20世纪60年代后期.在步进电机本体方面随着永磁材料的发展.各种实用性步进电机应运而生。

步进电机往后经过不断改良.使得今日步进电机已广泛运用在需要高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中。

在生产过程中要求自动化、省人力、效率高的机器中.我们很容易发现步进电机的踪迹.尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。

 

2设计方案与原理

4.1设计方案

设计一个51单片机四相步进电机控制系统要求系统具有如下功能:

(1)由I/O口产生的时序方波作为电机控制信号;

(2)信号经过驱动芯片驱动电机的运转;

(3)电机的状态通过键盘控制.包括正转.反转.加速.减速.停止和单步运行。

4.2设计原理

步进电机实际上是一个数字\角度转换器.也是一个串行的数\模转换器。

步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。

从结构上看,步进电机分为三相、四相、五相等类型,本次设计的是四相电机。

四相步进电机的工作方式有单四拍、双四拍和单双八拍三种。

在本次设计中.我们使用的是四相单八拍的工作方式。

通过P1口给A,B,C,D四相依次输出高电平即可实现步进电机的旋转.通过控制两次输出的间隔.即可实现对步进电机的速度控制。

图2.1步进电机内部结构截图

根据步进电机的相关相序表我们可以正常的控制电机的步进运行。

 

3硬件设计

根据设计要求和设计原理.我们可以绘制出基本的功能方框图.以便之后我们连接实际电路时的方便和可靠。

用键盘控制具体的功能模块.这样更能直观方便的控制整体的系统.使其达到我们预期的操作效果。

图3.1中简单描述了整个单片机系统的控制模式和控制流程.包括通过时钟电路和键盘电路.来控制UNL2803驱动电机动作。

图3.1硬件电路功能方框图

图3.2截图中是UNL2803中的细节电路.用前四个输入输出口连接步进电机的四个输入口。

图3.3截图是单片机的键盘控制电路.对系统的控制功能模块的选择和控制。

包括正转启动按钮、反转启动按钮、停止位按钮、加速按钮、减速按钮和单步运行按钮。

图3.2步进电机及其驱动电路截图图3.3按键设置及其连接引脚截图

以上电路功能截图均出自于proteus仿真软件。

4软件设计

软件设计中.我们查询键盘按钮控制方式来选择步进电机运行的工作状态。

在程序里面对按钮分配的I/O地址分别为正转启动位是P3.0.反转启动为是P3.1.停止位是P3.4.加速位是P3.2.减速位是P3.3.单步执行位是P3.5。

通过外部中断INT0和INT1来实现加速减速的外部输入。

图4.1主程序流程图

程序里面加上了防止正常运行过程中电机的突然转向的阻断。

防止电机的意外损坏。

在转向之前.必须按下停止按钮.然后再发出电机的下一条控制命令。

当然.我们的加速减速通过外中断可以在电机正常运行过程中进行操作。

增加了我们系统的可操作性和高可控性。

总  结

在本次课程设计中.首次接触到单片机的应用.接到题目时.对步进电机一无所知.并对如何使用单片机也不甚了解.仅仅知道一些生硬的指令和符号.并不知道它们到底如何使用以及其意义.通过老师指导.然后自己在课后翻阅书籍和上网.搜集到了不少有关步进电动机的知识。

通过钻研这些知识.总算对步进电机有了认识.但是这离课程设计需要掌握的知识相差甚远.为了缩短这种差距.只能不断地查阅资料.仔细揣摩。

在这次课程设计中.通过用单片机控制步进电机的起动、停止.正、反转.加、减速.也对单片机的知识也进行了复习和巩固。

设计仿真电路的过程中.必须要有耐心.在整个电路的设计过程中.花费时间最多的是各个单元电路的连接及电路的细节设计上.如在多种方案的选择中.仔细比较分析其原理以及可行的原因。

这就要求对硬件系统中各组件部分有充分透彻的理解和研究.并能对之灵活应用。

同时在本次设计过程中.还学会了高效率的查阅资料、运用工具书、利用网络查找资料。

发现.在所使用的书籍上有一些知识在实际应用中其实并不是十分理想.各种参数都需要自己去调整.这就要求应更加注重实践环节。

那时候觉得学习单片机是那么的枯燥乏味.整天只是学习这个指令做什么.那个指令做什么.觉得学了一点用都没有。

现在知道.原来一些生硬的指令组合起来竟然可以实现如此多的实用功能。

俗话说的好.实践是检验真理的唯一标准.学习再多的理论也只能纸上谈兵.只有把理论应用到实践中.才能检验出理论的真伪。

所以.虽然一周的时间不长.时间过得也很快.但是在这一周过去后.明白了学习与实践相结合的重要性.指引我在以后的学习中应该把理论和实践联系起来。

 

参考文献

[1]李华,王思明,张金敏.单片机原理及应用[M].兰州:

兰州大学出版社,2001.4

(1):

75-89.

[2]黄勤.单片机原理及应用[M].北京:

清华大学出版社,2010.4

(2):

110-120.

 

附录A仿真界面截图

图3.4Proteus仿真截图

 

附录B步进电机相序表

表2.2四相八拍步进电机相序表

A

B

C

D

0

0

0

1

0

0

1

1

0

0

1

0

0

1

1

0

0

1

0

0

1

1

0

0

1

0

0

0

1

0

0

1

 

附录C主程序

#include//51芯片管脚定义头文件

#include//内部包含延时函数_nop_();

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeFFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

ucharcodeREV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

sbitK1=P3^0;//正转

sbitK2=P3^1;//反转

sbitK3=P3^2;//停止

sbitK4=P3^3;//正向单步运行

sbitK5=P3^4;//加速

sbitK6=P3^5;//减速

intnum=2000;

voidmotor_ffw();

voidmotor_rev();

voidmotor_ffw2();

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

/*延时t毫秒

/*11.0592MHz时钟.延时约1ms

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

voiddelay(intt)

{

uintk;

while(t--)

{

for(k=0;k<20;k++)

{}

}

}

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

/*步进电机正转单步执行

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

voidmotor_single()

{

uchari;

for(i=0;i<8;i++)//一个周期转45度

{

P1=FFW[i];//取数据

delay(num);//调节转速

}

}

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

/*步进电机正转

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

voidmotor_ffw()

{

uchari;

for(i=0;i<8;i++)//一个周期转45度

{

P1=FFW[i];//取数据

if(K5==0)

{break;}//退出此循环程序

delay(num);//调节转速

}

}

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

/*步进电机反转

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

voidmotor_rev()

{

uchari;

for(i=0;i<8;i++)//一个周期转45度

{

P1=REV[i];//取数据

if(K5==0)

{break;}//退出此循环程序

delay(num);//调节转速

}

}

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

*主程序

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

voidmain(void)

{

EA=1;//开放总中断

EX0=1;//允许使用外中断0

IT0=1;//选择负跳变来触发外中断

EX1=1;//允许使用外中断1

IT1=1;//选择负跳变来触发外中断

while

(1)

{

if(K1==0)

{

for(;;)

{

motor_ffw();//电机正转

if(K5==0)

{break;}//退出此循环程序

}

}

elseif(K2==0)

{

for(;;)

{

motor_rev();//电机反转

if(K5==0)

{break;}//退出此循环程序

}

}

elseif(K6==0)

{

motor_single();//电机正转单步执行

}

else

P1=0xf0;

}

}

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

voidint0()interrupt0//外中断0的中断编号为0

{

num=num+100;//每产生一次中断请求.x+80。

}

voidint1()interrupt2//外中断0的中断编号为1

{

num=num-100;//每产生一次中断请求.x-80。

}

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2