本人采用的旋转相序为四相八拍,以此为例如下
通过数据手册,可以算出每八拍是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
}