STM32F103控制28BYJ-48步进电机正转或者反转一定的角度

介绍

参数含义

28——步进电机的有效最大外径是28毫米
B——表示是步进电机
Y——表示是永磁式
J——表示是减速型
48——表示四相八拍

原理图

STM32F103控制28BYJ-48步进电机正转或者反转一定的角度_第1张图片

步进电机控制电路

STM32F103控制28BYJ-48步进电机正转或者反转一定的角度_第2张图片

工作原理

通过对不同的相依次导通一定时间,使得定子转到指定角度。
最佳工作模式为八拍模式(八拍转过一个定子角度)
需要注意减速比
节拍刷新大于1.8ms即可

单片机控制

首先查询得步进电机节拍对应的IO控制代码
然后每隔一定的时间进行代码的刷新(这个刷新时间主要依据步进电机的启动频率)

我看到好多此类的控制代码所需要的积分都是很多的,所以我就自己写了一份代码,包含控制正反转,还有旋转的角度,可以修改参数就可以达到自己想要的方案。
附上代码

#include "delay.h"
#include "sys.h"
#include "stdio.h"
//ALIENTEK miniSTM32开发板实验1
//跑马灯实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//IN4: PB9  d
//IN3: PB8  c
//IN2: PB7  b
//IN1: PB6  a
//四相八拍
unsigned short phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   反转
unsigned short phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D   正转

//引脚初始化
void Moto_Init(void)
{
	 GPIO_InitTypeDef GPIO_InitStructure;
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;//引脚按着INT1顺序接就行了
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	 GPIO_Init(GPIOB,&GPIO_InitStructure);
	 GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
}
void MotoRcw(void)  //反转
{  
    int  i;  
  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOB,phasecw[i]);  
        delay_ms(3);  
    }  
}

void MotoRccw(void)  //正转
{  
    int i;  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOB,phaseccw[i]);  
        delay_ms(3);  
    }  
}

void MotorStop(void) //停止
{  
    GPIO_Write(GPIOB,0x0000);  
}

//控制电机正转还是反转某个角度
//direction方向,1为正转,0为反转
//angle角度,可为0-360具有实际意义
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
	u16 j;
	if(direction == 1)
	{
		for(j=0;j<64*angle/45;j++) 
		{
			MotoRccw();//正转
		}
		 MotorStop();//停止
  }
	else
	{
		for(j=0;j<64*angle/45;j++) 
		{
			MotoRcw();//反转
		}
		 MotorStop();//停止
	}
}

 int main(void)
 {	
	Moto_Init();	   			//电机
	delay_init();	    	 //延时函数初始化	  
	Motor_Ctrl_Direction_Angle(1,180);//正转180度
	delay_ms(500);
	Motor_Ctrl_Direction_Angle(0,90);//反转90度
	while(1)
	{
	}
 }

如果需要完整的工程的话可以关注微信公众号一手创客回复 05
或者转到下载链接:https://download.csdn.net/download/qq_40442656/12123657

本文原理解释参考原文链接:https://blog.csdn.net/weixin_41413511/article/details/98959254

你可能感兴趣的:(STM32)