基于阿波罗stm32F767下uln2003驱动28byj48(四相步进电机)

本人采用的旋转相序为四相八拍,以此为例如下

通过数据手册,可以算出每八拍是5.625/8 = 0.703125度

如果需要旋转90度 则需要八拍的次数为:90/5.625*8 = 128

四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)



#include "stepm.h"

#include "delay.h"
#include "sys.h"


//28BYJ-48


void ULN2003_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
                             
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStructure.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;     
GPIO_InitStructure.Speed  = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init (GPIOC, &GPIO_InitStructure);
}


void ULN2003_Driver_90(void)
 {
    u8 m,n;      
for(m=0;m<=127;m++) //顺时针90
  { 
PC6(1);PC7(0);PC8(0);PC9(0); delay_ms(2);//A
PC6(1);PC7(1);PC8(0);PC9(0); delay_ms(2);//AB
PC6(0);PC7(1);PC8(0);PC9(0); delay_ms(2);//B
PC6(0);PC7(1);PC8(1);PC9(0); delay_ms(2);//BC 
 PC6(0);PC7(0);PC8(1);PC9(0); delay_ms(2);//C
PC6(0);PC7(0);PC8(1);PC9(1); delay_ms(2);//CD
PC6(0);PC7(0);PC8(0);PC9(1); delay_ms(2);//D
PC6(1);PC7(0);PC8(0);PC9(1); delay_ms(2);//DA
  }
delay_ms(1000);
    for(n=0;n<=127;n++) //·逆时针90
 {
PC6(1);PC7(0);PC8(0);PC9(0); delay_ms(2);//A
PC6(1);PC7(0);PC8(0);PC9(1); delay_ms(2);//DA
PC6(0);PC7(0);PC8(0);PC9(1); delay_ms(2);//D
PC6(0);PC7(0);PC8(1);PC9(1); delay_ms(2);//CD  
 PC6(0);PC7(0);PC8(1);PC9(0); delay_ms(2);//C
PC6(0);PC7(1);PC8(1);PC9(0); delay_ms(2);//BC
PC6(0);PC7(1);PC8(0);PC9(0); delay_ms(2);//B
PC6(1);PC7(1);PC8(0);PC9(0); delay_ms(2);//AB
 }

PC6(0);PC7(0);PC8(0);PC9(0);//0

}

猜你喜欢

转载自blog.csdn.net/flying_man_/article/details/79256165