这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】驱动一个步进电机--from棚

共4条 1/1 1 跳转至

【原创】驱动一个步进电机--from棚

工程师
2025-07-18 20:37:48     打赏

.所用的原件

图片1.png

图片2.png

图片4.png

.步进电机原理的简单了解


图片5.png

此电机是一个四线两相的步进电机

想要简单驱动起来原理不用太过深究,至于要知道检测到一个脉冲步进电机走一步就可以了。

三.硬件连接,与hal库配置

图片6.png

VCC 24V电源

GND(与板子和烧录器的GND最好都共地)

AB相位线接编码电机(可以通过两根线短接,转动电机轴观察是否有阻力,如果有阻力就是同相的线。分别接相位的正负。顺去不用管保证同相接的是同一个字母的就行)。

剩下的6根线,因为我用的共阴极接法,所以把他们的负全接在一起,之后接地。用正来控制。PUL接GPIO引脚接收脉冲,DIR+的高低电平控制方向,ENA+的高低电平控制使能。

分别接在其对应的GPIO上。

图片7.png

PB0->PUL+

PB1->DIR+

PE7->ENA+

以上是其配置。

 

四.程序设计

ENA+为低电平电机启动(此时可以发现电机轴用手转不动)说明使能成功。

此时至于要给PUL+脉冲即可

 

#include "stm32fxxx_hal.h"

 

// 定义步进电机控制引脚

#define STEP_PIN    GPIO_PIN_0      // 脉冲输入引脚(PB0)

#define DIR_PIN     GPIO_PIN_1      // 方向控制引脚(PB1)

#define STEP_PORT   GPIOB           // 假设所有引脚都在GPIOB端口

#define TB6600_X_EN_PORT        GPIOE       // X轴使能信号端口

#define TB6600_X_EN_PIN         GPIO_PIN_7  // X轴使能信号引脚

 

// 延时函数(毫秒)

void delay_ms(uint32_t ms) {

    HAL_Delay(ms);  // 使用HAL库的延时函数

}

 

// 发送指定数量的脉冲

void send_pulses(uint32_t count, uint32_t delay_us) {

    for (uint32_t i = 0; i < count; i++) {

        HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_SET);

        HAL_Delay(1);  // 脉冲高电平时间

        HAL_GPIO_WritePin(STEP_PORT, STEP_PIN, GPIO_PIN_RESET);

        

        // 延时控制步进速度(微秒级)

        for (uint32_t j = 0; j < delay_us / 10; j++) {

            __asm("nop");  // 空操作,用于延时

        }

    }

}

 

int main(void) {

 

    // 初始化HAL

    HAL_Init();

    

    // 配置系统时钟

    SystemClock_Config();

    

    // 初始化GPIO引脚

    __HAL_RCC_GPIOB_CLK_ENABLE();  // 使能GPIOB时钟

 

 while (1) {

        // 设置为顺时针方向

        HAL_GPIO_WritePin(STEP_PORT, DIR_PIN, GPIO_PIN_RESET);

        

        // 发送1000个脉冲,顺时针旋转

        send_pulses(1000, 1000);  // 1000微秒延时,控制速度

        

        // 短暂停顿

        delay_ms(500);

        

        // 设置为逆时针方向

        HAL_GPIO_WritePin(STEP_PORT, DIR_PIN, GPIO_PIN_SET);

        

        // 发送1000个脉冲,逆时针旋转

        send_pulses(1000, 1000);  // 1000微秒延时,控制速度

        

        // 短暂停顿

        delay_ms(500);

}

}

 

以上就是超级间的的驱动步进电机的技术贴,这样就能够实现步进电机的简单驱动。当然还有更高的方法被等待使用。




专家
2025-07-18 20:57:20     打赏
2楼

感谢分享


专家
2025-07-18 20:59:57     打赏
3楼

感谢分享


专家
2025-07-18 21:03:22     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]