86步进电机和DM860H驱动器的使用方法和记录

本文记录 86 系列步进电机、DM860H 驱动器、脉冲频率、电机轴转速、输出轴转速、减速比之间的关系,并给出一份独立示例代码。

1. 硬件组成

示例硬件:

text 复制代码
电机:86BYG9760B
驱动器:DM860H
减速机构:20:1
控制方式:PUL / DIR / ENA

86BYG9760B 是 86 机座混合式步进电机,通常也可理解为 NEMA34 尺寸级别。

DM860H 是步进驱动器,不是电机本体。它负责接收控制器输出的脉冲信号,并按设定电流、细分等参数驱动步进电机转动。

电机最大可用转速不只由 DM860H 决定,还取决于:

  • 电机本体参数。
  • 驱动器供电电压。
  • 驱动器电流设置。
  • 机械负载大小。
  • 减速器惯量和摩擦。
  • 是否有加减速曲线。

2. DM860H 的驱动方式

DM860H 常见输入信号:

text 复制代码
PUL:脉冲输入
DIR:方向输入
ENA:使能输入

控制逻辑:

  • PUL 每收到一个有效脉冲,电机走一个细分步。
  • DIR 决定电机正转或反转。
  • ENA 控制驱动器使能或释放,具体有效电平以接线和驱动器设置为准。

控制器通常输出固定占空比的方波给 PUL,通过改变方波频率控制转速。

例如:

text 复制代码
PUL = 4000 Hz
表示每秒给驱动器 4000 个脉冲。

3. 细分和每转脉冲数

步进电机常见步距角是 1.8 度:

text 复制代码
一圈 = 360 度
整步数 = 360 / 1.8 = 200 步/圈

驱动器开启细分后,每圈需要的脉冲数会增加。

常见示例:

text 复制代码
400 脉冲/圈:2 细分
800 脉冲/圈:4 细分
1600 脉冲/圈:8 细分
3200 脉冲/圈:16 细分

本文示例采用:

text 复制代码
每转脉冲数 = 800 pulse/rev

含义:

text 复制代码
电机轴转 1 圈,需要 800 个 PUL 脉冲。

4. 电机轴和输出轴的区别

电机轴:

text 复制代码
电机本体直接伸出的轴。
86BYG9760B 本体转速说的就是电机轴转速。

输出轴:

text 复制代码
经过减速器、齿轮箱、蜗轮蜗杆之后的最终机械输出轴。
负载通常接在输出轴上。

如果减速比是 20:1

text 复制代码
电机轴转 20 圈,输出轴转 1 圈。

换算公式:

text 复制代码
输出轴转速 = 电机轴转速 / 减速比
电机轴转速 = 输出轴转速 * 减速比

例如:

text 复制代码
电机轴 300 rpm,减速比 20:1
输出轴 = 300 / 20 = 15 rpm
text 复制代码
输出轴需要 10 rpm,减速比 20:1
电机轴 = 10 * 20 = 200 rpm

5. 转速和频率计算

5.1 已知电机轴转速,计算脉冲频率

公式:

text 复制代码
脉冲频率 Hz = 电机轴转速 rpm * 每转脉冲数 / 60

示例,800 脉冲/圈,电机轴 300 rpm:

text 复制代码
频率 = 300 * 800 / 60
     = 4000 Hz

示例,800 脉冲/圈,电机轴 600 rpm:

text 复制代码
频率 = 600 * 800 / 60
     = 8000 Hz

5.2 已知输出轴转速,计算脉冲频率

先把输出轴转速换算成电机轴转速:

text 复制代码
电机轴转速 rpm = 输出轴转速 rpm * 减速比

再计算频率:

text 复制代码
脉冲频率 Hz = 输出轴转速 rpm * 减速比 * 每转脉冲数 / 60

示例,输出轴 15 rpm,减速比 20:1,800 脉冲/圈:

text 复制代码
电机轴转速 = 15 * 20 = 300 rpm
脉冲频率 = 15 * 20 * 800 / 60 = 4000 Hz

5.3 已知脉冲频率,计算电机轴转速

公式:

text 复制代码
电机轴转速 rpm = 脉冲频率 Hz * 60 / 每转脉冲数

示例,4000 Hz,800 脉冲/圈:

text 复制代码
电机轴转速 = 4000 * 60 / 800
           = 300 rpm

5.4 已知脉冲频率,计算输出轴转速

公式:

text 复制代码
输出轴转速 rpm = 脉冲频率 Hz * 60 / 每转脉冲数 / 减速比

示例,4000 Hz,800 脉冲/圈,20:1 减速:

text 复制代码
输出轴转速 = 4000 * 60 / 800 / 20
           = 15 rpm

6. 推荐速度范围

