文档库 最新最全的文档下载
当前位置:文档库 › (精品)基于51单片机的步进电机的控制毕业论文论文

(精品)基于51单片机的步进电机的控制毕业论文论文

课程设计报告

课程名称单片机原理及应用

课题名称基于51单片机的步进电机的控制设计专业电子信息科学与技术

年班级07级电科一班

学号

姓名谭成

指导教师朱高峰

2010年6月25 日

目录

1、设计任务

1.1步进电机工作原理

1.2步进电机的主要特性

2、设计思路与总体框图

2.1 建立相序表

2.2硬件框图

3、系统主程序

3.1运行方式与方向的控制——循环查表法 3.2步进电机运行速度的控制——软件延时法

3.3源程序流程图

4、系统硬件电路的设计

4.1控制器芯片的选择

4.2步进电机驱动器构成与特点

4.3硬件电路的设计

5、系统的设计仿真

5.1仿真原理图

5.2 源程序代码

5、总结与体会

6、参考文献

1、设计任务

本次课程设计要求按键控制二相四线步机电机的工作状态,包括:正转、反转、加速、减速。步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

1. 1 步进电机工作原理

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。1.2步进电机的主要特性

1、步进电机必须加驱动才可以运转,驱动型号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。

2、型号20BY20L010步进电机的步进角度为18度,一圈360度,需要20个脉冲完成。

3、步进电机具有瞬间启动和急速停止的优越特性。

4、改变脉冲的顺序,可以方便的改变转动的方向。

2、设计思路与总体框图

电机的运转一般由脉冲和方向信号来控制的,脉冲的频率控制电机的转速,脉冲的个数控制电机的转角;方向信号的高、低电平控制着电机的正、反转。用单片机控制步进电机,可以用一个输出口发送脉冲:高电平->延时->低电平->延时……延时的长短控制脉冲的频率,电平的转换次数就是脉冲个数;另外用AT89C51的输出作为方向信号。

2.1建立相序表

实现步进电机运行方式、方向和速度以及启停的控制,是接口软件设计的

主要任务。为此,在编写程序之前,要建立一个相序表,相序表的建立应根据步进电机运行方式的要求。

表1:正转环形脉冲分配表

步数P0.0P0.1P0.2P0.3

A B A B

11100

20110

30011

41001表2:反转环形脉冲分配表

步数P0.0P0.1P0.2P0.3

A B A B

11100

21001

30011

40110

2.2 硬件框图

3、系统主程序

3.1运行方式与方向的控制——循环查表法

步进电机的运行方式是指各相绕组循环轮流通电的方式。为了实现对各绕组按一定方式轮流加电,需要一个脉冲循环分配器。循环分配器可用硬件电路来实

现,也可用软件来实现。采用软件来设计脉冲循环分配器,又有两种方法:控制字法和循环查表法。而本课程设计用到的是循环查表法。

循环查表法是将各相绕组加电顺序的控制代码制成一张表——步进电机相序表,存放在内存区,再设置一个地址指针。当地址指针依次加1(或减1)时,即可从表中取出加电的代码,然后输出到步进电机,产生按一定运行方式的走步操作。若改变相序表内的加电代码和地址指针的指向,则可改变步进电机的运行方式和方向。

步进电机的运行方向是采用设置相序表的指针进行控制的。如果把指针设在指向正相序表的第一个元素,依次加1,取出加电代码去控制步进电机的运行方向叫做正方向,那么,再把指针改设在指向反相序表的第一个元素,依次加1的方向就是反方向。

3.2步进电机运行速度的控制——软件延时法

控制步进电机速度有两个途径:一是硬件改变输入脉冲的频率,通过对定时器定时常数的设定,使其升频、降频或恒频。二是软件延时,或调用子程序。采用软件延时方法来改变步进电机速度。本次课程设计用到的是软件延时法。

3.3 源程序流程图

开始Y

sw1? 电机正转

端口初始化N

Y

Y(有键按下) sw2?

电机反转

键扫描N

Y

N sw3?

电机加速

N

Y

调用延时程序sw4?

电机减速

N

4、系统硬件电路的设计

4.1 控制器芯片的选择

控制器采用MCS -51单片机。其引脚功能如下:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51 ?指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

4.2 步进电机驱动器构成与特点

1)步进电机不能直接接到交、直流电源上工作,而必须使用专用设备——步进电机驱动器。步进电机驱动系统的性能,除与电机的自身性能有关外,在很大程度上也取决于驱动器的优劣。

步进电机驱动器一般由环形分配器、信号处理级、推动级、驱动级等各部分组成,用于功率步进电机的驱动器还有多种分配分配保护。

