28BYJ48步进电机的编号
28——步进电机的有效最大外径是28毫米
B——表示步进电机
Y——表示永磁式
J——表示减速型(减速比:1:64)
48——表示四相八拍
工作原理
五线四相步进电机,不同相位得电会让步进电机的转子转动一个角度,按一定规律给不同的相位通电,就可以让步进电机连续转动,下表就是通电的顺序。
四相八拍


1、步进电机的减速比为1/64,即转子转动64圈,外面的转轴才会转动1圈(因为是减速型)
下图中最中心的白色小齿轮是步进电机的转子
2、步进电机的步距角为5.624/64
步进电机外面的转轴转过的角度称步距角,即定子绕组每次改变一次通电状态,
电机外面的转轴转过的角度,也称步进电机的最小旋转角度
3、所以360/(5.624/64)≈ 4096
步进电机外面的转轴转过一圈所需要改变定子绕组的通电状态次数
4、步进角,步进电机的定子绕组每次改变一次通电状态,转子转过的角度称步进角。
可以认为是电机内部的转子的最小旋转角度

注意事项
1、连线一定注意不要出错,按照顺序相连接。
2、每转一拍给一定的延时,不然转动还没结束,下一个脉冲就接着来,导致电机堵转或者异常震动。
3、通过改变延时的时间控制电机的转速,不断调试到合理范围(不宜过快或过慢)。
4、通过设置相序得点的顺序即可调节电机转动的方向
代码
motor.c
#include "motor.h"
#include "delay.h"
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=MOTOR_A | MOTOR_B | MOTOR_C | MOTOR_D;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(MOTOR_PROT, &GPIO_InitStructure);
GPIO_ResetBits(MOTOR_PROT,MOTOR_A | MOTOR_B | MOTOR_C | MOTOR_D);
}
void Motor_Rhythm_4_8(u8 step,u8 dly)
{
switch(step)
{
case 0 :
;;
break;
case 1: MOTOR_A_LOW;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_HIGH; break;
case 2: MOTOR_A_LOW;MOTOR_B_LOW;MOTOR_C_HIGH;MOTOR_D_HIGH; break;
case 3: MOTOR_A_HIGH;MOTOR_A_LOW;MOTOR_A_HIGH;MOTOR_D_HIGH; break;
case 4: MOTOR_A_HIGH;MOTOR_A_LOW;MOTOR_A_LOW;MOTOR_D_HIGH; break;
case 5: MOTOR_A_HIGH;MOTOR_A_HIGH;MOTOR_A_LOW;MOTOR_D_HIGH; break;
case 6: MOTOR_A_HIGH;MOTOR_A_HIGH;MOTOR_A_LOW;MOTOR_A_LOW; break;
case 7: MOTOR_A_HIGH;MOTOR_A_HIGH;MOTOR_A_HIGH;MOTOR_A_LOW; break;
case 8: MOTOR_A_LOW;MOTOR_A_HIGH;MOTOR_A_HIGH;MOTOR_A_LOW; break;
}
delay_ms(dly);
}
void Motor_Direction(void) //反转
{
for(u8 i=1;i<9;i++)
{
Motor_Rhythm_4_8(i,1);
}
}
void Motor_Direction1(void) //正转
{
for(u8 i=8;i>0;i--)
{
Motor_Rhythm_4_8(i,1);
}
}
motor.h
#ifndef _MOTOR_H_
#define _MOTOR_H_
#include <stm32f10x_conf.h>
#define MOTOR_A GPIO_Pin_3
#define MOTOR_B GPIO_Pin_4
#define MOTOR_C GPIO_Pin_5
#define MOTOR_D GPIO_Pin_6
#define MOTOR_PROT GPIOB
#define MOTOR_A_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_A);
#define MOTOR_A_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_A);
#define MOTOR_B_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_B);
#define MOTOR_B_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_B);
#define MOTOR_C_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_C);
#define MOTOR_C_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_C);
#define MOTOR_D_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_D);
#define MOTOR_D_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_D);
void Motor_Init(void);
void Motor_Rhythm_4_8(u8 step,u8 dly);
void Motor_Direction(void);
void Motor_Direction1(void);
#endif