步进电机又分为 单极性的步进电机和双极性的步进电机。

静态技术指标

  • 相数:产生不同对极N、S磁场的激磁线圈对数,也可以理解为步进电机204中线圈的组数,其中两相步进电机步距角为1.8°,三相的步进电机步距角为1.5°,相数越多的步进电机,其步距角就越小。
  • 拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即 AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A
  • 步距角:一个脉冲信号所对应的电机转动的角度,可以简单理解为一个脉冲信号驱动的角度,电机上都有写,一般42步进电机的步距角为1.8°•定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。
  • 静转矩:电机在额定静态电压作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积的标准,与驱动电压及驱动电源等无关。

动态技术指标

  • 步距角精度:步进电机转动一个步距角度的理论值与实际值的误差。用百分比表示:误差/步距角*100%。
  • 失步:电机运转时运转的步数,不等于理论上的步数。也可以叫做丢步,一般都是因负载太大或者是频率过快。
  • 失调角:转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。
  • 最大空载起动频率:在不加负载的情况下,能够直接起动的最大频率。
  • 最大空载的运行频率:电机不带负载的最高转速频率。
  • 运行转矩特性:电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大,即电机的频率特性越硬。
  • 电机正反转控制:通过改变通电顺序而改变电机的正反转。

28BYJ-48步进电机简介

28BYJ48步进电机自带减速器,为四相无线步进电机。

# include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
//值越小,速度越快,不能低于1
# define SPEED_MAX		1
# define SPEED_MIN		5

//定义步进机管脚
sbit IN1_D=P1^0;
sbit IN2_C=P1^1;
sbit IN3_B=P1^2;
sbit IN4_A=P1^3;
//定义按键管脚
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
sbit key4=P3^3;
//按下返回键值
# define KEY1_PRESS	1
# define KEY2_PRESS	2
# define KEY3_PRESS	3
# define KEY4_PRESS	4
//没按下返回键值
# define KEY_UNPRESS	0



//延时函数
void delay_ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=110;j>0;j--);
	}
}
//按键检测
u8 key_scan(u8 mode)//传1代表长按,传0代表按一次
{
	static u8 count=1;
	if(mode==1)
	{
		count=1;//连续按
	}
			if(count==1&&(key1==0 ||key2==0 ||key3==0 ||key4==0 ))//如果按下
				{
					delay_ms(10);//消抖
					count=0;
					if(key1==0)
						return KEY1_PRESS;
					else if(key2==0)
						return KEY2_PRESS;
					else if(key3==0)
						return KEY3_PRESS;
					else if(key4==0)
						return KEY4_PRESS;
				}
	
			else if(key1==1&&key2==1&&key3==1&&key4==1)
			{
				count=1;
			}
				return KEY_UNPRESS;
}

void step_num(u8 step,u8 dir)//序号,方向,1顺序0逆序
{
	u8 tmp=step;
	if(dir==0)
	{
		step=7-step;
	}
	switch(step)
	{
		case 0:IN1_D=0,IN2_C=1,IN3_B=1,IN4_A=1;break;
		case 1:IN1_D=0,IN2_C=0,IN3_B=1,IN4_A=1;break;
		case 2:IN1_D=1,IN2_C=0,IN3_B=1,IN4_A=1;break;
		case 3:IN1_D=1,IN2_C=0,IN3_B=0,IN4_A=1;break;
		case 4:IN1_D=1,IN2_C=1,IN3_B=0,IN4_A=1;break;
		case 5:IN1_D=1,IN2_C=1,IN3_B=0,IN4_A=0;break;
		case 6:IN1_D=1,IN2_C=1,IN3_B=1,IN4_A=0;break;
		case 7:IN1_D=0,IN2_C=1,IN3_B=1,IN4_A=0;break;
	}
}
/****************************************************************
*   给步进机一个脉冲让他转动,按key1换向,按key2加速,按key3减速,按key4停止/转动
****************************************************************/
void main()
{
	
		u8 key=0;
		u8 dir=1;
		u8 step=0;//0开始
		u8 flag=1;//1转动,0停止
		u8 speed=SPEED_MIN;
	while(1)
	{
		 key=key_scan(0);
		if(key==KEY1_PRESS)
		{
			dir=!dir;
		}
		else if(key==KEY2_PRESS)//加速
		{
			if(speed>SPEED_MIN)
				speed-=1;
		}
		else if(key==KEY3_PRESS)//减速
		{
			if(speed<SPEED_MAX)
			speed+=1;
		}
		else if(key!=KEY4_PRESS)//停止/转动
		{
			flag=!flag;
		}
		
		if(flag)
		{
			step_num(step++,dir);
			if(step==8)
			{
				step=0;
			}
			delay_ms(speed);//速度
		}
	
	}
	while(1);
}

注意

将步进电机红色线对接到“步进电机模块”输出端子 J47 的 5V 上,其它相序依次接入。如下所示: