步进电机详解
电机(俗称“马达”)是指依据电磁感应定律实现电能转换或传递的一种电磁装置。在电路中用字母M表示。它的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。发电机在电路中用字母G表示。它的主要作用是利用电能转化为机械能,从而带动比如像水泵之类的设备进行运转。
电机运行原理
当步进电机切换一次定子绕组的激磁电流时,转子就旋转一个固定角度即步距角。步距角一般由切换的相电流产生的旋转力矩得到,所以需要每相极数是偶数。步进电机通常都为两相以上的,当然也有一些特殊的只有一个线圈的单相步进电机。虽说单相,实为一个线圈产生的磁通方向交互反转而驱动转子转动。实用的步进电机的相数有单相、两相、三相、四相、五相。
定子绕组:定子每极上套有一个集中绕组,相对两极的绕组串联构成一相。相位越多,转角度越少,步距越精确。
步进电机运行原理
每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。
相位不同区别:(例如四相与八相区别)
1)运行方式不同:
四相四八拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A。
2)步距角不同:(对应一个脉冲信号,电dao机转子转过的角位移用θ表示。θ=360度)
四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
总结:相位越多,步数角度越小,走位越精确
步进电机驱动原理
步进电机一般由芯片引脚控制,但是芯片引脚释放的上升沿信号电压电流都很低,不足以满足达到令步进电机运动最低要求,所以这时候需要引入媒介驱动器,驱动器原理和三极管原理差不多,都是通过低电流控制高电流操作。
功能演示:
使用ULN2003芯片做驱动,利用STC芯片做触发,使35YB步进电机运动
代码参考:
/**************************************************************************************
* 步进电机实验
*
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit MOTOA = P1^0;
sbit MOTOB = P1^1;
sbit MOTOC = P1^2;
sbit MOTOD = P1^3;
#define SPEED 200
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
P1=0X00;
while(1)
{
MOTOA = 1;
MOTOB = 0;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 1;
MOTOB = 1;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 1;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 1;
MOTOC = 1;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 1;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 1;
MOTOD = 1;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 0;
MOTOD = 1;
delay(SPEED);
MOTOA = 1;
MOTOB = 0;
MOTOC = 0;
MOTOD = 1;
delay(SPEED);
}
}
总结不好多多担待,文章只单纯个人总结,如不好勿喷,技术有限,有错漏麻烦指正提出。本人QQ:373965070