3、电机原理与选型:直流电机、步进电机、伺服电机、电机选型计算
做运动控制这么多年,我接触最多的就是这三类电机。直流电机、步进电机、伺服电机,各有各的脾气。选对了,项目顺风顺水;选错了,调试能让你怀疑人生。
今天咱们就把这三类电机的原理掰开揉碎,再聊聊选型计算的那些坑。
3.1 直流电机:最朴素的动力源
直流电机是最早被广泛应用的电机。原理其实很简单——通电导体在磁场中受力。你给电刷通上直流电,换向器保证线圈在转过中性面时电流方向自动翻转,转子就一直转下去了。
核心特性:
- 调速简单:改变电枢电压就能调速,线性度很好。
- 启动转矩大:启动瞬间电流大,转矩也大。
- 控制精度一般:开环控制下,负载变化会引起转速波动。
3.2 步进电机:位置控制的廉价方案
步进电机本质上是一种将电脉冲信号转换成角位移的执行机构。你给它一个脉冲,它就转一个固定的角度——这个角度叫步距角。常见的步距角有1.8°、0.9°。
为什么步进电机能精确定位?
因为它内部有永磁转子,定子绕组按一定顺序通电,产生旋转磁场,转子跟着磁场一步步走。没有反馈,也能知道位置——这就是开环控制。
步进电机的三大痛点:
- 丢步:负载过大或加速太快,转子跟不上脉冲,位置就丢了。
- 共振:某些转速下电机会剧烈抖动,我遇到过3D打印机在200mm/s速度下打印表面出现波纹,就是共振引起的。
- 高速转矩小:转速越高,转矩下降越快。
细分驱动是什么?
说白了,就是把一个整步拆成更小的微步。比如1/16细分,1.8°的步距角就变成了0.1125°。运动更平滑,共振也减轻了。但要注意——细分不能提高定位精度,只能改善运行平稳性。这个坑我踩过,以为细分到1/32精度就提高了,结果位置重复精度还是原来的步距角。
3.3 伺服电机:闭环才是王道
伺服电机和步进电机最大的区别——它有反馈。编码器实时检测转子位置,驱动器根据反馈调整电流,形成闭环控制。
伺服系统的三环控制:
- 位置环:最外层,比较目标位置和实际位置,输出速度指令。
- 速度环:中间层,比较速度指令和实际速度,输出转矩指令。
- 电流环:最内层,控制电机电流,直接产生转矩。
三环响应速度从内到外依次变慢。电流环最快,位置环最慢。调试时,我习惯先调电流环,再调速度环,最后调位置环。顺序乱了,系统容易震荡。
3.4 三类电机对比
| 特性 | 直流电机 | 步进电机 | 伺服电机 |
|---|---|---|---|
| 控制方式 | 开环 | 开环 | 闭环 |
| 定位精度 | 低 | 中(受丢步影响) | 高 |
| 低速性能 | 好 | 好(但有共振区) | 优秀 |
| 高速性能 | 好 | 差(转矩下降快) | 优秀 |
| 成本 | 低 | 中 | 高 |
| 典型应用 | 风机、泵、玩具 | 3D打印机、雕刻机 | 机器人、CNC、贴片机 |
3.5 电机选型计算
选型不是拍脑袋。我总结了一套流程,每次做项目都按这个来。
第一步:确定负载转矩
负载转矩分两种:
- 摩擦转矩:导轨、轴承、皮带等摩擦产生的阻力。
- 惯性转矩:加速时克服惯性的转矩。
总转矩 TL = Tf + J × α
其中 J 是负载惯量,α 是角加速度。
第二步:计算所需电机转矩
电机额定转矩 TM 必须大于负载转矩 TL,还要留安全余量。我个人习惯留1.5~2倍。
第三步:惯量匹配
这是很多人忽略的。负载惯量 JL 和电机转子惯量 JM 的比值,一般建议在1~5之间。比值太大,系统响应慢,容易震荡。
第四步:校验转速和功率
电机最高转速要覆盖应用需求,同时留10%~20%余量。功率 P = T × ω,ω是角速度。
3.6 电机选型知识体系
下面这张图是我自己整理的选型决策流程,每次做项目都对照着走一遍。
3.7 选型实战案例
说个实际项目。去年做一台小型桌面机器人,Z轴需要提升2kg的负载,行程200mm,要求定位精度0.1mm,运动速度200mm/s。
我的计算过程:
- 负载转矩:用丝杠传动,导程5mm,摩擦系数0.1。摩擦转矩 Tf = 2×9.8×0.1×0.005 / (2π) ≈ 0.0016 Nm。很小。
- 加速转矩:加速时间0.1s,加速度2m/s²。等效惯量 Jeq = 2 × (0.005/2π)² ≈ 1.27×10⁻⁶ kg·m²。加速转矩 Ta = Jeq × α ≈ 0.0006 Nm。
- 总转矩:约0.0022 Nm,留2倍余量,需要0.0044 Nm。
- 选型结果:步进电机42系列,保持转矩0.3 Nm,绰绰有余。配1/8细分,步距角0.225°,理论精度0.003mm,满足0.1mm要求。
最终方案: 42步进电机 + 丝杠 + 开环控制。成本低,精度够,项目一次通过验收。
如果当时选了伺服,成本至少翻3倍,性能过剩。选型不是选最贵的,是选最合适的。
3.8 代码示例:步进电机梯形加减速
步进电机最怕急停急启。我习惯用梯形加减速曲线,让电机平滑启停。下面是一个简单的实现。
// 步进电机梯形加减速
// 参数:目标位置 steps,最大速度 max_speed,加速度 accel
void trapezoidal_move(int32_t target_steps, float max_speed, float accel) {
// 计算加速段和减速段需要的步数
float accel_steps = (max_speed * max_speed) / (2 * accel);
float decel_steps = accel_steps;
// 如果总步数不够加速到最大速度,则用三角形曲线
if (accel_steps + decel_steps > target_steps) {
// 三角形:加速到一半就减速
float peak_speed = sqrt(accel * target_steps);
accel_steps = target_steps / 2;
decel_steps = target_steps - accel_steps;
max_speed = peak_speed;
}
// 执行运动
float current_speed = 0;
int32_t current_pos = 0;
while (current_pos < target_steps) {
// 加速阶段
if (current_pos < accel_steps) {
current_speed += accel * 0.001; // 假设每1ms调整一次
if (current_speed > max_speed) current_speed = max_speed;
}
// 匀速阶段
else if (current_pos < target_steps - decel_steps) {
current_speed = max_speed;
}
// 减速阶段
else {
current_speed -= accel * 0.001;
if (current_speed < 0) current_speed = 0;
}
// 根据当前速度计算脉冲间隔
float pulse_interval = 1000000.0 / (current_speed * 200); // 1.8°步进电机
delay_us(pulse_interval);
// 输出一个脉冲
STEP_PIN = 1;
delay_us(1);
STEP_PIN = 0;
current_pos++;
}
}
好了,电机原理和选型就聊到这儿。记住一句话——选型不是算完就完,一定要留余量,一定要做实测。纸上得来终觉浅,绝知此事要躬行。