STM32学习之28byj-48步进电机

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

  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值