步进电机连线驱动

发布时间:2026/7/4 3:36:50

步进电机连线驱动 铭牌参数57HD5401...开头的 “57” 代表电机的法兰盘尺寸是。1.8°步进角。意思是 STM32 每给一个脉冲电机就精准转动。电机转一整圈需要个脉冲。3.0A额定电流。这非常重要意味着你选用的驱动器输出电流必须能达到或超过 3.0A否则电机没力气夹持器剪不动东西驱动器DM542或DM556数字步进电机驱动器第一步连线AUBOS → TM32 → 驱动器 → 步进电机1. AUBO 机械臂 ── STM32 控制板输入信号AUBO Tool DO0 (夹持)── 光耦隔离(24V转3.3V) ──STM32 GPIO (如 PB0)AUBO Tool DO1 (剪切)── 光耦隔离(24V转3.3V) ──STM32 GPIO (如 PB1)AUBO Tool DO2 (复位)── 光耦隔离(24V转3.3V) ──STM32 GPIO (如 PB2)AUBO Tool DO3 (停止)── 光耦隔离(24V转3.3V) ──STM32 GPIO (如 PB3)AUBO Tool GND── 连到光耦模块的 24V 地2. STM32 控制板 ── 步进驱动器共阴极接法最常用的共阴极接法驱动器的信号负极全部拧在一起接 STM32 的 GNDSTM32 侧连接引脚驱动器控制端口功能说明STM32 的 定时器 PWM 输出引脚PUL (or CLK)脉冲信号给一个脉冲电机转一步STM32GNDPUL-和DIR-拧在一起接控制板地STM32 GPIO 引脚DIR (or CW)方向信号高电平顺时针低电平逆时针3. 驱动器 ── 57步进电机 电源电机出来的四根线红、黄、绿、蓝和供电电源接到驱动器标有 Power/Motor 的端口上:驱动器端口连接目标说明V外接直流电源正极建议 24V - 36V别接 5V步进电机在高电压下才有力气GND外接直流电源负极电源地A电机红线通常电机 A 相正若反转对调 A A- 即可A-电机绿线通常电机 A 相负B电机黄线通常电机 B 相正B-电机蓝线通常电机 B 相负确定电机的 A/B 相用万用表测电阻有阻值的两根线是一组比如红绿通它们就是 A/A-黄蓝通它们就是 B/B-第二步STM32 控制逻辑对于步进电机来说它无法直接反馈电流或扭矩// 底层步进电机驱动函数 // 设定方向0为张开(OPEN)1为闭合(CLOSE) void motor_set_dir(uint8_t dir) { if (dir 0) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // DIR低电平 } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // DIR高电平 } } // 让步进电机走 1 步 (通过翻转引脚产生一个脉冲) // speed_delay 越小脉冲越快电机转速越高 void motor_step(uint32_t speed_delay) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); delay_us(speed_delay); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); delay_us(speed_delay); } // 四个核心动作 // 1. 夹持动作 (使用中等速度靠力传感器或最大步数限制停止) void clamp_action() { state CLAMPING; motor_set_dir(1); // 设为闭合方向 uint32_t steps_taken 0; const uint32_t MAX_CLAMP_STEPS 5000; // 安全上限步数防止死卡 while (state CLAMPING) { // 走一步 motor_step(200); // 延迟200us速度适中 steps_taken; // 读取传感器 (完全保留你博客的逻辑) float force read_force_sensor(); if (force FORCE_LIMIT) { // 抓紧了停止 state IDLE; break; } if (steps_taken MAX_CLAMP_STEPS) { // 没抓到东西但机械结构到头了停止 state IDLE; break; } if (READ_STOP_CMD()) { // 收到急停 stop_action(); break; } } } // 2. 剪切动作 (高速度、大力量强行走到设定的剪切脉冲终点) void cut_action() { state CUTTING; motor_set_dir(1); // 设为闭合方向 uint32_t steps_taken 0; // 根据剪刀结构算好剪断需要步进电机走多少步例如转3圈 200步/圈 * 3 600步 const uint32_t CUT_END_STEPS 3000; while (state CUTTING) { motor_step(100); // 延迟100us高速强力剪切 steps_taken; if (steps_taken CUT_END_STEPS) { // 剪切完成 state IDLE; // 剪完自动复位 reset_action(); break; } if (READ_STOP_CMD()) { stop_action(); break; } } } // 3. 复位动作 (反转直到撞到物理限位开关 HOME_SWITCH 停止) void reset_action() { state RESETTING; motor_set_dir(0); // 设为打开方向 // 只要没压到复位限位开关就一直往回转 while (!READ_CLAMP_HOME_SWITCH()) { motor_step(200); // 中速复位 if (READ_STOP_CMD()) { stop_action(); return; } } // 撞到开关停止电机复位完成 state IDLE; } // 4. 停止动作 (立刻切断所有控制) void stop_action() { state STOPPED; // 步进电机停止发送脉冲即为停止 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 如果驱动器接了 ENA (使能) 引脚可以给使能信号让电机完全断电完全松开 // HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); error_flag EMERGENCY_STOP; }第三步调试上电顺序为了防止机械剪刀在上电瞬间乱晃打伤人或损坏结构请务必遵循以下调试顺序首次测试脱开机械连杆先把电机从红色的 3D 打印剪刀座上拆下来只让电机光轴转防止代码写错导致连杆疯狂对撞死卡。测试方向运行clamp_action()观察电机是顺时针转还是逆时针转。如果方向反了不需要改代码直接把电机接线里的A和A-对调一下即可。标定步数与速度逐步调整motor_step(speed_delay)里的延迟时间。如果电机发出呜呜声但不转说明速度给太快了步进电机启动需要高载荷慢速把延迟加大如改为 300 或 500。手动数一下夹爪从完全张开到闭合电机一共转了多少圈乘以每圈的脉冲数填入代码里的MAX_CLAMP_STEPS和CUT_END_STEPS。装回连杆联调确信限位开关Home Switch和力传感器能正常触发停止后再把电机装回红色机构上进行整体测试。

相关新闻