86BYG9760B 这类 86 大步进电机通常不建议简单追求高 rpm。步进电机转速越高,输出扭矩通常越低。

经验建议:

text 复制代码
100-300 rpm:比较稳,适合带负载优先测试。
300-600 rpm:需要看负载、驱动电压、电流和加减速曲线。
600 rpm 以上:扭矩下降明显,带负载容易丢步。

如果使用 20:1 减速器:

text 复制代码
电机轴 300 rpm -> 输出轴 15 rpm
电机轴 200 rpm -> 输出轴 10 rpm
电机轴 100 rpm -> 输出轴 5 rpm

稳定优先时,可先按:

text 复制代码
电机轴最高转速:200-300 rpm

如果需要提高速度,可以逐步测试:

text 复制代码
300 rpm -> 400 rpm -> 500 rpm -> 600 rpm

每次都要带真实负载测试启动、停止、换向和长时间运行。

7. DM860H 的限制

DM860H 常见最大输入脉冲频率约为:

text 复制代码
200 kHz

注意这只是驱动器能接收的脉冲频率上限,不等于电机能稳定达到的机械转速。

示例,800 脉冲/圈:

text 复制代码
300 rpm -> 4000 Hz = 4 kHz
600 rpm -> 8000 Hz = 8 kHz

这远低于 DM860H 的 200 kHz 输入能力。

所以实际系统的主要限制通常不是驱动器最高脉冲频率,而是:

  • 步进电机高速扭矩下降。
  • 负载惯量较大。
  • 减速器摩擦和惯量。
  • 供电电压不足导致高速扭矩不足。
  • 驱动电流设置不合适。
  • 没有加减速曲线,启动或换向瞬间容易丢步。

8. 怎么给频率

控制器不是直接给电机一个 rpm,而是给 DM860H 脉冲频率。

控制流程:

text 复制代码
目标输出轴转速
  -> 乘以减速比得到电机轴转速
  -> 乘以每转脉冲数
  -> 除以 60 得到脉冲频率 Hz
  -> 设置定时器或脉冲发生器输出该频率

如果直接控制电机轴转速,则流程为:

text 复制代码
目标电机轴转速
  -> 乘以每转脉冲数
  -> 除以 60 得到脉冲频率 Hz
  -> 设置定时器或脉冲发生器输出该频率

示例,输出轴 15 rpm,20:1 减速,800 脉冲/圈:

text 复制代码
freq_hz = 15 * 20 * 800 / 60 = 4000 Hz
period_us = 1000000 / 4000 = 250 us

控制器输出 4 kHz 方波,DM860H 每秒收到 4000 个脉冲,电机轴按 300 rpm 转动,经过 20:1 减速后输出轴为 15 rpm。

9. 减速比怎么计算

减速比常写成:

text 复制代码
20:1

含义:

text 复制代码
输入轴转 20 圈,输出轴转 1 圈。

如果知道电机轴转速和输出轴转速:

text 复制代码
减速比 = 电机轴转速 / 输出轴转速

例如:

text 复制代码
电机轴 300 rpm,输出轴 15 rpm
减速比 = 300 / 15 = 20

如果知道电机轴走的脉冲数和输出轴转过的角度,也可以算:

text 复制代码
电机轴圈数 = 脉冲数 / 每转脉冲数
输出轴圈数 = 输出轴角度 / 360
减速比 = 电机轴圈数 / 输出轴圈数

例如:

text 复制代码
细分 800 脉冲/圈
发出 16000 个脉冲
电机轴圈数 = 16000 / 800 = 20 圈

如果输出轴刚好转 1 圈
减速比 = 20 / 1 = 20:1

10. 位置控制中的步数计算

如果电机经过减速器带动输出轴,输出轴每转一圈需要的脉冲数为:

text 复制代码
输出轴每圈脉冲数 = 电机每圈脉冲数 * 减速比

示例,800 脉冲/圈,20:1 减速:

text 复制代码
输出轴每圈脉冲数 = 800 * 20 = 16000 脉冲

输出轴转指定角度需要的脉冲数:

text 复制代码
脉冲数 = 输出轴角度 / 360 * 电机每圈脉冲数 * 减速比

例如输出轴转 180 度:

text 复制代码
脉冲数 = 180 / 360 * 800 * 20
      = 8000 脉冲

例如输出轴转 90 度:

text 复制代码
脉冲数 = 90 / 360 * 800 * 20
      = 4000 脉冲

11. 独立示例代码

下面是一份通用 C 示例,用于计算电机轴转速、输出轴转速、脉冲频率和脉冲周期。

c 复制代码
#include <stdint.h>

#define STEP_PULSES_PER_MOTOR_REV 800.0f
#define GEAR_RATIO 20.0f

