本次实验使用的是28BYJ-48,详细介绍步进电机介绍
1.在CudeMX设置IO口作ABCD相输入。
2.其他步骤跟点亮LED灯步骤相同:点亮LED
3.连接好单片机引脚跟驱动板引脚。
4.写入驱动程序。
#define MOTOR_A_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET)
#define MOTOR_A_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET)
#define MOTOR_B_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET)
#define MOTOR_B_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET)
#define MOTOR_C_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET)
#define MOTOR_C_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET)
#define MOTOR_D_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define MOTOR_D_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
void MOTOR_CONTROL(uint8_t direction)
{
static uint8_t step = 0;
if(1 == direction){//反转
if(0 == step) step = 8;
step--;
}
if(0 == step){//步序1
MOTOR_A_H;
MOTOR_B_L;
MOTOR_C_L;
MOTOR_D_L;
}else if(1 == step){//步序2
MOTOR_A_H;
MOTOR_B_H;
MOTOR_C_L;
MOTOR_D_L;
}else if(2 == step){//步序3
MOTOR_A_L;
MOTOR_B_H;
MOTOR_C_L;
MOTOR_D_L;
}else if(3 == step){//步序4
MOTOR_A_L;
MOTOR_B_H;
MOTOR_C_H;
MOTOR_D_L;
}else if(4 == step){//步序5
MOTOR_A_L;
MOTOR_B_L;
MOTOR_C_H;
MOTOR_D_L;
}else if(5 == step){//步序6
MOTOR_A_L;
MOTOR_B_L;
MOTOR_C_H;
MOTOR_D_H;
}else if(6 == step){//步序7
MOTOR_A_L;
MOTOR_B_L;
MOTOR_C_L;
MOTOR_D_H;
}else if(7 == step){//步序8
MOTOR_A_H;
MOTOR_B_L;
MOTOR_C_L;
MOTOR_D_H;
}
if(0 == direction){//正转
step++; if(8 == step) step = 0;
}
}
void Step_Motor_Start(uint16_t angle, uint8_t direction)//驱动函数angle:角度,direction正反
{
int i = 0;
int pulse = (int)((double)(angle/5.625)*64);
for(i=0; i<pulse; i++){
MOTOR_CONTROL(direction);
HAL_Delay(1);//延时2ms,修改延时可改变电机转动速度。即修改了脉冲频率
}
}
void Step_Motor_Stop(void)
{
//四相输出都为低电平是,电机停止工作
MOTOR_A_L;
MOTOR_B_L;
MOTOR_C_L;
MOTOR_D_L;
}
5.观察到电机按设定的角度旋转。
电机