环形分配器用来接受来自控制器的CP脉冲,并提供步进电机状态转换表的状态顺序产生各相导通或截止的信号。每来一个CP脉冲,环形分配器的输出就转换一次。因此,步进电机的转速的高低、升速或降速、启动或停止都完全取决于CP脉冲的有无或频率。同时,环形分配器还必须接受控制器的方向信号,从而决定其输出的状态转换是按正序转换还是反序转换,于是就决定了步进电机的转向。接受CP脉冲和方向电平是环形分配器的最基本功能。

从环形分配器输出的各相导通或者截止的信号送入信号放大或处理级。信号放大的作用是将环形分配器输出的信号加以放大,变成足够大的信号送入推动级,这中间一般放大既需电压放大,也需电流放大。信号处理是实现信号的某些转换、合成等功能,产生斩波、抑波等特殊功能的信号,从而产生特殊功能的驱动,本级还经常与各种保护电路、控制电路组合在一起,形成较高性能的驱动输出。

2)驱动级的作用是将较小的信号加以放大,变成足以驱动级输入的较大信号。有时,推动级还承担电平转换作用。驱动级直接与步进电机各绕组相连接,它接受来自推动级的输入信号,控制步进电机各绕组的导通与截止,同时也对绕组承受的电压和电流进行控制。

各种电子设备的末级一般需要功率放大,步进电机驱动也是这样。为使步进电机满足各种专有权的输出,驱动级必须对电机的绕组提供足够的电压和电流。但步进电机驱动与一般电子设备的驱动有不同的特点,主要体现在:a各相绕组都是开关工作,多数电动机的绕组都是连续的交流或者直流,而步进电机的各相绕组都是脉冲式供电,所以绕组电流不是连续的而是离散的。

b电动机的各相绕组是绕在铁心上的线圈,所以都有比较大的电感。绕组通电时电流上升率受到限制,因而影响电动机绕组电流的大小。

c绕组断电时,电感中磁场的储能将维持绕组中已有的电流不能突变,结果使应该截止的相不能立即截止。为使电流尽快衰减,必须设计适当的续流回路。绕组导通和截止过程中都会产生较大的反向电动势,而截止时的反电动势将对驱动级器件的安全产生十分有害的影响。

d电动机运转时在各相绕组中将产生旋转电动势,这些电动势的大小和方向将对绕组电流产生很大的影响。由于旋转电动势基本上与电动机转速成正比,转速越高,电动势越大,绕组电流越小,从而使电动机输出转矩也随着转速升高而下降。

e电动机绕组中有电感电动势、互感电动势、旋转电动势。这些电动势与外加电共同作用于功率器件,当其叠加结果使电动机绕组两端电压大大超过电源电压时,使驱动级的工作条件更为恶化。

根据以上的功率放大级的设计要点、组成和特点,结合本课程设计的设计要求,此设计选用单片机控制可以省去环形分配器,节约成本,电路系统结构简单,维护方便,灵活性好等特点。

4.3硬件电路的设计

按钮接P2.0~P2.3作为触发输入

单片机P1.0~P1.3作为O口输出控制脉冲

由三极管、二极管、电阻搭建2个H桥作为驱动电路驱动步进电机。

图1单片机控制二相步进电机电路图

图2 AT89S51引脚

图3二相步进电机的驱动电路

5、系统设计仿真

5.1 Proteus仿真电路

具体操作:启动系统,默认步进电机正转。此时按下sw2,切换到反转;按下sw1可切换回正转;每按一次sw3,就加速一次,直至上限速度;按一次sw4,就减速一次,直到下限速度。

5.2 源程序代码

运行Keil中文版,参照电路图和流程图编写程序

#include

static bit stop_flag; 步进电机停止标志

static int speedlevel; 步进电机转速参数,数值越大速度越慢,最小值为1,速度最快static int spcount; 步进电机转速参数计数

void delay(unsigned int endcount); 延时函数,延时为endcount*0.5毫秒

void gorun(); 步进电机控制步进函数

void main(void)

{

count = 0;

step_index = 0;

spcount = 0;

stop_flag = 0;

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

EA = 1; 允许CPU中断

TMOD = 0x11; 设定时器0和1为16位模式1 ET0 = 1; 定时器0中断允许

TH0 = 0xFE;

TL0 = 0x0C; 设定时每隔0.5ms中断一次TR0 = 1; 开始计数

turn = 0;

speedlevel = 2;

delay(10000);

speedlevel = 1;

do{

speedlevel = 2;

delay(10000);

speedlevel = 1;

delay(10000);

stop_flag=1;

delay(10000);

stop_flag=0;

Turn=!turn;

}while(1);

}

定时器0中断处理

void timeint(void) interrupt 1

