步进电机原理 Proteus仿真及硬件实现(详细)

1 步进电机原理

1.1 步进电机简介

步进电机是将输入的电脉冲信号转换为角位移或线位移的元件。在不超负载运作的情况下,电机的转速以及停止的位置只取决于脉冲的个数和脉冲的频率。脉冲数越多,电机的角位移越大,脉冲频率越高,电机的转速越快,但不能超过最高频率,否则力矩减小,电机不转。

1.2 电机拆解内部结构

在这里插入图片描述在这里插入图片描述
左图为定子,电机转动过程中,定子是不动的,故称为定子。可以看到定子中包含了十二个线圈。关于圆心对称的一对线圈称为一个相。图中定子为6相。
右图为转子,步进电机的转子上布满了沿轴向的齿,图中细密的红色的条线的即为转子的齿

1.3 步进电机工作原理

(以三相步进电机为例)
当某一相定子通电励磁后,它将吸引转子转动,直至与通电的线圈最接近的那一对转子上的齿(示意图中绿色突出部分即为转子的齿)与之对齐,此时步进电机停止转动。其内部结构示意与转动过程如下:
在这里插入图片描述
1、这种工作方式称为三相单三拍。三相指的是电机定子有三个相;单指的是一次只给一个相通电;而三拍指的是每一轮循环要通电三次。
2、·除了三相单三拍的工作方式,对于三相步进电机,还有三相双三拍和三相六拍工作方式。
三相双三拍是两相绕组同时通电即AB->BC->CA。而三相六拍是A->AB->B->BC->C->CA。
·可以看出电机的转速和通电相切换的频率有关,切换的越快,电机转速也越快。电机转动的方向与相序有关,当以A->B->C相序通电时,转子逆时针转动,当以A->C->B相序通电时,转子顺时针转动。
3、·电机每拍转动的角度(称为步距角)可以由以下公式描述
在这里插入图片描述
其中m为定子绕组的相数,;z为转子的齿数,k描述通电方式,m相m拍时取k=1,m相2m拍时取k=2。
上面的例子中可以由m=3,z=4,k=1求得角度为30°,即每通一次电,电机转动30°

2 步进电机Proteus仿真

2.1 步进电机仿真模型

搜索motor,找到MOTOR-STEPPER,找到一个六线四相制的步进电机。各引脚说明见图,中间两线为电源Vcc。ABCD相标注如图
在这里插入图片描述

2.2 步进电机驱动电路设计

单片机IO口驱动能力十分有限,无法直接驱动步进电机,需要设计驱动电路,单片机仅作控制用。这里使用到ULN2003芯片
在这里插入图片描述
芯片的8号引脚接GND,9号引脚接VCC。当某一路B输入高电平时,对应输出端C输出低电平。此时连接到该引脚上的步进电机对应的相在外接的Vcc和芯片输出端的低电平作用下通电,励磁。因此要给步进电机某一相通电,就是给该相对应的芯片的输入端高电平。

电机是感性负载,当ULN2003A芯片驱动感性元件时,在断电的瞬间,由于电感的特点,会产生瞬时的大电流,而内部二极管起到续流的作用,能较好保护元件。

这个芯片还可以用于有源蜂鸣器的扩展,只要将蜂鸣器的Vcc端通过限流电阻接Vcc,另一端接到芯片的输出某一路引脚,当对应IO口输出高电平时,蜂鸣器通电,开始按固定频率发声

2.3 接口芯片与步进电机的连接

在这里插入图片描述

2.4 四相步进电机工作方式

四相步进电机有单四拍(A-B-C-D)和双四拍(AB-BC-CD-DA)和八拍(A-AB-B-BC-C-CD-D-DA)这三种工作方式。第一种工作方式扭矩小,功耗小,但震动大。第二种工作方式扭矩较大,功耗也大,震动小。第三种工作方式步距角小,输出更平滑,推荐采用这种方式

只需要控制单片机的IO口使得ULN2003芯片按A-AB-B-BC-C-CD-D-DA的次序输出低电平即可完成步进电机转动的一轮循环。如果要按相反方向转动,只要把上面A-AB-B-BC-C-CD-D-DA的次序反过来即可。
至于给A、B、C、D相通电需要分别使哪个IO口输出高电平,与步进电机ABCD相和ULN2003以及IO口的连接有关系。参见2.1中标注的步进电机的abcd相

