这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 静音步进电机控制实践-过程帖

共1条 1/1 1 跳转至

静音步进电机控制实践-过程帖

菜鸟
2026-06-20 19:16:45     打赏

本贴主要展示初始硬件验证,这算是本人的习惯吧,对于新到手的物料,习惯先进行硬件验证:即只是用最少的模块,搭建最简的测试平台,使用最少的外设,对相关设备进行验证。

image.png

这边采用12V开关电源作为电机电压,使用STM32U5开发板做主控,通过TMC2209对步进电机进行控制。

/* 简单的微秒级软件延时,用于产生脉冲 */
static void delay_us(uint32_t us) {
    uint32_t count = us * 8; // 这个值可能需要根据你的系统时钟调整
    while (count--) {
    __NOP();
    }
}

对于STEP脉冲延时,暂时不使用PWM生成,使用最简单的延时生成

/* 1. 使能电机驱动器 (EN 引脚输出低电平) */
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET);  // EN低电平有效
HAL_Delay(100); // 等待驱动器就绪
    
/* 2. 设置方向 (DIR 引脚) */
// 正转:设置DIR引脚为高电平
HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET);
// 如果要反转,将上面的 SET 改为 RESET 即可
    
/* 3. 发送脉冲 (STEP 引脚) */
//printf("Motor is running forward...\r\n");
for(StepPulseCount = 0; StepPulseCount < TargetStepCount; StepPulseCount++)
{
// 产生一个脉冲:高 -> 低
    HAL_GPIO_WritePin(STEP_GPIO_Port, STEP_Pin, GPIO_PIN_SET);
    delay_us(500); // 脉冲宽度,调整此值可改变速度,值越小越快
    HAL_GPIO_WritePin(STEP_GPIO_Port, STEP_Pin, GPIO_PIN_RESET);
    delay_us(500); // 脉冲间隔,调整此值可改变速度
}
    
/* 4. 停止并失能电机 */
//printf("Motor stopped.\r\n");
// 失能电机 (EN 引脚输出高电平)
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
    
/* 5. 停止一段时间再循环 */
HAL_Delay(5000); // 停止5秒

主要代码为让电机转一段时间,在停一段时间,对电机、核心板、电源、模块进行验证,确认硬件运行正常,线路接线没问题,防止后面代码已经写好,但硬件故障,以为是代码问题,增加故障排除时间。




关键词: 步进     Let's do活动          控制     STM32    

共1条 1/1 1 跳转至

回复

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