CudeMX+Keil 学习笔记(二)控制步进电机

本次实验使用的是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.观察到电机按设定的角度旋转。

电机

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值