{

TH0=0xFE;

TL0=0x0C; 设定时每隔0.5ms中断一次count++;

spcount--;

if(spcount<=0)

{

spcount = speedlevel;

gorun();

}

}

void delay(unsigned int endcount) {

count=0;

do{}while(count

}

void gorun()

{

if (stop_flag==1)

{

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

return;

}

switch(step_index)

{

case 0: 0

P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: 0、1 P1_0 = 1; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 2: 1

P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 3: 1、2 P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: 2 P1_0 = 0; P1_1 = 0;

P1_2 = 1;

P1_3 = 0; break;

case 5: 2、3

P1_0 = 0;

P1_1 = 0;

P1_2 = 1;

P1_3 = 1; break;

case 6: 3

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 1; break;

case 7: 3、0

P1_0 = 1;

P1_1 = 0;

P1_2 = 0;

P1_3 = 1;

}

if(turn==0)

{

step_index++;

if (step_index>7)

step_index=0; }

else

{

step_index--;

if (step_index<0)

step_index=7;

}

}

6、系统评价

本文所设计的步进电机驱动电路结构简单,可以与AT89C51直接接口,且接口简单只需要脉冲输入和方向输入两个控制信号,节省了软硬件开发时间。

虽然简便易行,但延时受CPU主频的影响,导致在主频较低的微机上开发的步进电机控制程序换到较高的主频的微机上,就不能正常运行,甚至由于频率太高,步进电机干脆不动了。而且,步进电机的速度还受到本身距——频特性的限制,设计时应满足运行频率与负载力矩之间的确定关系,否则,就会产生失步或无法工作的现象。

7、总结与体会

在完成本设计的过程中,我把注意力主要集中在编程,电路仿真和调试上。合理的运用软件设计模块电路可以节省很多时间,但完全照搬也不能达到预期的效果,因为实际参数无法与设计精确匹配,因此做到精益求精,尽量达到指标要求。本次设计综合运用了单片机和集成电路的知识,通过查阅大量相关资料,包括查阅相关书籍和网上的资料。在方案设计方面,我们小组成员通过讨论筛选出最优的设计方案,比如在驱动电路设计时,我们放弃直接利用集成块驱动步进电机,而选用分离元件来实现同样功能,从而对小功率放大电路有了进一步的了解。

通过这次课程设计,进一步了解了步进电机的工作原理,以及单片机怎样控制电机的实现。从电路设计,单片机控制编程以及Proteus仿真,到最后的电路焊接制成电路板,让我感受最深的是搭建电路,第一遍搭建电路时吴中阳,尹华增,田震很认真的按着原理图把电路搭建出来了,可是去测试时,按键后,

电机一直不转动,于是我们又把电路重新搭建一遍,因为第一遍搭建的电路焊接不标准,存在虚焊的现象,而且仿真与实际电路参数存在差异,驱动电路中电阻选用不合理,放大后的电流没有达到电机所需要的0.5A。第二遍搭建,我们就改方法了,运用8个npn管和基极电阻构成放大电路,驱动电机工作。但是测试了还是不动,最后经过我们不断的调整,发现是基极电阻值小了,电流放大倍数不足以提供电机转动,最终还是到了正常状态。另外就搭建过程中出现的问题而言,我认为在搭电路过程中我们要特别注意这样几个方面:一是元器件要插紧并且要牢固;二是搞清楚电路图中电路的流向,标出正负极;三是搭建时尽量使用最少的线连接一个赏心悦目的电路,便于老师检查,自己找错误。

本次课程设计,使我的设计能力、分析与解决实际问题的能力、动手操作能力得到了很大的提高。通过该课题的设计学习,更熟悉的了解和掌握单片机应用系统设计的基本方法、设计思路、设计步骤及调试运行等全过程,达到了理论联系实际,学以致用的目的。

通过两周的努力,完成了老师交给我们的设计工程——单片机控制二相四线步进电机。刚开始遇到一些困难,经过老师的细心指导,和同学的帮助,才得以解决。在规定时间内完成了任务。期间,感触最深的是自己的专业基础知识不熟练,知识面不够具体全面,虽然经翻阅资料,知识点能够整合完成,但更多的需要自己平时注意专业知识的补充和积累,提高动手,设计能力和分析解决问题的能力,为就业后的工程设计奠定良好的基础。

8、参考文献

[1]王晓明编,电动机的单片机控制(第一版),北京航空航天大学出版社,2002

[2]张毅刚编,单片机原理与应用,高等教育出版社,2006

[3]康华光编,电子技术基础模拟部分(第五版),高等教育出版社,2006

[4]董峰,解统燕编,Protel DXP电路设计基础教程,机械工业出版社,2008

相关文档