本文记录 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。
实际应用应加入加减速曲线,避免启动和换向瞬间丢步。