单片机控制步进电动机的课程设计.docx
《单片机控制步进电动机的课程设计.docx》由会员分享,可在线阅读,更多相关《单片机控制步进电动机的课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
单片机控制步进电动机的课程设计
单片机控制步进电动机
摘要
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
步进电机的调速一般是改变输入步进电机的脉冲的频率来实现步进电机的调速,因为步进电机每给一个脉冲就转动一个固定的角度,这样就可以通过控制步进电机的一个脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变电机的转速,从而实现步进电机的调速。
在本设计方案中采用AT89C51型单片机内部的定时器改变CP脉冲的频率从而实现对步进电机的转速进行控制,实现电机调速与正反转的功能。
关键词:
步进电机,单片机,调速系统,数码管,发光二极管。
第一章绪论
1.1概述
《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。
1.2设计目的
(1)加强对单片机及C语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。
(2)用单片机模拟实现具体应用,使个体设计能够真正使用。
(3)把理论知识和实践相结合,充分发挥个人能力,并在实践中锻炼。
(4)提高利用已学知识分析和解决问题的能力。
(5)提高实践动手能力。
1.3设计任务和内容
1.3.1设计任务
利用单片机控制二相四线(5V)步进电动机,完成通过按键实现步进电动机的启停控制,并以两个按键实现步进电动机的调速控制且速度变化明显。
其中,速度分为3级,0级最低,2级最高。
1.3.2设计要求
通过本系统的设计,了解步进电动机的控制原理并掌握其编程控制方法;进一步熟悉单片机系统设计方法。
第二章系统分析
2.1步进电动机原理及其控制
一、步进电动机是一种将电脉冲信号转换成相应角位移或线位移的电动机,它的运行需要专门的驱动电源,驱动电源的输出受外部的脉冲信号控制。
每一个脉冲信号可使步进电机旋转一个固定的角度,这个角度称为步距角。
脉冲的数量决定了旋转的总角度,脉冲的频率决定了电动机旋转的速度,改变绕组的通电顺序可以改变电机旋转的方向。
在数字控制系统中,它既可以用作驱动电动机,也可以用作伺服电动机。
它在工业过程控制中得到广泛的应用,尤其在智能仪表和需要精确定位的场合应用更为广泛。
二、步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。
若每旋转一圈以200个励磁信号来计算,则每个励磁信号前进1.8度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。
三、步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。
图为步进电动机的控制等效电路,适应控制A、B、/A、/B的励磁信号,即可控制步进电动机的转动。
每输出一个脉冲信号,步进电动机只走一步。
因此,依序不断送出脉冲信号,即可步进电动机连续转动。
四、
本系统选用的是二相四线步进电动机(5V),其逻辑功能图如图2-1所示。
该电动机可工作于单拍和单双拍两种模式下。
分别给A、B、
、
不同的控制信号,可以得到不同的效果。
以单拍模式为例,正转则分别给A、B、
、
循环供电,反转则分别得A、
、
、B循环供
图2-1步进电动机逻辑功能图
电。
但是,一般情况下单拍模式转动时相角过度小,转动角度大,转动不连贯。
为让步进电动机较连贯地转动,一般设计成单双拍混合模式。
表2-1列出了两相四线单双拍混合模式下正向转动(顺势针方向)时P2口的控制数据(P2口的高4位未参与控制该电动机,设其值为0)。
表2-1两相四线步进电动机正转转序表
工作模式
转序
B(P2.3)
(P2.2)
(P2.1)
A(P2.0)
P2口输出值
两相四线步进式电动机单双拍混合模式
A
0
0
0
1
0x01
AB
1
0
0
1
0x09
B
1
0
0
0
0x08
B
1
1
0
0
0x0c
0
1
0
0
0x04
0
1
1
0
0x06
0
0
1
0
0x02
A
0
0
1
1
0x03
2.2步进电动机驱动
设计采用ULN2003作为步进电动机的驱动芯片。
ULN2003是由7路高电流达林顿阵列共同发射极组成的驱动芯片,它工作电压高工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
图2-2-1ULN2003引脚图
ULN2003采用DIP—16或SOP—16塑料封装。
方框图
封装外形图ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。
它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。
ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。
用户输出口的外接负载可根据以上参数估算。
采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。
通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
作用介绍
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
图2-2-2作用功能图
输入5VTTL电平,输出可达500mA/50V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
该电路的特点如下:
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
ULN2003芯片引脚介绍
引脚1:
CPU脉冲输入端,端口对应一个信号输出端。
引脚2:
CPU脉冲输入端。
图2-2-3引脚介绍
引脚3:
CPU脉冲输入端。
引脚4:
CPU脉冲输入端。
引脚5:
CPU脉冲输入端。
引脚6:
CPU脉冲输入端。
引脚7:
CPU脉冲输入端。
引脚8:
接地。
引脚9:
该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。
用于感性负载时,该脚接负载电源正极,实现续流作用。
如果该脚接地,实际上就是达林顿管的集电极对地接通。
引脚10:
脉冲信号输出端,对应7脚信号输入端。
引脚11:
脉冲信号输出端,对应6脚信号输入端。
引脚12:
脉冲信号输出端,对应5脚信号输入端。
引脚13:
脉冲信号输出端,对应4脚信号输入端。
引脚14:
脉冲信号输出端,对应3脚信号输入端。
引脚15:
脉冲信号输出端,对应2脚信号输入端。
引脚16:
脉冲信号输出端,对应1脚信号输入端。
2.3系统方案
系统以AT89C51作为主控制器。
按照设计任务需要3个按键,系统采用循环检测法扫描按键,分别将单片机的P1.5口接减速按键,P1.6口接加速按键,P1.7口接启停按键。
此外,单片机的P2.0接步进电动机的A端控制信号P2.2接
的控制信号,P2.3接B的控制信号,P2.1接
的控制信号,步进电动机工作于单双拍混合模式。
第三章核心器件简介
1、AT89C51单片机
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单
片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3-1AT89C51单片机
现在AT89S51/52已经取代了AT89C51/52。
2.
步进电动机
3.步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器图3-2步进电动机
虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。
您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
4.按钮
按钮是一种人工控制的主令电器。
主要用来发布操作命令,接通或开断控制电路,控制机械与图3-3按钮
电气设备的运行。
对于常开触头,在按钮未被按下前,电路是断开的,按下按钮后,常开触头被连通,电路也被接通;对于常闭触头,在按钮未被按下前,触头是闭合的,按下按钮后,触头被断开,电路也被分断。
由于控制电路工作的需要,一只按钮还可带有多对同时动作的触头。
按钮的用途很广,例如车床的起动与停机、正转与反转等;塔式吊车的起动,停止,上升,下降,前、后、左、右、慢速或快速运行等,都需要按钮控制。
第四章系统流程与程序
4.1流程图
该设计控制步进电动机的转速和转向。
设置3个按键,分别
制电动机的启停、加速档位和减速档位;电动机的转速由延时长短决定,步进电动机的转向由相序表决定。
系统基本流程如图3所示。
图3系统流程图
4.2系统程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineMotor(x){P2&=0xF0;P2|=x;}
ucharcodeptable[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x00};
ucharcodentable[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};
ucharstart=0,speed=0;
voiddelay(uinti)
{
uintj,k;
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
voidkeyScan()
{
if(P1!
=0xff)
{
delay(10);
if(P1!
=0xff)
{
switch(P1)
{
case0x7f:
start=~start;
break;
case0xbf:
{
if(speed<2)
speed++;
else
speed=2;
}
break;
case0xdf:
{
if(speed>0)
speed--;
else
speed=0;
}
break;
default:
break;
}
while(P1!
=0xff);
}
}
}
voidcontrolMotor()
{
uchari;
keyScan();
if(start)
{
for(i=0;i<=8;i++)
{
Motor(ntable[i]);
delay(speed+1);
}
}
}
voidmain()
{
while
(1)
controlMotor();
}
第五章仿真环境搭建及测试
5.1仿真环境搭建
根据题目要求,仿真系统所需器件清单见表5-1。
选择好元器件后即可搭建本系统的仿真环境,如图5-1所示。
在面板的空白处单击右键,选择place→Text→Script即可编译文本,对某一元器件的功能等进行进一步的解释。
表5-1Proteus仿真时钟系统器件清单
序号
元器件
Proteus
数量
1
AT89C5单片机
AT89C51
1
2
步进电动机
MOTOR-STEPPER
1
3
按钮
BUTTON
3
图5-1单片机控制步进电动机仿真电路图
5.2测试运行
在图5-1中双击单片机器件,然后在弹出的EditComponent对话框的ProgramFile项中载入所得到的HEX文件,单击OK按钮退出,然后启动即可开始仿真。
单击图5-1中的启停键即可看到步进电动机缓慢转动,加速键和减速键分别控制着步进电动机的转动速度。
第六章设计心得
通过本次课程设计我们学习到了许多书本上没有的知识,通过自己查资料和互相讨论,对系统进行整体设计后基本达到了要求,实现步进电机正反加减速的控制并通过对方案的比较,综合考虑,选用了最佳的方案,使我们对步进电机有了更深刻的认识,使自己将理论与实际相结合起来同时对单片机的设计及编程有了更深的了解,学会了很多。
同时衷心感谢老师的指导。
第七章附录
实验程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineMotor(x){P2&=0xF0;P2|=x;}
ucharcodeptable[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x00};
ucharcodentable[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};
ucharstart=0,speed=0;
voiddelay(uinti)
{
uintj,k;
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
voidkeyScan()
{
if(P1!
=0xff)
{
delay(10);
if(P1!
=0xff)
{
switch(P1)
{
case0x7f:
start=~start;
break;
case0xbf:
{
if(speed<2)
speed++;
else
speed=2;
}
break;
case0xdf:
{
if(speed>0)
speed--;
else
speed=0;
}
break;
default:
break;
}
while(P1!
=0xff);
}
}
}
voidcontrolMotor()
{
uchari;
keyScan();
if(start)
{
for(i=0;i<=8;i++)
{
Motor(ntable[i]);
delay(speed+1);
}
}
}
voidmain()
{
while
(1)
controlMotor();
}
参考文献
[1]李全利.单片机原理与接口技术,高等教育出版社2009
[2]余孟尝.数字电子技术基础,高等教育出版社,2006
[3]杨素行.模拟电子技术基础:
高等教育出版社,2006
[4]李运华主编.机电控制.第一版.北京航空航天大学出版社
[5]秦曾煌主编.电工学上册:
电工技术.第五版.高等教育出版社