1、编码器基础:增量式与绝对式编码器原理、分辨率与精度、C2000 eQEP模块概述

做电机控制这些年,我接触过不少编码器。说实话,刚入行那会儿我也分不清增量式和绝对式到底该怎么选。后来在几个项目里吃过亏,才慢慢摸透了它们的脾气。这一章咱们就把编码器的基础打牢,顺便看看C2000的eQEP模块能帮我们做什么。

1.1 增量式编码器:简单但别大意

增量式编码器,说白了就是输出脉冲。它每转一圈会发出固定数量的脉冲,比如1024线、2048线。你通过数脉冲个数就知道轴转了多少角度,通过两路信号的相位差就能判断正反转。

它的核心原理其实不复杂:码盘上刻着均匀的明暗条纹,光耦一照,信号就出来了。A相和B相相差90度电角度,这就是我们常说的正交信号。我习惯用Z相信号来做零位校准,每次上电先找一次Z脉冲,这样位置就清零了。

我的经验:增量式编码器最怕掉电丢位置。有一次我在调试伺服驱动器时,设备突然断电,重新上电后电机直接冲过了限位。从那以后,我每次都会在程序里加一个上电回零的流程,哪怕只是慢速找一下Z脉冲。

增量式的优点很明显:便宜、结构简单、响应快。但缺点也致命——没有绝对位置记忆。你想想看,如果系统断电后轴被人转动了,再上电时你根本不知道它在哪。所以它适合那些每次上电都能回零的场景,比如打印机、传送带。

1.2 绝对式编码器:贵但省心

绝对式编码器就不一样了。它每个位置都有唯一的编码值,上电就知道当前角度。我最早接触绝对式编码器是在一个工业机器人项目上,当时客户要求断电后不能丢失位置,增量式根本没法用。

绝对式编码器分两种:单圈和多圈。单圈的只能记录一圈内的位置,多圈的还能记录转了多少圈。多圈编码器内部有齿轮组或者电池备份,成本自然就上去了。

类型 输出信号 位置记忆 典型分辨率 适用场景
增量式 A/B/Z脉冲 无 1024~8192线 回零方便的系统
绝对式单圈 SSI/BiSS/EnDat 有(单圈) 12~20位 伺服、机器人
绝对式多圈 SSI/BiSS/EnDat 有(多圈) 12+12位 高可靠性场合

绝对式的分辨率通常用位来表示。比如17位编码器,一圈有2^17=131072个位置。这个精度对于大多数电机控制来说已经绰绰有余了。不过要注意,分辨率高不代表精度高,精度还跟码盘的加工误差、安装偏心有关。我在一个项目中用过20位的编码器,结果因为安装时轴对中偏差了0.1mm,实际精度还不如16位的。

避坑提醒:绝对式编码器的通信协议五花八门,SSI、BiSS、EnDat、HIPERFACE……选型时一定要确认你的控制器支持哪种协议。我曾经因为没仔细看手册,买了一批EnDat编码器回来,结果C2000的eQEP模块只支持增量式和SSI,最后只能外挂协议转换芯片,折腾了整整两周。

1.3 分辨率与精度:别搞混了

这两个概念我见过太多人搞混了。分辨率是编码器能分辨的最小角度变化,精度是实际角度与测量角度的偏差。举个例子:一个17位编码器,分辨率是360°/131072≈0.0027°,但精度可能只有±0.1°。为什么?因为码盘刻线有误差、光耦有噪声、安装有偏心。

我个人的经验是:选编码器时先看精度要求,再看分辨率。如果系统要求定位精度±0.5°,你买个20位的编码器纯属浪费钱。反过来,如果要求±0.01°,那至少得17位起步,而且安装工艺必须到位。

核心公式:

  • 分辨率(°)= 360° / 每圈脉冲数(增量式)或 360° / 2^N(绝对式)
  • 精度(°)= 编码器厂商给出的最大角度误差
  • 系统定位精度 ≈ 编码器精度 + 机械传动误差 + 控制算法误差

1.4 C2000 eQEP模块概述

C2000系列芯片里集成了eQEP模块,全称是Enhanced Quadrature Encoder Pulse。说白了,它就是专门用来接编码器的硬件外设。我最早用TMS320F28035时,eQEP模块帮我省了不少事——不用再外接计数器芯片了。

eQEP模块的核心功能有三个:

  1. 位置计数:自动对A/B正交信号进行4倍频计数,得到位置值
  2. 速度测量:支持两种测速方式——M法(测脉冲数)和T法(测脉冲周期)
  3. 索引信号处理:Z信号可以用来复位位置计数器,实现零位校准

它的内部结构大致是这样的:

C2000 eQEP模块内部结构框图 A相输入 B相输入 Z相输入 正交解码 (4倍频/方向判断) → 位置计数器 位置计数器 QPOSCNT 32位 速度测量 M法 / T法 QCAPCTL 索引信号处理 中断/事件生成 寄存器接口 关键寄存器说明: QPOSCNT:位置计数器,记录当前脉冲计数值 QPOSMAX:位置最大值,用于模数计数模式 QCAPCTL:捕获控制寄存器,配置测速方式 QEPCTL:eQEP控制寄存器,使能/复位/模式选择

eQEP模块支持三种工作模式:

  • 正交计数模式:标准A/B正交信号,4倍频计数,适合增量式编码器
  • 方向计数模式:一个脉冲信号加一个方向信号,适合步进电机或简易编码器
  • 上/下计数模式:两个独立的脉冲输入,一个加计数一个减计数

我个人最常用的是正交计数模式。它精度高,而且硬件自动判断方向,省去了软件处理的麻烦。不过要注意,eQEP模块的输入频率有限制。以F28035为例,最大输入频率是系统时钟的1/4。如果你用高频编码器,比如5000线,4倍频后就是20000脉冲/圈,如果转速6000rpm,频率就是2MHz,还在范围内。但要是用更高分辨率的编码器,就得算一算了。

配置小技巧:eQEP模块的初始化代码其实不复杂。我习惯先配置GPIO复用为eQEP功能,然后设置QEPCTL寄存器使能模块,再配置QPOSMAX为编码器线数的4倍。最后别忘了使能中断——位置溢出或者Z信号到来时,中断能帮你及时处理。