深入解析C2000 eQEP模块:正交解码、高精度测速与伺服控制应用

发布时间:2026/7/21 10:29:38

深入解析C2000 eQEP模块:正交解码、高精度测速与伺服控制应用 1. 项目概述为什么我们需要eQEP模块在工业伺服驱动、机器人关节控制或者高精度数控机床里想让电机乖乖听话精确地走到我们指定的位置或者以恒定的速度旋转核心前提是控制系统必须“看得见”电机当前到底在哪儿、转得多快。这就好比我们闭着眼睛走路很容易走偏但睁着眼睛就能根据周围景物参考点和步伐频率速度感来修正路线。增量式编码器就是电机控制系统的“眼睛”。你可能会在淘宝上花几十块钱买到一个1000线的小型光电编码器它通过光栅盘和光电传感器每转一圈会输出1000个A相脉冲和1000个B相脉冲。关键来了这两路脉冲在相位上精确相差90度电角度形成所谓的“正交”关系。通过检测A、B两路信号谁先上升或下降我们就能判断电机是正转还是反转通过累计脉冲的个数就能知道电机转了多少角度。这就是正交解码Quadrature Decoding的基本思想听起来并不复杂。但问题往往藏在细节里。当电机转速高达每分钟几千转时脉冲频率可能达到几百KHz单片机的主频如果不够高可能连单个脉冲都抓不住更别提做复杂的四倍频和方向判断了。此外低速时脉冲间隔很长用固定周期采样位置来计算速度分辨率会惨不忍睹导致控制抖动而高速时用测量脉冲间隔时间来计算速度又对定时器的精度要求极高。这些实时性、精度和计算资源的矛盾如果全用软件来实现会大量消耗CPU时间让系统不堪重负。这时德州仪器TIC2000系列微控制器内置的增强型正交编码器脉冲eQEP模块就扮演了“专用协处理器”的角色。它用硬件逻辑帮你完成了最耗时、最要求实时性的工作四倍频解码、方向判断、位置计数、速度测量通过单位时间事件或边沿捕获甚至还能在指定位置发出同步信号去触发其他外设如ADC采样。你只需要配置好几个寄存器然后定期去读取位置和速度值即可CPU被极大地解放出来去执行更高级的控制算法如PID调节、轨迹规划。这次我就结合手册和实际调伺服驱动器的经验把这颗“瑞士军刀”般的模块从原理到配置掰开揉碎了讲清楚。2. eQEP模块整体架构与核心功能单元拆解拿到一个外设模块我习惯先看它的功能框图搞清楚数据流和各个子单元的分工。eQEP模块的架构非常清晰我们可以把它想象成一个高效的位置速度信息处理流水线。2.1 信号输入与预处理GPIO配置是第一步模块的物理接口是几个GPIO引脚但并非随便配置就能用。eQEP对输入信号的时序有要求必须同步到系统时钟SYSCLK。因此在GPIO复用配置时绝对不能选择异步输入模式必须配置为同步输入模式通过GPxQSELn寄存器可以选择是否启用数字滤波器输入限定来消除抖动。这是一个新手常踩的坑配置了引脚功能却发现eQEP没反应第一步就应该检查GPIO的输入同步配置。四个核心输入引脚分别是QEPA (EQEPxA)和QEPB (EQEPxB)核心正交信号对。也可以配置为“时钟方向”模式此时QEPA作为计数时钟QEPB作为方向信号。QEPI (EQEPxI)索引信号。编码器每转一圈输出一个脉冲用于确定机械零位或绝对位置参考点。这对于上电后寻找“家”Home位置至关重要。QEPS (EQEPxS)选通信号。一个通用的外部事件输入可以来自限位开关、光电传感器等用于在特定物理位置锁存当前计数值。2.2 核心处理单元详解信号进入模块后会被分发到几个并行的处理单元各司其职正交解码单元 (QDU - Quadrature Decoder Unit)这是模块的“前端解码器”。它接收原始的QEPA和QEPB信号内部有一个状态机参考手册中的状态图。这个状态机会在A、B信号的每个边沿上升沿和下降沿进行跳转判断。根据A、B信号变化的先后顺序它不仅能产生用于计数的时钟信号QCLK频率是A或B信号的4倍即4倍频还能实时输出当前的方向信号QDIR。核心价值4倍频将编码器的物理分辨率提升了4倍。一个1000线的编码器经过QDU后每转能产生4000个计数脉冲极大地提升了位置检测精度。错误检测QDU还能检测“相位错误”。正常情况下A、B信号不会同时跳变。如果由于噪声或硬件故障导致两者边沿对齐QDU会置位相位错误标志PHE提醒你信号可能有问题此时计数值可能出错。位置计数器与控制单元 (PCCU - Position Counter and Control Unit)这是模块的“核心运算器”。它包含一个32位的位置计数器QPOSCNT根据QDU输出的QCLK和QDIR进行递增或递减计数。PCCU的巧妙之处在于其丰富的工作模式和事件处理机制工作模式计数器可以配置为在索引信号Index出现时复位、在达到最大值QPOSMAX时复位、仅在第一次收到索引信号时复位或者基于单位定时器事件复位用于测频。这适应了不同应用场景比如需要多圈绝对计数的龙门架或者每圈都从零开始的旋转平台。锁存功能可以在索引信号或选通信号的边沿瞬间将QPOSCNT的当前值锁存到专用的影子寄存器QPOSILAT, QPOSSLAT中。这个功能在需要记录特定事件发生瞬间的位置时非常有用且是硬件自动完成没有软件延迟。位置比较单元可以设置一个比较值QPOSCMP。当QPOSCNT计数到该值时硬件会自动产生一个同步脉冲信号PCSOUT可以用来触发ADC开始采样电流实现电流环、速度环、位置环的严格同步这是实现高性能伺服控制的关键。边沿捕获单元 (QCAP - eQEP Edge Capture Unit)这是为低速高精度速度测量量身定做的“精密计时器”。它的原理不是固定时间读位置而是固定位移测时间。单元内部有一个捕获定时器QCTMR在QEPA的每个边沿可配置捕获一次定时器值并计算出相邻两个边沿之间的时间差即周期。应用场景电机转速很低时比如每分钟几转固定1ms采样一次位置可能两次采样间位置根本没变算出的速度就是0。而QCAP通过测量一个脉冲或1/4个脉冲的实际时间能非常精确地计算出极低转速。公式就是速度 ∝ 1 / ΔT。单位时间基准与看门狗 (UTIME QWDOG)单位时间基准 (UTIME)一个独立的定时器用于产生固定的时间间隔单位时间。在此时间点硬件可以自动锁存位置计数器值。结合前后两次锁存的位置差就能用速度 Δ位置 / Δ时间的公式来计算速度。这种方法在中高速段非常有效且节省CPU。看门狗定时器 (QWDOG)用于监测电机是否堵转或丢失。如果超过设定的时间QWDPRD没有收到任何编码器脉冲看门狗就会超时并产生中断。这在安全要求高的场合是必备功能。2.3 寄存器地图概览理解寄存器是编程的基础。eQEP的寄存器大致分为几类数据寄存器如位置计数器QPOSCNT、锁存器QPOSILAT/QPOSSLAT、比较寄存器QPOSCMP。配置寄存器如解码控制QDECCTL、模块控制QEPCTL、获控制QCAPCTL、位置比较控制QPOSCTL。这些寄存器决定了模块以何种模式工作。周期与定时器寄存器如单位周期QUPRD、看门狗周期QWDPRD、捕获定时器QCTMR等。中断相关寄存器中断使能QEINT、标志位QFLG、清除位QCLR和强制位QFRC。编程时我们的工作流通常是初始化GPIO - 配置eQEP工作模式 - 设置周期/比较值 - 使能中断 - 在主循环或中断服务程序中读取位置/速度数据。3. 正交解码与位置计数模式深度解析理解了架构我们深入最核心的解码和计数部分。这是将编码器原始信号转化为有用数字信息的第一步。3.1 正交计数模式标准用法与方向判断这是最常用的模式对应QDECCTL[QSRC] 00。模块自动对A、B信号进行4倍频和方向解码。方向判断逻辑是理解的关键。手册里给出了状态机和真值表我用更直白的话解释我们把A、B信号组成一个2位二进制数{A, B}。正常旋转时这个数的变化序列是固定的。正转顺时针00 - 01 - 11 - 10 - 00 ...格雷码顺序反转逆时针00 - 10 - 11 - 01 - 00 ...QDU内部的状态机就是追踪这个序列。如果出现了00-11或11-00这种跳变即A、B同时变化在正交编码中这是非法的状态机会将其标记为相位错误PHE。在实际应用中短时的噪声毛刺可能引发此错误如果持续出现就需要检查编码器接线、电源或屏蔽了。四倍频的实现注意状态转移发生在A或B的每个边沿。也就是说A的上升沿、下降沿B的上升沿、下降沿各对应一次状态转移和一次计数脉冲QCLK产生。因此对于一个每转产生N个脉冲对的编码器最终位置计数器QPOSCNT每转将变化4N次。3.2 方向计数模式与上下计数模式不是所有位置传感器都输出正交信号。有些直接输出“时钟”和“方向”两路信号。此时应将QDECCTL[QSRC]配置为方向计数模式。时钟CLK接QEPA引脚每个上升沿触发一次计数。方向DIR接QEPB引脚高电平时递增计数低电平时递减计数。此外还有向上计数模式和向下计数模式。这两种模式下方向被固定QEPA作为唯一的时钟输入QEPB引脚不再使用。它们通常用于测量某个外部时钟信号的频率。通过配置QDECCTL[XCR]位可以选择在QEPA的上升沿计数或者上升沿和下降沿都计数2倍频进一步提高频率测量的分辨率。3.3 位置计数器工作模式的选择与实战配置PCCU的几种复位模式QEPCTL[PCRM]决定了位置计数器QPOSCNT的“归零”行为这是应用设计的重点。模式0索引事件复位 (PCRM00)行为每次检测到索引事件Index Event Marker即索引脉冲边沿后的第一个正交边沿就将QPOSCNT复位。正转复位到0反转复位到QPOSMAX。应用场景单圈绝对位置系统。例如一个旋转工作台每转一圈都需要从一个绝对的机械零点开始计数。索引信号就是那个零点。计数器值直接代表从零点出发的偏移量范围是[0, 4N-1]N为编码器线数。配置要点需要正确设置QPOSMAX 4N - 1。例如对于1000线编码器QPOSMAX 3999。同时QEPCTL[IEL]索引事件锁存配置在此模式下必须设为00或11。错误检查此模式下硬件会在每次索引事件时检查锁存的位置值。理论上正转一圈后锁存值应为0反转一圈后应为QPOSMAX。如果不是则会置位位置计数器错误标志PCEF这是一个强大的在线诊断功能。模式1达到最大位置复位 (PCRM01)行为计数器自由累加就像汽车的里程表。当正转计数到QPOSMAX时下一个时钟会翻到0上溢当反转计数到0时下一个时钟会翻到QPOSMAX下溢。应用场景多圈绝对位置系统。例如直线导轨上的滑块编码器连接在电机上通过丝杠带动滑块。我们需要知道滑块从起点开始的总位移这个位移可能远超一圈。此时我们需要用软件维护一个“圈数”变量结合QPOSCNT的溢出/下溢中断来计算总位移。配置要点QPOSMAX同样需要设置为4N - 1。中断服务程序需要处理上溢增加圈数和下溢减少圈数。模式2首次索引事件复位 (PCRM10)行为上电或初始化后第一个索引事件会将计数器复位。之后计数器就工作在模式1自由累加在QPOSMAX处循环。应用场景需要初始对齐的多圈系统。系统上电时位置是未知的通过寻找第一个索引信号来建立绝对的“圈内”位置。之后运行中就按多圈模式工作。这结合了模式0和模式1的优点。模式3单位时间超时复位 (PCRM11)行为不依赖索引信号而是由单位时间基准UTIME定时器超时来复位计数器。复位值取决于方向正转到0反转到QPOSMAX。应用场景频率/速度测量模式。这是将eQEP用作频率计。在每个固定的单位时间间隔例如1ms读取QPOSCNT的值这个值直接代表了在这1ms内收到的脉冲数从而可以计算出速度。然后计数器被复位准备下一个周期的测量。实操心得模式选择是系统设计的基石在为一个新的运动平台选型时我首先会问这个轴需要记忆断电后的绝对位置吗如果需要且行程不超过一圈就用模式0电池备份的绝对编码器或增量编码器寻零操作。如果行程多圈就用模式1或2并搭配绝对值多圈编码器或者在初始化时执行寻零序列找Index或限位开关。如果只是做速度闭环模式3配合单位定时器是最简单直接的。千万不要在项目中期才发现模式选错了那可能意味着机械结构或控制逻辑的大改。4. 高精度速度估算两种方法的原理与eQEP实现速度环是电机控制的内环其性能直接影响系统的动态响应。eQEP模块提供了两种互补的速度估算方法分别针对高速和低速优化。4.1 方法一基于固定时间间隔的位置差 (M法测速)这是最直观的方法对应前面提到的单位时间基准UTIME功能。原理设置一个固定的采样周期T例如1ms由QUPRD设定。在每个周期结束时硬件自动将QPOSCNT锁存。速度计算公式为速度 (v) [位置(k) - 位置(k-1)] / T其中位置差ΔX就是单位时间内的位移。eQEP实现配置QEPCTL[PCRM]11单位时间复位模式。这样每个UTIME周期结束时QPOSCNT会自动复位。你只需要在UTIME中断里读取复位前的计数值这个值就是ΔX然后除以周期T即可得到速度。也可以不自动复位而在中断里软件读取QPOSCNT并计算差值。优点计算简单在中高速时精度高输出稳定。缺点在低速时分辨率差。例如1000线编码器4000计数/转采样周期1ms。电机转速低于(1 / 4000) / (1/1000) * 60 15 RPM时ΔX经常为0算出的速度就是0产生严重的量化误差导致低速抖动。4.2 方法二基于固定位移的时间间隔 (T法测速)这种方法为了解决低速问题对应边沿捕获单元QCAP功能。原理固定一个位移量ΔX例如1个编码器计数脉冲。测量产生这个位移所花费的时间ΔT。速度计算公式为速度 (v) ΔX / ΔTeQEP实现使能QCAP单元它会在QEPA信号的每个边沿可配置为上升沿、下降沿或双边沿捕获一次自由运行定时器QCTMR的值。相邻两次捕获值之差就是ΔT。ΔX是固定的1个边沿事件。优点在低速时精度极高。因为低速时ΔT很大用高精度定时器测量ΔT的相对误差很小。缺点在高速时ΔT非常小对定时器分辨率要求极高且容易因为中断处理延迟或定时器溢出引入误差。同时速度更新率不固定速度越慢更新越慢。4.3 混合测速策略与eQEP配置实例高性能的伺服驱动器通常采用M/T混合测速法即高速时用M法低速时用T法在中间速度区域平滑切换。eQEP模块的硬件设计完美支持这种策略。配置示例实现一个简单的混合测速初始化同时配置UTIME例如1ms周期和QCAP单元。高速处理使能UTIME中断。在中断中根据M法计算速度v_m。如果v_m高于某个阈值例如100 RPM则采用v_m作为当前速度值。低速处理使能QCAP中断捕获事件中断。在中断中读取捕获的周期值ΔT根据T法计算速度v_t。如果v_t低于某个阈值则采用v_t作为当前速度值。切换逻辑可以设置一个滞回区间避免在阈值附近频繁切换。在中间区域可以对两种速度进行加权平均。关键寄存器配置片段以C2000 DriverLib风格为例// 1. 配置eQEP引脚为同步输入 GPIO_setPinConfig(GPIO_0_EQEP1A); GPIO_setPinConfig(GPIO_1_EQEP1B); GPIO_setPinConfig(GPIO_2_EQEP1I); // 2. 初始化eQEP模块 EQEP_setDecoderConfig(eqep1_BASE, (EQEP_CONFIG_QUADRATURE | EQEP_CONFIG_NO_SWAP)); // 正交模式不交换AB EQEP_setEmulationMode(eqep1_BASE, EQEP_EMULATIONMODE_RUNFREE); EQEP_setPositionCounterConfig(eqep1_BASE, 0, EQEP_POSITION_RESET_IDX, EQEP_POSITION_MAX_COUNT); // 模式0QPOSMAX最大值 // 3. 配置单位定时器用于M法测速 (1ms周期假设SYSCLK200MHz) uint32_t unitPeriod 200000; // 200MHz * 1ms 200,000 cycles EQEP_setUnitTimerConfig(eqep1_BASE, unitPeriod, 0); EQEP_enableUnitTimer(eqep1_BASE); // 使能UTIME EQEP_enableInterrupt(eqep1_BASE, EQEP_INT_UTIME); // 使能UTIME中断 // 4. 配置捕获单元用于T法测速 EQEP_setCaptureConfig(eqep1_BASE, EQEP_CAPTURE_CLK_DIV_1, EQEP_CAPTURE_UNIT_PERIOD); // 定时器不分频捕获单位周期 EQEP_enableCapture(eqep1_BASE); // 使能捕获 EQEP_enableInterrupt(eqep1_BASE, EQEP_INT_CAPTURE); // 使能捕获中断 // 5. 全局使能eQEP EQEP_enableModule(eqep1_BASE);注意事项速度估算的滤波与延迟无论是M法还是T法原始的速度值都包含大量噪声量化噪声、机械振动噪声。绝对不能把这个原始值直接送给速度环PID。必须进行低通滤波。但滤波会引入相位延迟影响系统动态性能。我的经验是对于M法速度可以使用一个截止频率为速度环带宽5-10倍的一阶低通滤波器。对于T法速度由于其本身更新不规则可以先转换为速度值再进行滤波。更高级的做法是使用观测器如龙贝格观测器、卡尔曼滤波器来估算更平滑、延迟更低的速度信号。5. 高级功能应用位置比较同步与系统集成eQEP模块不仅仅是“读取”位置它还能“主动”触发事件这对于构建同步精密的控制系统至关重要。5.1 位置比较同步输出详解位置比较单元是eQEP模块的“触发器”。你可以设置一个目标位置值QPOSCMP。当位置计数器QPOSCNT运行到与该值匹配时硬件会自动产生一个同步脉冲信号PCSOUT。这个脉冲的极性、宽度都是可编程的。工作流程设置位置比较寄存器QPOSCMP例如设为1000。配置位置比较控制寄存器QPOSCTL选择同步输出引脚可以是索引引脚QEPI或选通引脚QEPS复用为输出设置脉冲宽度PCSPW。当电机转动使得QPOSCNT等于1000时硬件立即在指定引脚上产生一个指定宽度的脉冲。影子寄存器机制QPOSCMP寄存器支持影子寄存器。当QPOSCTL[PSSHDW]1时你写入的是影子寄存器。影子寄存器向活动寄存器加载的时机可以配置PCLOAD00立即加载禁用影子模式。PCLOAD01在位置比较匹配事件发生时加载。这允许你预先设置好下一个比较值在当前比较匹配的瞬间自动更新实现连续、无延迟的位置触发。PCLOAD10在位置计数器归零时加载。这在索引复位模式下非常有用可以在每圈开始时更新比较值。5.2 在伺服控制系统中的典型应用在磁场定向控制FOC的伺服驱动器中电流环、速度环、位置环需要严格按顺序、周期性地执行。eQEP的位置比较同步功能是实现这一点的核心。应用场景三环同步采样与控制硬件连接将eQEP模块的PCSOUT同步输出引脚连接到ADC模块的启动转换SOC触发源输入。控制逻辑假设我们采用位置模式控制周期为100us10kHz。每个控制周期CPU执行位置环PID计算得到目标速度再执行速度环PID计算得到目标电流q轴电流最后执行电流环计算更新PWM占空比。关键点电流环需要最新的相电流采样值。最理想的采样时刻是在PWM波形的“中心点”这样可以有效消除功率器件开关噪声的影响。实现同步我们可以利用eQEP的位置比较功能在每个PWM周期中心点触发ADC采样。假设电机极对数为41000线编码器那么电机每转一圈eQEP会计数1000 * 4 4000个脉冲这是电角度非机械角度。如果我们希望在每个电角度的固定位置触发采样可以设置QPOSCMP为一个递增值。更常见的做法是与PWM模块本身的中断同步。但eQEP的位置比较提供了另一种基于实际转子位置的、绝对精确的触发方式特别适用于需要与转子位置严格同步的应用如无刷直流电机的换相。配置示例在特定位置触发ADC// 假设我们希望当位置计数器到达 2000 时触发ADC采样 EQEP_setPositionCompareConfig(eqep1_BASE, EQEP_POSITION_COMPARE_SYNC_OUT_ON_IDX, 2000); // 同步输出到索引引脚 EQEP_setPositionCompareSyncOutputPulseWidth(eqep1_BASE, 1024); // 设置同步脉冲宽度 (基于SYSCLK周期数) EQEP_enableShadowLoad(eqep1_BASE, EQEP_SHADOW_LOAD_ON_CNTR_ZERO); // 在计数器归零时加载影子寄存器 EQEP_writePositionCompareReg(eqep1_BASE, 2000); // 写入比较值到影子寄存器 EQEP_enableInterrupt(eqep1_BASE, EQEP_INT_POS_COMP); // 使能位置比较中断可选用于软件通知 // 在GPIO配置中需要将索引引脚配置为输出功能以输出同步脉冲 GPIO_setPinConfig(GPIO_2_EQEP1I_SYNC_OUT);5.3 选通事件与索引事件的应用选通事件 (Strobe Event)QEPS引脚通常连接一个物理限位开关或原点传感器。当电机运行碰到限位开关时开关信号触发选通事件硬件瞬间锁存当前QPOSCNT值到QPOSSLAT寄存器并产生中断。CPU在中断中读取这个锁存值就知道限位开关被触发时的精确位置可以立即停止电机或执行回零动作。硬件锁存消除了软件响应延迟带来的位置误差对于高速运动的精准停机至关重要。索引事件 (Index Event)除了用于复位计数器其锁存功能QPOSILAT同样强大。可以用于校。在自由计数模式模式1下使能索引锁存。每转一圈硬件都会锁存一次位置值。在中断中你可以检查本次锁存值与上一次锁存值的差值。理论上正转一圈差值应为4N反转一圈应为-4N。如果差值偏差过大说明可能存在丢脉冲或计数错误系统可以报警。这是一种有效的在线自诊断。6. 实战配置流程、常见问题与调试技巧理论最终要落地到代码。下面是一个从零开始配置eQEP模块的典型流程和避坑指南。6.1 eQEP模块初始化步骤清单系统时钟与引脚检查确认系统时钟SYSCLK配置正确。检查目标eQEP模块的引脚是否与你的编码器硬件连接对应EQEPxA, EQEPxB, EQEPxI, EQEPxS。GPIO配置这是第一步也是容易出错的一步。必须将相关引脚配置为eQEP功能并且输入模式必须选择同步模式GPxQSELn寄存器通常选择“仅与SYSCLK同步”或者“带采样窗的同步”以抗干扰。模块全局初始化选择解码模式正交、方向、上下计数。配置输入信号极性是否反向。配置位置计数器模式PCRM和最大值QPOSMAX。配置索引和选通事件的行为复位、锁存、初始化。功能单元使能与配置速度测量如果使用M法配置并使能单位定时器UTIME设置周期。如果使用T法配置并使能捕获单元QCAP设置捕获边沿。位置比较如果需要配置位置比较寄存器、同步输出引脚和脉冲宽度。看门狗如果需要堵转检测配置看门狗超时周期并使能。中断配置根据需求使能相应中断UTIME中断、捕获中断、位置比较中断、索引中断、选通中断、看门狗中断、上溢/下溢中断。在PIE模块中配置好中断向量表并编写中断服务函数。使能模块最后一步置位eQEP控制寄存器中的使能位。6.2 常见问题与排查实录问题1eQEP模块完全不计数QPOSCNT始终为0。检查顺序引脚配置用示波器或逻辑分析仪直接测量EQEPxA和EQEPxB引脚确认编码器信号是否真的到达了芯片引脚。电压幅值是否在GPIO可接受范围通常是3.3VGPIO模式百分之八十的问题出在这里。确认GPxQSELn寄存器没有配置为异步模式。对于C2000通常设置为0x1带3个采样周期的输入限定或0x2仅同步无限定。模块使能确认QEPCTL寄存器中的QEPEN位或等效的驱动库函数已被置1。解码模式确认QDECCTL[QSRC]设置正确。如果是正交编码器应设置为00正交计数模式。信号质量观察A、B信号波形是否干净是否有严重的振铃或毛刺过长或屏蔽不良的电缆会引入噪声可能导致相位错误或计数异常。可以尝试启用GPIO输入限定器数字滤波器来滤除窄毛刺。问题2计数方向反了电机正转时QPOSCNT在减小。解决方案软件交换最简便的方法是设置QDECCTL[SWAP]位将A、B信号的输入在模块内部交换。硬件交换调换编码器A、B两相信号的接线。检查编码器定义确认编码器厂家定义的“正转”方向是否与你的机械定义一致。有时需要同时调换A、B和取反方向。问题3低速时速度估算值跳动非常大甚至为零。原因分析这极有可能是使用了M法测速且采样周期内位移小于一个最小分辨率。解决方案切换到T法或混合法启用eQEP的捕获单元QCAP在低速时使用测量脉冲周期的方法计算速度。降低采样频率如果控制性能允许适当加长M法的单位时间T例如从100us增加到1ms这样每个采样周期内的位移脉冲数会增加量化误差相对减小。增加编码器分辨率更换线数更高的编码器或使用电子倍频技术但eQEP硬件已固定4倍频。软件滤波对速度值进行低通滤波但要注意滤波带来的相位滞后。问题4高速时位置比较同步信号不稳定或ADC触发时机有偏差。原因分析可能因为比较值更新不及时或者脉冲宽度设置不当。解决方案使用影子寄存器务必使能位置比较寄存器的影子加载功能QPOSCTL[PSSHDW]1并设置为在比较匹配时加载PCLOAD01或在计数器复位时加载PCLOAD10。避免在计数器运行过程中直接写入活动寄存器可能导致比较错过。检查脉冲宽度同步脉冲PCSOUT的宽度PCSPW必须足够ADC模块识别。查阅ADC数据手册确认其触发信号的最小脉宽要求。通常设置几十到几百个SYSCLK周期是安全的。时序验证用示波器同时观察编码器A/B信号、QPOSCNT可以通过DAC输出模拟值观察和PCSOUT同步脉冲确认比较事件发生的物理位置是否精确且稳定。问题5上电后位置值不是从0开始或者寻零不准。解决方案执行寻零程序对于增量编码器上电后位置是未知的。必须执行一个“回零”或“寻零”序列。常见方法是让电机向一个方向低速运动直到碰到限位开关连接QEPS或索引信号QEPI出现。在锁存事件的中断里将当前位置设为一个已知值例如0。利用索引信号如果编码器有索引信号且机械上索引位置就是零点可以配置eQEP为“索引事件复位”模式PCRM00。这样每次索引信号到来硬件都会将计数器复位到已知值0或QPOSMAX。上电后你可以先让电机缓慢转动不到一圈找到第一个索引信号位置就对齐了。电池备份对于需要记忆绝对位置的多圈系统需要使用绝对值编码器并行、SSI、Biss-C等接口或者使用增量编码器电池备份的多圈计数方案。eQEP本身只处理增量信号。调试eQEP示波器和逻辑分析仪是你的最佳伙伴。不要只盯着寄存器值看一定要把关键信号编码器A/B/I、同步输出抓出来与时序图对照很多问题会一目了然。同时充分利用eQEP丰富的状态标志位QEPSTS和中断标志位QFLG在中断服务程序中记录错误发生的情况对于诊断现场偶发问题有奇效。

相关新闻