4. 驱动器与编码器:驱动原理与信号反馈
好,我们进入第四章。这一章聊的是运动控制里最贴近硬件的两个家伙——驱动器和编码器。
很多人觉得驱动器就是个放大电流的盒子,编码器就是个转圈计数的东西。嗯,这么理解也没错,但做工程不能只停留在“知道它是什么”,你得明白它怎么工作、为什么这样工作、以及出问题了怎么排查。
我个人习惯把驱动器和编码器看作一对“执行者与观察者”。驱动器负责干力气活,编码器负责汇报位置。两者配合不好,整个系统就是瞎子和蛮力的组合。
4.1 驱动器工作原理
驱动器,说白了就是把控制器的弱电信号,转换成能驱动电机旋转的强电功率。你想想看,控制器输出的PWM信号才几伏、几十毫安,电机要转起来可能需要几十伏、几安甚至几十安。这个“放大”的过程,就是驱动器的核心任务。
4.1.1 驱动器的三大核心模块
我拆开过不少驱动器,里面虽然元器件密密麻麻,但逻辑上就三块:
- 功率级:用IGBT或MOSFET搭成的H桥或三相桥,负责把直流母线电压“斩”成电机需要的交流波形。
- 控制逻辑:接收控制器的方向、使能、PWM信号,生成功率管的开关时序。
- 保护电路:过流、过压、过温、欠压锁定——这些是保命的。
关键点:驱动器的本质是一个功率放大器 + 逻辑转换器。它不负责“算位置”,只负责“听话出力”。
4.1.2 常见驱动方式对比
我在项目里用过几种主流驱动方式,给你列个表,一目了然:
| 驱动方式 | 适用电机 | 特点 | 我的经验 |
|---|---|---|---|
| 方波驱动(六步换向) | 无刷直流电机(BLDC) | 控制简单,转矩脉动大 | 低端风机、泵类常用,成本敏感项目首选 |
| 正弦波驱动(FOC) | 永磁同步电机(PMSM) | 转矩平滑,效率高,噪声低 | 伺服系统标配,我90%的项目都用FOC |
| 步进驱动(整步/细分) | 步进电机 | 开环控制,低速力矩大 | 3D打印机、雕刻机常见,但高速容易丢步 |
小提示:如果你做的是高精度位置控制,别犹豫,直接上FOC驱动的伺服驱动器。步进电机加编码器做闭环?我试过,效果不如伺服来得干脆。
4.1.3 驱动器与控制器的接口
驱动器怎么跟控制器“说话”?常见的有这几种:
- 脉冲+方向:最古老也最可靠。一个脉冲走一步,方向电平决定正反转。步进驱动和部分伺服都支持。
- 模拟量输入:±10V或0-10V,电压大小对应速度或转矩。老式伺服驱动器常用。
- 总线通信:EtherCAT、CANopen、Modbus……现在的主流方案。我最近几年做的项目,清一色EtherCAT。
避坑指南:我曾经在一个项目里用脉冲方向接口控制伺服,结果脉冲频率太高(超过500kHz),驱动器丢脉冲了。后来查手册才发现,那款驱动器的光耦隔离最高只支持200kHz。所以——选型时一定要确认接口带宽。
4.2 编码器类型与原理
编码器是运动控制系统的“眼睛”。没有它,驱动器就是个盲人,电机转没转、转了多少、转得快慢,一概不知。
编码器分两大类:增量式和式。这两者的区别,我经常用一个比喻来解释:
- 增量式:像一把尺子,只有刻度线,没有数字。你得从起点开始数,才知道走了多远。
- 式:像一把带数字的尺子,每一条刻度线上都标着位置值。一开机就知道自己在哪。
4.2.1 增量式编码器
增量式编码器输出两路正交信号(A相和B相),相位差90°。通过判断A和B的先后顺序,就能知道旋转方向。再加上一个Z相(零位脉冲),每转一圈输出一个脉冲,用于归零校准。
它的核心参数是分辨率,也就是每转多少脉冲(PPR)。比如一个1000 PPR的编码器,配上4倍频(检测A、B的上升沿和下降沿),实际分辨率就是4000线/圈。
计算公式:
实际分辨率 = PPR × 4(倍频)
角度分辨率 = 360° / 实际分辨率
举个例子:1000 PPR编码器,4倍频后每圈4000个计数,每个计数对应0.09°。嗯,这个精度对于大多数工业应用已经够用了。
4.2.2 式编码器
式编码器就高级一些。它内部有一个码盘,上面刻着格雷码或二进制码。每个位置对应唯一的码值。一上电,直接读出当前位置,不需要找零位。
式编码器又分两种:
- 单圈式:只能记住一圈内的位置。断电再上电,如果电机被转动超过一圈,位置就丢了。
- 多圈式:内部有机械齿轮或电子计数器,能记录多圈位置。断电后即使电机转了几十圈,上电后位置依然准确。
我的建议:如果项目对“断电后位置保持”有硬性要求(比如机器人关节、数控机床刀库),直接上多圈式编码器。别想着用增量式加电池备份——我吃过这个亏,电池没电了,整个系统要重新回零,生产停了半天。
4.2.3 增量式 vs 式:选型对比
| 对比项 | 增量式 | 式 |
|---|---|---|
| 上电位置 | 未知,需回零 | 已知,直接可用 |
| 分辨率 | 可做很高(几万线) | 受码盘工艺限制,通常低于增量式 |
| 成本 | 低 | 高(尤其是多圈) |
| 抗干扰 | 脉冲传输易受干扰 | 数字通信,抗干扰强 |
| 典型应用 | 通用伺服、步进闭环 | 机器人、高端数控、AGV |
4.3 信号反馈与处理
编码器信号回到驱动器或控制器后,不是直接拿来用的。中间要经过整形、滤波、倍频、计数等一系列处理。
4.3.1 信号整形与滤波
编码器输出的方波,经过长线传输后,边沿会变缓,甚至出现毛刺。我见过最夸张的一次,现场变频器干扰导致编码器信号上叠加了2V的尖峰,驱动器直接误计数。
解决办法:
- 硬件上:加施密特触发器整形,加RC低通滤波。
- 软件上:做去抖处理,连续采样三次一致才认为有效。
4.3.2 倍频与计数
前面提到4倍频,具体怎么实现的?其实就是检测A、B两相信号的四个边沿:A上升、A下降、B上升、B下降。每个边沿都产生一个计数脉冲。
下面是一个简单的倍频计数伪代码,我用C风格写一下:
// 假设A、B为GPIO输入,已做去抖处理
static uint8_t last_ab = 0;
static int32_t pulse_count = 0;
void encoder_isr(void) {
uint8_t current_ab = (GPIO_ReadPin(A_PIN) << 1) | GPIO_ReadPin(B_PIN);
uint8_t change = current_ab ^ last_ab;
if (change) {
// 根据状态变化判断方向
if ((last_ab == 0b00 && current_ab == 0b01) ||
(last_ab == 0b01 && current_ab == 0b11) ||
(last_ab == 0b11 && current_ab == 0b10) ||
(last_ab == 0b10 && current_ab == 0b00)) {
pulse_count++; // 正转
} else {
pulse_count--; // 反转
}
last_ab = current_ab;
}
}
注意:上面的代码是简化版。实际项目中,编码器中断频率可能很高(比如5000 PPR编码器,电机3000 RPM时,中断频率高达1MHz)。这时候用软件查询法会死机,必须用硬件正交编码器接口(QEI)外设来处理。
4.3.3 位置与速度计算
有了脉冲计数,位置和速度就好算了:
- 位置:位置 = 脉冲计数 / 实际分辨率 × 360°(或螺距,如果是直线运动)
- 速度:速度 = (Δ脉冲计数 / Δ时间) / 实际分辨率 × 60(转/分钟)
速度计算有个坑:Δ时间太短,噪声大;Δ时间太长,响应慢。我一般用M法(测频法)测高速,T法(测周期法)测低速,中速段两者切换。嗯,这个后面讲速度环的时候再细说。
4.4 知识体系总览
最后,我用一张SVG图把本章的核心逻辑串起来。你看完这张图,应该能明白驱动器、编码器、控制器三者之间的关系。
这张图里,我特意画了两条反馈路径:一条从编码器到驱动器(实线),这是最常见的闭环方式——驱动器自己读编码器,做电流环和速度环;另一条到控制器(虚线),用于全闭环控制,比如控制器同时读编码器和光栅尺,做位置环的最终校准。
好了,第四章就到这里。驱动器和编码器的原理是运动控制的基石,后面讲PID调节、讲电子齿轮、讲龙门同步,都离不开今天这些内容。你先把这一章吃透,后面会越走越顺。