#define MOTOR_SHAFT_MIN_RPM 15.0f
#define MOTOR_SHAFT_MAX_RPM 300.0f

static float clamp_float(float value, float min_value, float max_value)
{
    if (value < min_value) {
        return min_value;
    }

    if (value > max_value) {
        return max_value;
    }

    return value;
}

float pulse_freq_from_motor_rpm(float motor_rpm)
{
    motor_rpm = clamp_float(motor_rpm, -MOTOR_SHAFT_MAX_RPM, MOTOR_SHAFT_MAX_RPM);
    return motor_rpm * STEP_PULSES_PER_MOTOR_REV / 60.0f;
}

float pulse_freq_from_output_rpm(float output_rpm)
{
    float motor_rpm = output_rpm * GEAR_RATIO;
    return pulse_freq_from_motor_rpm(motor_rpm);
}

float motor_rpm_from_pulse_freq(float pulse_freq_hz)
{
    return pulse_freq_hz * 60.0f / STEP_PULSES_PER_MOTOR_REV;
}

float output_rpm_from_pulse_freq(float pulse_freq_hz)
{
    return motor_rpm_from_pulse_freq(pulse_freq_hz) / GEAR_RATIO;
}

uint32_t pulse_period_us_from_freq(float pulse_freq_hz)
{
    if (pulse_freq_hz <= 0.0f) {
        return 0U;
    }

    return (uint32_t)(1000000.0f / pulse_freq_hz);
}

int32_t output_angle_to_pulses(float output_angle_deg)
{
    return (int32_t)(output_angle_deg / 360.0f *
                     STEP_PULSES_PER_MOTOR_REV *
                     GEAR_RATIO);
}

示例计算:

c 复制代码
float freq_hz;
uint32_t period_us;
float output_rpm;

freq_hz = pulse_freq_from_output_rpm(15.0f);
period_us = pulse_period_us_from_freq(freq_hz);
output_rpm = output_rpm_from_pulse_freq(freq_hz);

对应结果:

text 复制代码
目标输出轴转速 = 15 rpm
电机轴转速 = 15 * 20 = 300 rpm
脉冲频率 = 300 * 800 / 60 = 4000 Hz
脉冲周期 = 1000000 / 4000 = 250 us

实际控制时,需要把 freq_hz 转换成定时器的周期寄存器值,或者交给专用脉冲发生模块输出。

12. 稳定性建议

推荐初始参数:

text 复制代码
电机型号:86BYG9760B
驱动器:DM860H
细分:800 脉冲/电机轴一圈
减速比:20:1
电机轴最高转速:200-300 rpm
输出轴最高转速:10-15 rpm
最高脉冲频率:约 2667-4000 Hz

关键换算:

text 复制代码
电机轴 rpm = 输出轴 rpm * 20
输出轴 rpm = 电机轴 rpm / 20
脉冲频率 Hz = 电机轴 rpm * 800 / 60
脉冲频率 Hz = 输出轴 rpm * 20 * 800 / 60

稳定性建议:

text 复制代码
先用 200-300 rpm 电机轴转速测试。
重载或丢步时降低最高转速。
提高速度时逐级增加,不要直接跳到 600 rpm。
实际应用应加入加减速曲线,避免启动和换向瞬间丢步。
相关推荐
Aaron15882 小时前
RFSOC+VU13P/VU9P+GPU多通道同步一体化解决方案
人工智能·嵌入式硬件·算法·matlab·fpga开发·硬件架构·基带工程
所见即所得111112 小时前
stm32烧录过程中串口问题(串口被占用无法使用)
stm32·单片机·嵌入式硬件
Freak嵌入式2 小时前
WIZnet-EVB-Pico2开始,用MicroPython玩转以太网开发
arm开发·人工智能·python·嵌入式硬件·机器人·嵌入式·micropython
Ligocious2 小时前
stm32---1.两种开发方式点亮LED
stm32·单片机
黑白园3 小时前
STM32F103C8TC使用ST-Link下载
stm32·单片机·嵌入式硬件
时空自由民.3 小时前
嵌入式MCU的中断系统工作流程及其原理
单片机·嵌入式硬件
LCG元3 小时前
STM32实战:基于STM32F103的智慧教室环境监控系统(CO₂+光照+人数统计)
前端·stm32·嵌入式硬件
振南的单片机世界3 小时前
推挽输出:上管推、下管拉,驱动强但不“合群”
arm开发·stm32·单片机·嵌入式硬件
森利威尔电子-4 小时前
森利威尔SL7140|2.5–24V 宽压 / 10mA–2A / PWM 调光 线性 LED 恒流驱动
单片机·嵌入式硬件·集成电路·芯片·电源芯片