1. 编码器基础:增量式与绝对式编码器原理、分辨率与精度、ABZ与UVW信号
各位同学,咱们这门课讲的是 Simulink 里的编码器换相模型。但别急着上手敲代码,先把编码器本身搞明白。这东西就像人的眼睛,电机转没转、转到哪了,全靠它告诉控制器。
我刚开始做电机驱动那会儿,就吃过编码器的亏。选型时没仔细看分辨率,结果电机低速运行时抖得跟筛糠似的。后来才明白,编码器选不对,后面全是白费功夫。
1.1 增量式编码器:简单但有个致命缺点
增量式编码器,说白了就是只告诉你「动了多少」,不告诉你「现在在哪」。它内部有个码盘,上面刻着密密麻麻的条纹。码盘一转,光栅传感器就输出脉冲。
你想想看,每次上电,控制器根本不知道电机轴在什么位置。必须让电机先转到一个已知的参考点(比如 Z 信号位置),才能开始正常干活。这就是它的「原罪」——断电丢失位置。
核心特点:
- 输出信号:A、B、Z 三路
- A、B 相差 90° 电角度,用来判断方向
- Z 信号每圈一个脉冲,用于归零校准
- 断电后位置信息丢失
我在一个 AGV 小车的项目里用过增量式编码器。每次开机,小车都得先原地转一圈找 Z 信号,那场面挺滑稽的。但没办法,这就是增量式的代价。
1.2 绝对式编码器:上电就知道位置
绝对式编码器就高级多了。它内部有多个码道,每个位置对应一个唯一的二进制编码。上电一瞬间,直接读出当前位置,不需要找参考点。
它的输出方式有两种:并行输出(一堆线)和串行输出(SSI、BISS、EnDat 等协议)。串行方式线少,抗干扰强,现在用得最多。
| 对比项 | 增量式 | 绝对式 |
|---|---|---|
| 断电记忆 | 无 | 有 |
| 上电即用 | 否(需找零位) | 是 |
| 输出信号 | A/B/Z 脉冲 | 并行/串行数据 |
| 抗干扰能力 | 中等 | 高(串行带 CRC) |
| 成本 | 低 | 高 |
我的建议:如果项目对安全要求高,或者断电后不允许电机乱动(比如机器人关节),老老实实用绝对式。如果只是普通调速,增量式完全够用,性价比高。
1.3 分辨率与精度:别搞混了
这两个概念,我见过太多人搞混了。包括我自己,刚入行时也犯过这个错。
分辨率是编码器能分辨的最小角度变化。比如一个 1000 线的增量式编码器,每圈 1000 个脉冲,经过 4 倍频后就是 4000 个计数,分辨率就是 360°/4000 = 0.09°。
精度是实际角度和测量角度之间的误差。它受码盘加工精度、安装偏心、温度漂移等因素影响。分辨率再高,精度跟不上也是白搭。
我曾经踩过的坑:选了一个 17 位绝对式编码器,分辨率高达 0.0027°,满心欢喜装上去。结果实测精度只有 0.1°,因为码盘安装偏心太大。记住:分辨率是理论值,精度是实际值。选型时一定要看精度指标,别被分辨率忽悠了。
1.4 ABZ 信号:增量式编码器的三驾马车
咱们重点说说 ABZ 信号,因为 Simulink 建模时主要处理的就是这三路信号。
- A 相和 B 相:相位差 90°。正转时 A 领先 B 90°,反转时 B 领先 A 90°。通过检测这个相位关系,就能判断电机转向。
- Z 相:每圈一个脉冲,宽度通常为 1 个 A 相脉冲周期。用于绝对位置校准。
在 Simulink 里,我习惯用 Edge Detector 模块来捕获 A、B 的上升沿和下降沿,然后通过一个状态机来判断正反转和计算位置。后面章节会详细讲这个模型。
1.5 UVW 信号:无刷电机的换相信号
UVW 信号是专门给无刷直流电机(BLDC)用的。它不像 ABZ 那样连续输出脉冲,而是每 60° 电角度切换一次状态。
三个信号组合起来,一共 6 种状态(001、010、011、100、101、110)。每种状态对应一个换相时刻。控制器根据这个状态就知道该给哪两相通电了。
| U | V | W | 电角度范围 | 通电相 |
|---|---|---|---|---|
| 1 | 0 | 0 | 0° ~ 60° | A+ B- |
| 1 | 1 | 0 | 60° ~ 120° | A+ C- |
| 0 | 1 | 0 | 120° ~ 180° | B+ C- |
| 0 | 1 | 1 | 180° ~ 240° | B+ A- |
| 0 | 0 | 1 | 240° ~ 300° | C+ A- |
| 1 | 0 | 1 | 300° ~ 360° | C+ B- |
注意:UVW 信号的分辨率很低,每 60° 才变化一次。所以它只能用于粗略的换相控制。如果你需要精确的速度或位置控制,还得靠 ABZ 信号或者绝对式编码器。
1.6 知识体系总览
下面这张图把本章的核心知识点串起来了。你可以把它当作一个快速索引,后面建模时随时回来对照。