不建议直接使用单片机IO来驱动步进电机,有很多模块可以选择,如:A4988、L298N、DRV8825、ULN2003、TB6560等。
以A4988为例,只要两个GPIO就可以控制步进电机了,DIR:控制正反转,=1:正转,=0:反转;STEP:接PWM,每个脉冲转对应一个角度;
控制代码如下:
//参数
// dir:FALSE 正转TRUE反转
// period 周期
// step 脉冲
void Step_Control(u8 diru16 periodu32 steps)
{
u32 i;
for(i=0; i <= steps;i++)
{
DIR = dir;
STEP = 1;
delay_us(1);
STEP = 0;
delay_us(period); //period
}
int main(void)
{
int i=0;
delay_init();
LED_Init();
MOTOR_Init();
Step_Micr(1);//1/2/4/8/16
while(1)
{
for(i=0;i<10;i++)
{
Step_Control(TRUE1600100);//正转
delay_ms(1000);
Step_Control(FALSE1600100);//反转
delay_ms(1000);
}
Step_Enable();//抱死
}
}
void MOTOR_Init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRH&=0xff000000;
GPIOB->CRH|=0x00333333;
}