伺服电机与步进电机要点详解
核心区别回顾:
步进电机: 开环控制。控制器发出指令脉冲序列(脉冲个数决定位移,脉冲频率决定速度),假设电机会严格跟随这些脉冲移动。它不知道电机实际是否到达了目标位置或是否发生了丢步(失步)。
伺服电机: 闭环控制。控制器发出指令(目标位置/速度/扭矩),驱动器实时读取电机尾部的编码器反馈信号(实际位置/速度),将其与指令进行比较,通过复杂的控制算法(通常是PID或多环控制)计算出需要施加给电机的电流(扭矩),确保实际值精确跟踪目标值。
一、 硬件基础
控制器: 这是发出指令的“大脑”。
常见类型:
PLC (可编程逻辑控制器): 工业主流。通过专用运动控制模块(如脉冲输出模块、EtherCAT主站模块)或本体高速输出点(晶体管型)来控制。
单片机/微控制器 (MCU): 如 Arduino, STM32, ESP32。常用于小型项目、机器人、DIY。
运动控制卡/独立控制器: 插在PC或工控机PCIe/PXI插槽上,或独立运行。提供高性能、多轴协调控制。
PC + 软件 + 接口卡: 通过USB/Ethernet/PCIe接口卡连接驱动器。
专用CNC控制器/机器人控制器: 高度集成和优化的解决方案。
关键接口:
步进: 需要数字输出口(DO)提供
脉冲(PUL/Pulse/STEP)
信号和方向(DIR/Direction)
信号。通常还需要一个使能(EN/Enable)
信号(可选,但推荐)。电平要求(5V, 12V, 24V)和接线方式(共阳/共阴)必须与驱动器匹配!伺服: 接口更丰富:
脉冲/方向 (P/D): 类似步进,最常见的基础控制方式。
模拟量 (Analog): ±10V 模拟电压信号控制速度或扭矩。较少用于位置控制。
通讯总线 (Communication Bus): 现代主流! 如 Modbus RTU/TCP, CANopen, EtherCAT, PROFINET, EtherNet/IP, MECHATROLINK-III/IV 等。通过一根网线或总线电缆传输所有控制指令(位置/速度/扭矩模式切换、目标值、参数读写)和状态反馈(位置、速度、扭矩、报警、状态字)。这是实现高性能、多轴同步、复杂运动控制(电子凸轮、电子齿轮)的关键。
驱动器: 连接控制器和电机,是真正的功率放大和(伺服)智能控制单元。
步进驱动器:
接收来自控制器的
PUL
,DIR
,EN
信号。根据设定的
细分 (Microstepping)
数,将每个外部脉冲转换为驱动电机线圈的多个微步电流波形。细分决定了步距角分辨率(例如,整步1.8°,16细分后理论步距角为1.8°/16=0.1125°)。提供电流设置(通过拨码开关、电位器或通讯设置),匹配电机额定电流。
提供基础的保护功能(过流、过热)。
伺服驱动器:
功能强大得多:
接收来自控制器的指令(通过P/D、模拟量或通讯总线)。
实时读取电机编码器的高精度反馈信号(分辨率可达十几万、几十万甚至百万脉冲/转)。
核心: 运行闭环控制算法(通常是位置环、速度环、电流环三环结构)。位置环输出作为速度环的输入,速度环输出作为电流(扭矩)环的输入,电流环直接控制功率器件输出精确的电流到电机线圈。
提供丰富的参数设置(增益PID参数、控制模式、电子齿轮比、行程限位、报警阈值等)。
提供强大的保护功能(过流、过压、过热、超速、位置误差过大等)。
通过通讯总线或专用IO口反馈状态信息(位置、速度、报警代码、状态字)给控制器。
电机:
步进电机:
内部结构:定子上有多相绕组(常见2相、3相、5相),转子是永磁体或可变磁阻齿槽。没有内置传感器。
运动特性:离散步进。每个脉冲理论上转动一个固定的角度(步距角)。低速扭矩大,高速扭矩衰减快。静止时有保持扭矩。存在共振区(特定转速下振动噪声增大)。可能丢步(当负载扭矩瞬时超过电机输出扭矩时)。
伺服电机:
内部结构:通常是永磁同步电机(PMSM)。定子三相绕组,转子为永磁体。核心: 尾部集成高精度旋转编码器(增量式或绝对值式)。
运动特性:连续平滑旋转。扭矩特性平坦,能在额定转速范围内提供接近额定扭矩的输出。动态响应快(加速/减速能力强)。精度高、不丢步(闭环保证)。
编码器 (仅伺服电机):
伺服电机不可或缺的部分。安装在电机尾部。
类型:增量式(需要回零找原点)、绝对值式(断电也能记住绝对位置)。
提供高分辨率的位置和速度反馈信号(A, B, Z相 或 Sin/Cos 或 数字通讯信号)给驱动器。
电源:
为驱动器和电机提供能量。步进和伺服通常都需要直流电源(常见24V, 48V, 72V 或更高)。伺服驱动器也可能直接接入交流电(单相220V或三相380V)并在内部整流。
二、 软件编程要点
理解了硬件如何连接和通信,软件编程就是告诉控制器“做什么”和“怎么做”。
核心任务: 生成控制信号序列(脉冲或总线指令),使电机按照期望的轨迹(位置、速度、加速度)运动。
步进电机编程 (相对简单 - 开环思想):
初始化配置:
设置控制器的输出端口功能:指定哪些DO口用作
PUL
,DIR
,EN
。计算关键参数 (核心!):
目标位置 (脉冲数):
目标位移 (单位:mm, deg) / 机构传动比 / (电机步距角 / 360) * 驱动器细分
= 所需脉冲数。例如:移动10mm,丝杠导程5mm/转,电机步距角1.8°,驱动器16细分:10 / 5 / (1.8 / 360) * 16 = 10 / 5 / 0.005 * 16 = 200 * 16 = 3200
个脉冲。目标速度 (脉冲频率):
目标线速度 (mm/s) / (导程 (mm/转) / 60) * (360 / 步距角) * 细分
= 所需脉冲频率 (Hz)。例如:速度30mm/s,导程5mm/转,步距角1.8°,16细分:30 / (5 / 60) * (360 / 1.8) * 16 = 30 / 0.0833 * 200 * 16 ≈ 360 * 200 * 16 = 1,152,000 Hz
。注意: 实际控制器输出频率有上限。加速度/减速度: 设置脉冲频率从0上升到目标速度(或从目标速度下降到0)所需的时间或斜率。极其重要! 防止启动失步、停止过冲和减小机械冲击。通常用梯形或S型加减速曲线。
控制流程 (典型运动):
使能电机: 置位
EN
信号(通常低电平有效)。设置方向: 根据目标位移的正负,设置
DIR
信号电平(高/低)。启动运动:
基本方法 (IO翻转): 在单片机中,可能用循环延时翻转
PUL
引脚电平来产生脉冲。不推荐! 效率低,占用CPU,难做加减速。推荐方法 (硬件PWM/定时器中断):
使用MCU的硬件PWM模块直接生成指定频率的脉冲信号。通过改变PWM频率实现调速。
使用定时器中断,在中断服务程序(ISR)中翻转
PUL
引脚,并计算已发出的脉冲数。在ISR中可以动态计算下一个脉冲的间隔时间(实现加减速)。
PLC/运动控制器方法:
使用内置的 PTO (Pulse Train Output) 功能块。你只需要设定目标脉冲数、起始频率、目标频率、加减速时间/斜率,硬件会自动生成完美的带加减速的脉冲序列。
使用专用的运动控制指令(如
MC_MoveAbsolute
,MC_MoveRelative
)。
等待运动完成:
在PTO或运动指令中,通常有
Busy
/Done
/InPosition
状态标志位。在MCU中,需要自己计数发出的脉冲数,并与目标脉冲数比较。
停止/失能: 运动完成后,停止脉冲输出。可选择失能
EN
信号(切断线圈电流,电机可自由转动,省电不发热)。
关键编程技巧与注意事项:
加减速是灵魂: 必须实现平滑的加减速(梯形或S曲线),否则极易在启动/停止时丢步或产生振动。S曲线更平滑。
避免共振区: 如果电机在某个速度附近振动噪声很大,编程时应让电机快速通过这个速度区间,或者避开这个速度运行。
丢步检测与补偿 (开环痛点): 开环无法知道是否丢步。可在关键位置添加外部传感器(限位开关、原点开关、光电传感器)进行位置校验和补偿。或者在要求不高的场合,通过降低负载、增大电机余量、优化加减速来尽量避免。
微步平滑性: 高细分可以使低速运动更平滑,减少振动噪音,但对控制器的最高输出频率要求也更高。
伺服电机编程 (更复杂 - 闭环思想):
初始化配置 (更复杂):
物理连接配置: 设置控制器与伺服驱动器的通讯接口参数(波特率、站号 - Modbus RTU; 网络配置 - EtherCAT)。
驱动器参数设置 (关键!):
控制模式选择:位置模式 (最常见)、速度模式、扭矩模式。模式决定了控制器发送的目标值类型(脉冲/位置指令、速度指令、扭矩指令)。
电子齿轮比:
指令单位 / 编码器分辨率
。用于将控制器发出的指令单位(如1个脉冲)映射到电机实际转动的角度/距离。例如:编码器分辨率131072 p/r (17-bit),希望控制器发1个脉冲对应电机转0.01度:(0.01度 / 360度) * 131072 = 3.64
。设置分子分母使比值接近3.64(如364/100)。简化了控制器的计算,避免发送过高的脉冲数。位置/速度/电流环增益 (PID参数): 决定系统的响应速度、稳定性和抗干扰能力。参数整定是难点。通常驱动器有自整定功能(Auto-tuning),但复杂工况仍需手动调整。
行程限位(软件限位)。
报警和使能逻辑。
反馈分辨率设置(如果驱动器可配置)。
控制器侧配置:
映射伺服驱动器的过程数据对象(PDO) - 对于通讯总线(如CANopen, EtherCAT)。这定义了控制器和驱动器之间周期性交换哪些数据(目标位置、实际位置、控制字、状态字等)。
设置控制周期(通讯周期和位置环更新周期)。周期越短,控制越精细,性能要求越高(EtherCAT可达1ms甚至更低)。
定义轴参数(单位换算:脉冲->mm/deg,最大速度/加速度/加加速度)。
控制流程 (典型位置模式运动):
伺服使能:
通过通讯总线发送
控制字
的特定位序列(如Shutdown -> Switch On -> Enable Operation
)。通过专用
伺服使能(SV-ON)
信号线(高/低电平)。
选择操作模式: 发送指令切换到
位置模式
(通过通讯或模式选择信号线)。启动运动:
脉冲/方向模式: 编程方式和步进电机非常相似(使用PTO或运动指令),但闭环保证精度。驱动器内部完成闭环计算。
通讯总线模式 (主流):
使用控制器提供的运动控制函数库/指令。
设定目标位置: 将目标位置值(单位已换算好)写入指定的发送PDO或寄存器。
触发运动开始: 通过设置
控制字
的特定位(如Absolute Move
+Start
)或调用专门的MC_MoveAbsolute
/MC_MoveRelative
函数。运动曲线规划: 控制器内部或驱动器内部会根据设定的目标位置、最大速度、最大加速度、最大加加速度(Jerk)自动规划出平滑的运动轨迹(梯形或S型速度曲线)。现代伺服系统通常支持复杂的轨迹规划。
运动监控与反馈:
通过通讯总线实时读取
状态字
、实际位置
、实际速度
、实际扭矩
、跟随误差
等信息。状态字
包含Ready to switch on
,Operation enabled
,Target reached
,Following error
,Fault
等重要状态位。
等待运动完成:
监控
状态字
中的Target reached
位。监控
实际位置
是否进入目标位置附近的到位区间
。使用运动指令的
Done
/Busy
/InPosition
输出标志。
停止/失能: 停止运动指令。发送伺服失能命令或拉低
SV-ON
信号。
关键编程技巧与注意事项:
理解控制模式: 清楚当前工作在位置、速度还是扭矩模式,以及模式间的切换逻辑。
参数整定是核心挑战: 不当的PID增益会导致系统振荡(不稳定)、响应慢或跟随误差大。充分利用自整定,在真实负载下整定,必要时手动微调。关注
跟随误差
。充分利用通讯总线: 这是实现高级功能(同步、电子凸轮、电子齿轮、多轴插补)和集中监控的基础。理解使用的总线协议(如CANopen的DS402规范,EtherCAT的CoE)非常重要。
精确的单位换算和电子齿轮比: 确保控制器发出的指令单位(脉冲、用户单位)能精确对应到实际的机械位移。
运动规划: 合理设置速度、加速度、加加速度限制,保证运动平滑、快速且不超载。S曲线规划比梯形曲线更优。
状态机处理: 伺服有明确的状态转换(未使能、准备就绪、使能运行、故障等)。程序需要正确处理这些状态转换和错误恢复。
安全功能: 编程实现硬件限位开关触发急停、软件限位、跟随误差超限报警、驱动器故障处理等安全逻辑。
同步与协调: 对于多轴系统,利用运动控制器的多轴插补、电子齿轮、电子凸轮功能实现复杂的同步运动。这需要控制器强大的计算能力和高效的总线。
总结与对比:
特性 | 步进电机 (开环) | 伺服电机 (闭环) |
---|---|---|
控制核心 | 脉冲计数 + 方向 | 目标值设定 + 实时反馈 (编码器) + 闭环控制算法 (PID) |
硬件接口 | 简单: PUL, DIR, EN (数字IO) | 多样: P/D (类似步进), 模拟量, 主流:通讯总线 |
编程复杂度 | 相对简单 (主要关注脉冲生成和加减速) | 复杂 (需理解闭环控制、总线协议、参数整定) |
核心任务 | 计算并生成正确的脉冲序列 (数量、频率、加减速) | 配置驱动器、设定目标值、处理状态反馈、处理总线通讯 |
关键计算 | 位移->脉冲数,速度->脉冲频率,加减速曲线 | 单位换算、电子齿轮比、运动规划 (S曲线)、PID参数整定 |
精度保证 | 无 (依赖机械精度,可能丢步) | 高 (闭环实时纠正误差) |
动态性能 | 较低 (高速扭矩下降快,有共振区) | 高 (宽泛的恒扭矩区间,快速响应) |
适用场景 | 成本敏感、中低速度、中低负载、精度要求不高、简单启停定位 | 高精度、高速度、高动态响应、变负载、复杂轨迹、多轴同步 |
实际编程演示的核心思想:
无论是百度看到的“厉害”的演示,还是你自己的项目,核心都离不开上述的硬件连接和软件逻辑。演示者通常会:
展示硬件连接: 控制器、驱动器、电机、电源如何接。
演示基础配置: 在驱动器软件或控制器软件中设置模式、电流、细分/电子齿轮比、基本增益。
编写简单运动程序:
步进: 在PLC梯形图中调用PTO块设置脉冲数和速度;在Arduino中使用
AccelStepper
库设置目标位置和速度后调用run()
。伺服: 在PLC中调用
MC_MoveAbsolute
功能块;在EtherCAT主站软件中拖动轴到目标位置或编写脚本设置目标值并触发运动;在单片机中通过Modbus RTU发送目标位置和控制字。
运行并观察: 电机按指令运动。伺服演示通常会强调其精准停止、快速响应或抗干扰能力(如用手阻挡后能恢复或报错)。
演示高级功能 (伺服): 如多轴同步运动、电子齿轮(一个轴跟随另一个轴转动)、复杂轨迹规划。
学习建议:
从步进开始: 理解脉冲控制的基本概念和加减速的重要性。用Arduino + A4988/TMC2209驱动器 + 步进电机入门。
深入理解闭环: 学习PID控制原理。用Arduino + 带编码器的直流电机(有刷/无刷)+ 电机驱动板 + PID库进行简单闭环速度/位置控制实验。
掌握一种通讯总线: Modbus RTU 相对简单易学,是工控基础。CANopen 或 EtherCAT 是运动控制主流。
使用成熟工具: PLC的运动控制指令、专业的运动控制库(如 Galil, Kollmorgen AKD 的 SDK)、EtherCAT主站开发包(如 TwinCAT, SOEM, IgH EtherLab)可以大幅降低开发难度。
善用驱动器软件: 各大品牌(松下、安川、三菱、台达、汇川)的伺服驱动器都有配套的调试软件,用于参数设置、示波器功能、自整定,是学习和调试的利器。
实践与调试: 电机控制是实践性极强的领域。多动手接线、写代码、调参数、用示波器看信号、分析问题。