免费论文查重: 大雅 万方 维普 turnitin paperpass

试议浅析利用单片机制约步进电机

最后更新时间:2024-03-08 作者:用户投稿原创标记本站原创 点赞:18791 浏览:83227
论文导读:
摘要:步进电机作为控制用特种电机,是一种将电脉冲转化为角位移的执行机构。本文重点介绍如何利用STC89C52RC单片机软件编程控制输出脉冲的相序、频率、数量,从而达到控制24BYJ48步进电机的旋转方向、速度以及位置。
关键词:单片机 步进电机 控制
1007-9416(2013)01-0006-02
步进电机作为自动控制设备中的执行元件,它的旋转是以固定的角度一步步运行,由于没有积累误差和精确定位功能,广泛应用于打印机、绘图仪、机器人等设备中。目前对步进电机控制的方法主要有两种:一是通过PLC或专门的定位模块发出高速脉冲,经过步进驱动器进行脉冲分配和功率放大来控制;二是利用单片机软件编程输出控制脉冲,经过驱动模块来实现方向、位置及速度的控制。单片机控制成本较低,使用灵活,本文重点分析利用STC89C52RC单片机编程实现对永磁式步进电机(24BYJ48)的控制。
24BYJ48步进电机为永磁式减速步进电机,减速比为1:64,步距角为5.625°/64。24BYJ48步进电机外形如图1所示,此步进电机共有五根线,依次为:红,橙,黄,粉,蓝,五种颜色。其中橙、黄、粉、蓝四根接线分别为A、B、C、D绕组的一端,红色线为四个绕组的公共端。
1 步进电机的驱动电路
由于单片机驱动电流较小,需要用ULN2003A来驱动步进电机,ULN2003A是高耐压、大电流达林顿阵列组成的非门电路。灌电流可达500mA,并且在关态时能够承受50V的电压,输出还可以在高负载电流并行运行。驱动时将24BYJ48步进电机绕组A、B、C、D端分别与ULN2003A的输出端相连,COM端相连后接至电源,这样当与步进电机绕组连接对应的输入端为高电平时,对应的绕组得电达到驱动的目的。
2 步进电机的正反转控制
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单四拍(A-B-C-D)、双四拍(AB-BC-CD-DA)以及4-1-2八拍(A—AB—B—BC—C—CD—D—DA)三种方式,在控制过程中,我们只要改变绕组通电相序即可实现电机旋转动方向的控制。以1-2励磁方式八拍为例,若A—AB—B—BC—C—CD—D—DA表示电机正转的励磁序号,则励磁序号为AD-D—CD—C—BC—B—AB—A时表示电机反转。在编程时将这些励磁序号组合成数据表,以不同查询方式送数据即可以实现正反转控制。
3 步进电机的转速控制
步进电机的转速取决于脉冲转换频率,也就是每步间的时间间隔。步进电机转动的速度和脉冲频率成正比,频率越高,转速越快,但力矩随之下降;反之,转速慢。但脉冲频率不能过高,当高于步进电机空载启动频率,电机不能正常启动,可能发生丢步或堵转,在有负载的情况下,启动频率应更低。
在控制步进电机转速时,可以利用单片机内部定时器中断来实现,通过编程控制多少次中断后送出一步信号,实现调节输出脉冲频率的目的,从而达到步进电机调速的效果。
4 步进电机旋转角度控制
在步进电机的旋转角度由脉冲个数决定,根据24BYJ48步进电机技术参数得知,旋转角度为360度时需要360/5.625*64=4096个脉冲信号。编程时在中断程序中统计发出脉冲的个数,当到达设定值时关闭定时器,停止发送控制脉冲即可。
5 应用编程
如图2所示,利用STC89C52RC单片控制24BYJ48步进电机,控制脉冲由P0口输出,RP1为P0口上拉电阻,ULN2003A为步进电机驱动芯片,P2口接6个按钮,分别实现步进电机的启动、停止、正转、反转、加速、减速、旋转圈数设置的控制。按下启动后启动定时,步进电机可以运行;按下停止时,关闭定时器,步进电机停止运行;正转、反转按钮可实现旋转方向控制,默认正转;减速、减速按钮控制可实现旋转速度控制;设置按钮可实现旋转圈数设置,不设置时默认一直旋转。
STC89C52RC单片控制24BYJ48步进电机C语言程序:
#include
#define uchar unsigned char
#define uint unsigned int
sbit start=P2^0;
sbit stop=P2^1;
sbit zz=P2^2;
sbit fz=P2^3;
sbit up=P论文导读:==0xff)i=7;P0=tab;}}elseif((k!=0)&&(k==count1))//如到设置值,关定时器,恢复初始值{TR0=0;k=0;j=0;count1=0;P0=0X00;speed=3;};}}参考文献何立民,张俊谟.单片机中级教程:第2版.北京:北京航空航天大学出版社,200

2.王琼.单片机原理及应用试验教程.合肥:合肥工业大学出版社,200吴金

2^4;
sbit down=P2^5;
sbit set=P2^6;
uchar count,speed,i,count1,k;
uint j;
bit zf;//定义一个正反转标志位
/*步进电机1-2相励磁方式A—AB—B—BC—C—CD—D—DA数据*/
uchar tab[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
void main( )
{
P0=0X00;speed=3;zf=1; //初始速度、方向设置
TMOD=0X01;//定时器0工作在方式1,1ms中断一次
TL0=(65536-1000)%256;
TH0=(65536-1000)/256;
EA=1;ET0=1;
/*扫描7个功能按键*/
while(1)
{
if(start==0) TR0=源于:标准论文www.7ctime.com
1;//按下启动按钮,启动定时器if(stop==0){TR0=0;P0=0X00;k=0;j=0;count1=0; speed=3;}; //停止时关定时器 if(zz==0) zf=1; //按下正转按钮时将标志位置位
if(fz==0) zf=0; // 按下反转按钮时将标志位复位
if(up==0) {if(speed!=1){speed--;};while(up==0);};//加速
if(down==0){if(speed!=5){speed++;};while(down==0);};//减速
if(set==0){k++;while(set==0);};//圈数设置
}
}
void time0( ) interrupt 1
{
TL0=(65536-500)%256;
TH0=(65536-500)/256;
count++;
if(count==speed)
{
count=0;
if(k!=0) {j++;if(j==4096){j=0;count1++;};};//如果设置了圈数则进行统计
if((k==0)||(k!=count1))//如未设置或未到设置值,根据正反转标志位送励磁数据
{
if(zf){i++;if(i>7)i=0;P0=tab[i];}
else {i--;if(i==0xff)i=7;P0=tab[i];}
}
else if((k!=0)&&(k==count1)) //如到设置值,关定时器,恢复初始值
{TR0=0;k=0;j=0;count1=0;P0=0X00; speed=3;};
}
}
参考文献
何立民,张俊谟.单片机中级教程:第2版[M].北京:北京航空航天大学出版社,2002.
王琼.单片机原理及应用试验教程[M].合肥:合肥工业大学出版社,2002.
[3]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:人民邮电出版社,2003.
[4]周明安,朱光忠,宋晓华,肖俊建.步进电机驱动技术发展及现状[J].机电工程技术,2005,02(5)源于:论文www.7ctime.com
:19-21.
[5]王晓明.电动机的单片机控制[M].北京:北京航空航天大学出版社,2002.