3 仿真参考程序

1.使电机连续逆时针转动

#include "reg52.h"

#define GPIO_MOTOR P1

unsigned char code Clockwise[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //顺时针A-AB-B-BC-C-CD-D-DA
unsigned char code Anticlockwise[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};  //逆时针转动顺序

void Delay(unsigned int t)
{                           
	unsigned int k;
	while(t--)
	{
		for(k=0; k<80; k++)
		;
	}
}

void  Motor()   //逆时针转动8拍
{ 
	unsigned char i;
	for(i=0;i<8;i++)
	{ 
		GPIO_MOTOR&=0xf0;  //低四位清零
		GPIO_MOTOR|=Anticlockwise[i];  //置位低四位的相应位
		Delay(2);	//改变参数可以调节转速	
		//如果要使步进电机停止转动,则使用GPIO_MOTOR&=0xf0; 
	}	                  
}

void main(void) 
{ 
  while(1)
  {
	Motor();
  }
}

2.使电机顺时针转动/逆时针转动180°后停下的函数

//以下函数在主函数中只需调用一次即可转动180°
void  Anticlockwise180() //逆时针转动180°
{ 
	unsigned char i,j;
	for(j=0;j<79;j++)  //79这个数字与电机参数有关,需要在仿真实验中不断调整从而确定
	{
		for(i=0;i<8;i++)
		{ 
			GPIO_MOTOR&=0xf0;  //低四位清零
			GPIO_MOTOR|=Anticlockwise[i];  //置位低四位的相应位
			Delay(3);	//调节转速	
		}	   		
  }  
	GPIO_MOTOR&=0xf0;  //低四位清零,停止转动
}


void Clockwise180()  //顺时针转动180°
{
	unsigned char i,j;
	for(j=0;j<79;j++)  //79这个数字与电机参数有关,需要在仿真实验中不断调整从而确定
	{
		for(i=0;i<8;i++)
		{ 
			GPIO_MOTOR&=0xf0;  //低四位清零
			GPIO_MOTOR|=Clockwise[i];  //置位低四位的相应位
			Delay(3);	//调节转速	
		}	   		
  }  
	GPIO_MOTOR&=0xf0;  //低四位清零,停止转动
}

4 仿真原理图

在这里插入图片描述

5 硬件实现

5.1 28BYJ48步进电机

在这里插入图片描述
28BYJ48是很常见的一种四相步进电机,与仿真模型中不同的是它是五线制,也就是只有一根线需要接到电源Vcc。

对于28BYJ-48。COM端(公共端)为红线,接Vcc,橙黄粉蓝依次为ABCD相。根据产品手册可以查到步距角为5.625°/64,这个步距角是在一二相单极驱动(即八拍工作方式)下得出的。这里的/64意味着电机内部集成的减速齿轮的减速比为1/64。下面是内部拆解结构,可以看到里面是包含了减速齿轮的。
在这里插入图片描述

5.2 电机的驱动

有了步距角参数,我们就可以计算出要使步进电机转动180°,所需要的拍数。每拍转动(5.625/64)°,在八拍工作方式下,一轮循环下来就转动了(5.625°/8)°,要使电机转动180°就是要进行180/((5.625°/8))=256轮的8拍循环。256恰好是无符号8位数据所能容纳的数据数(0-255共256)。这也是这个电机设计的巧妙之处。

程序与上面的是类似的,改个参数即可,以逆时针转动为例,给出程序:

void  Anticlockwise180() //逆时针转动180°
{ 
	unsigned char i,j;
	for(j=0;j<255;j++)  //改成255
	{
		for(i=0;i<8;i++)
		{ 
			GPIO_MOTOR&=0xf0;  //低四位清零
			GPIO_MOTOR|=Anticlockwise[i];  //置位低四位的相应位
			Delay(3);	//调节转速	
		}	   		
  }  
	GPIO_MOTOR&=0xf0;  //低四位清零,停止转动
}

由于步进电机制造时存在误差,实际结果与180°可能有少量误差。并且如果负载较重,步进电机会出现丢步情况,使用前应该根据负载选择合适的步进电机。

  • 53
    点赞
  • 323
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星水天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值