- 项目要求
- 所需要的元器件
- A4988步进驱动 与2相4线 42步进电机接线
- 所需要的元器件
- (第一种方法)不用定时器驱动42步进电机
- (第二种方法)用定时器驱动42步进电机
- 通过外部中断对电机进行停止
- 上位机控制电机开启关闭
- 上位机发送命令效果
- 示波器波形展示
项目要求
本项目通过stm32f1为核心的最小系统板控制42步进电机,可以通过按键的开关对电机进行实时的控制,也可以通过上位机发送的串口命令对电机进行控制,本项目用到了定时器、外部中断、串口收发等。
所需要的元器件
1、STM32F103C8T6最小系统核心板

2、A4988步进驱动

3、2相4线 42步进电机

4、2个微动开关(分别负责控制电机开始和停止)

5、12V的电源

6、检测电机输出波形的示波器

A4988步进驱动 与2相4线 42步进电机接线
A4988步进驱动 2相4线 42步进电机
A4988步进驱动接线定义:
A4988
开发板GND --GND DIR-- PB9方向
开发板3.3V --VDD STEP-- PB5脉冲信号
A --1B SLEEP-- VCC3.3V
C --1A RESET-- VCC3.3V
D --2A MS3-- PB12
B --2B MS2-- PB11
外接电源GND --GND MS1-- PB10
外接电源VCC --VMOT ENABLE-- PB13控制抱死
(第一种方法)不用定时器驱动42步进电机
下面展示一些 内联代码片。
// A code block
var foo = 'bar';
// An highlighted block
//参数
dir:FALSE正转TRUE反转
//period 周期
//step 脉冲
void Step_Control(u8 dir,u16 period,u32 steps)
{
u32 i;
for(i=0; i <= steps;i++)
{
DIR = dir;
STEP = 1;
delay_us(1);
STEP = 0;
delay_us(period);
}
}
第一种方法,我们利用for循环发出脉冲信号,通过控制period和steps参数控制,电机运转的时长,这种方式简单,但是会出现问题,就是当我们控制电机运转时,无法通过串口发送”CLOSE“停止命令。因为程序在执行for循环无法打断。
(第二种方法)用定时器驱动42步进电机
下面展示一些 内联代码片。
// A code block
var foo = 'bar';
// An highlighted block
#include "timer.h"
#include "usart.h"
//V1.1 20120904
//1,增加TIM3_PWM_Init函数。
//2,增加LED0_PWM_VAL宏定义,控制TIM3_CH2脉宽
//////////////////////////////////////////////////////////////////////////////////
//通用定时器3中断初始化

项目使用STM32F1核心板通过两种方式控制42步进电机:一是利用for循环直接驱动,二是采用定时器中断。第一种方法简单但无法在运行时中断,第二种方法支持中断,允许在电机运行时接收上位机的停止命令。此外,项目还涉及外部中断和串口通信,用于控制电机启停和接收上位机命令。

6万+

被折叠的 条评论
为什么被折叠?



