深入解析eQEP模块:从编码器信号到精准运动控制的核心技术

📅 2026/7/20 17:22:03
深入解析eQEP模块:从编码器信号到精准运动控制的核心技术
1. eQEP模块从编码器信号到精准运动控制的核心桥梁在电机控制、机器人关节定位或者高精度数控机床的伺服驱动里我们总得知道一件事电机轴此刻到底转到了哪里以及它转得有多快。这听起来简单但却是整个闭环控制系统得以稳定、精准运行的基石。增量式编码器作为一种经济高效的旋转或直线位移传感器通过输出两路相位差90度的正交脉冲信号通常称为A相和B相来回答这个问题。然而将这两路看似简单的方波信号实时、无差错地转换为准确的位置和速度数字量如果全靠软件在通用定时器中断里数边沿、判方向不仅会大量消耗宝贵的CPU资源在高速或高精度场景下更可能力不从心引入难以接受的延迟和误差。这时像TI C2000系列微控制器中集成的增强型正交编码器脉冲eQEP模块就扮演了“专用解码芯片”的角色。它不是一个简单的计数器而是一套完整的硬件信号处理系统。我接触过不少从软件解码转向硬件eQEP的工程师最大的感受就是“解放了CPU”。eQEP模块在硬件层面自动完成了正交解码、方向判断、位置累加、索引信号处理、速度计算甚至位置比较输出等所有繁重工作CPU只需要在合适的时机比如定时中断去读取一个已经计算好的位置值或速度值即可。这种硬件的确定性是软件无法比拟的尤其在要求高实时性和高精度的伺服与运动控制领域eQEP几乎是标配。简单来说eQEP模块的核心价值在于它将编码器输出的模拟物理运动脉冲序列无缝、实时地转换为了数字控制系统能够理解和处理的“语言”——精确的位置计数值和速度值。接下来我们就深入其内部看看这套精密的“翻译官”是如何工作的。2. 正交编码器基础与eQEP模块架构解析2.1 增量式编码器的工作原理不只是两路脉冲要理解eQEP必须先吃透它的输入信号从何而来。一个典型的增量式旋转编码器其核心是一个刻有明暗相间栅格的码盘。当电机轴带动码盘旋转时固定在码盘一侧的光电或磁电传感器会检测到光或磁场的变化从而产生电脉冲。为了获取方向信息通常会并排放置两套传感器它们在机械上错开1/4个栅格间距即90度电角度。这就产生了我们熟悉的QEPA和QEPB两路信号。关键点在于相位关系当电机正向通常定义为顺时针旋转时QEPA的上升沿会领先于QEPB的上升沿出现反向旋转时QEPB的上升沿则领先于QEPA。eQEP模块的正交解码单元QDU正是通过实时捕捉和比较这两路信号的边沿跳变顺序来判定当前的旋转方向。除了A、B两相许多编码器还提供一个索引信号QEPI或Z信号。这个信号每转一圈产生一个脉冲用于提供一个绝对的机械零点参考。这对于需要“归零”或进行多圈绝对位置计算的系统至关重要。eQEP模块可以配置为在检测到索引信号时将位置计数器复位或锁存从而建立绝对坐标。注意编码器的“线数”是一个关键参数。例如一个“1000线”的编码器意味着码盘上有1000对明暗栅格。由于eQEP可以对A、B两相的上升沿和下降沿都进行计数即4倍频因此其最终的位置分辨率是4 * 线数。对于1000线编码器电机转一圈位置计数器QPOSCNT会变化4000次。2.2 eQEP模块的功能单元全景图eQEP不是一个单一的黑盒子它由多个协同工作的子单元构成理解这个架构有助于我们后续的配置和调试。其核心功能单元包括输入信号调理与选择在信号进入核心逻辑之前首先经过可编程的输入限定器通常与GPIO复用功能相关用于滤除可能因抖动产生的毛刺。更重要的是eQEP的输入源是可配置的。除了直接从设备引脚EQEPx_A, EQEPx_B获取信号外还可以来自内部交叉开关PWMXBAR或比较器子系统CMPSS的输出。这在一些高级应用如使用旋转变压器Resolver或正余弦Sin/Cos编码器时非常有用因为这些模拟信号经CMPSS处理后可以生成数字正交信号供eQEP解码。正交解码单元这是eQEP的“大脑”。它持续监控QEPA和QEPB的边沿变化根据预设的“正交计数模式”内部生成一个方向信号QDIR和一个计数时钟QCLK。这个QCLK的频率最高可达输入信号频率的4倍4倍频模式从而将编码器的原始分辨率提高了4倍。位置计数器与控制单元这是eQEP的“心脏”。一个32位的位置计数器QPOSCNT根据QDU输出的方向和时钟进行递增或递减。PCCU提供了丰富的控制逻辑例如当计数器达到用户设定的最大值QPOSMAX时是溢出还是归零当检测到索引脉冲时是锁存当前计数值还是复位计数器这些行为都由相应的控制寄存器QEPCTL, QPOSCTL配置。边沿捕获单元这个单元专门用于低速下的高精度速度测量。它不依赖固定的采样时间而是测量编码器产生一个固定数量脉冲例如1个脉冲所花费的时间。在电机极低速运行时单位时间内的脉冲数可能少于1传统测速法会失效而边沿捕获法通过测量脉冲周期来反推速度在低速下依然能保持高精度。单位时间基准与看门狗单位时间基准UTIME用于中高速下的速度测量它提供一个固定的计时周期例如1msCPU在每个周期结束时读取位置计数器的差值来计算速度。看门狗定时器QWDOG则用于监测电机是否堵转或失步——如果超过预设时间没有收到任何编码器脉冲就会触发中断告警。2.3 关键寄存器内存映射速览与eQEP模块交互本质上是读写其对应的控制与状态寄存器。对于AM263P这类器件eQEP的寄存器基址是固定的。作为开发者我们不需要记住每个地址但需要熟悉几个最核心的寄存器及其作用寄存器名称偏移地址主要功能描述QPOSCNT0x00位置计数器。这是最常读的寄存器实时反映当前位置。32位可计数范围巨大。QPOSMAX0x08最大位置值。设置位置计数器的计数上限用于周期位置模式或溢出判断。QPOSCMP0x0C位置比较寄存器。当QPOSCNT等于此值时可触发同步信号或中断用于生成特定位置的触发事件。QEPCTL0x2AeQEP主控制寄存器。配置工作模式如位置计数器复位模式、索引/选通信号触发方式等。QDECCTL0x28正交解码控制寄存器。选择计数模式正交/方向/向上/向下、输入信号极性、是否使能同步输出等。QCAPCTL0x2C边沿捕获控制寄存器。配置捕获单位、分频、使能等用于低速测速。QFLG0x32中断标志寄存器。查看发生了什么事件如索引事件、捕获完成、看门狗超时、上溢/下溢。QCLR0x34中断标志清除寄存器。写1到对应位可清除QFLG中的标志位。QEINT0x30中断使能寄存器。决定哪些事件可以触发CPU中断。在实际编程中TI通常会提供完善的驱动库将这些寄存器操作封装成清晰的API函数。但理解其底层含义对于排查复杂问题和进行高性能优化至关重要。例如当你发现位置读数在某个点附近跳动时可能需要检查QDECCTL中的输入滤波设置当速度计算在低速时不准确时可能需要启用并配置QCAPCTL。3. eQEP核心工作模式深度剖析与配置实战理解了架构我们就可以深入eQEP最核心的几个工作模式。不同的应用场景需要不同的配置选对模式是成功的第一步。3.1 位置计数器的四种灵魂模式位置计数器QPOSCNT的行为模式由QEPCTL[PCRM]位域控制。这四种模式决定了计数器如何响应“一圈”或“一个周期”的概念。3.1.1 模式0在索引事件复位这是最直观的模式。每当编码器的索引脉冲QEPI到来时位置计数器QPOSCNT会被复位。复位值取决于方向正向旋转时复位到0反向旋转时复位到QPOSMAX。应用场景每圈绝对位置测量。例如一个旋转工作台每一圈都需要从一个固定的“零点”开始计算位置。索引脉冲就是这个零点。计数器会从0开始累加直到下一个索引脉冲到来时再次归零。QPOSMAX在此模式下通常设置为4 * 编码器线数 - 1例如1000线编码器设为3999但复位逻辑不依赖它它仅用于下溢判断。配置要点需要确保编码器的索引信号是“门控”的即其边沿与A/B相的某个边沿对齐否则可能在索引信号到来时A/B相恰好变化导致相位错误标志置位。实操心得在这种模式下QEPSTS[PCEF]位置计数器错误标志非常有用。如果索引事件发生时QPOSCNT的值既不是0也不是QPOSMAX该标志位会置1。这通常意味着编码器存在丢脉冲、多计数或信号干扰问题是诊断硬件连接或信号质量的好工具。3.1.2 模式1在最大位置复位在此模式下索引信号不再复位计数器。计数器在达到用户设定的最大值QPOSMAX后下一个正向时钟会使其归零上溢在达到0后下一个反向时钟会使其跳变到QPOSMAX下溢。应用场景多圈绝对位置测量或线性位移测量。例如一个丝杠驱动的直线模组编码器直接安装在电机上。我们关心的是从启动开始的总位移而不是每圈的相对位置。通过设置一个足够大的QPOSMAX如0xFFFFFFFF计数器可以连续累加数十亿个脉冲实现超长行程测量。当需要“圈数”信息时可以用总脉冲数除以每圈脉冲数来计算。配置要点QPOSMAX的值需要根据实际物理行程和编码器分辨率精心计算。要预留足够的余量防止在高速下短时间内发生多次溢出/下溢导致位置跟踪丢失。3.1.3 模式2在第一个索引事件复位这是模式0和模式1的混合。仅第一个索引脉冲会复位计数器行为同模式0之后的索引脉冲不再复位计数器计数器将按照模式1在QPOSMAX处循环的方式运行。应用场景需要上电后寻找一次机械零点之后进行多圈绝对位置测量的系统。例如伺服驱动器上电后驱动电机缓慢旋转直到找到索引脉冲将当前位置设为绝对零点。之后在运行过程中无论电机正反转多少圈位置计数器都连续计数提供相对于那个上电零点的绝对位置。避坑指南务必在软件中记录“上电寻零”这个状态。在找到第一个索引脉冲并完成复位后要将系统状态切换为“已归零”否则可能会错误地期待后续索引脉冲也有复位功能。3.1.4 模式3在单位时间超时事件复位此模式专为频率速度测量设计。位置计数器不再用于累加位置而是被单位时间基准UTIME周期性复位。在每个UTIME周期内计数器记录收到的编码器脉冲数。周期结束时脉冲数被锁存计数器复位CPU读取该值即可计算出该周期内的平均速度。应用场景中高速速度测量。这是最经典的速度测量方法计算简单直接速度 (本次位置 - 上次位置) / 单位时间。关键计算单位时间QUPRD的设置决定了速度更新的频率和分辨率。周期太短在低速时可能一个脉冲都采不到速度读数为0周期太长速度反馈延迟大影响动态性能。通常需要根据最低速要求来设计QUPRD (1 / 最低转速对应的脉冲频率)。3.2 正交解码单元的工作模式选择QDU的工作模式由QDECCTL[QSRC]位选择决定了QEPA和QEPB信号如何被解读。3.2.1 正交计数模式这是最常用的模式用于标准的增量式编码器。eQEP内部对A、B两相的四个边沿A上升、A下降、B上升、B下降都进行解码产生4倍频的计数时钟QCLK。方向由两相信号的相位关系决定。方向判断逻辑硬件内部有一个状态机参考技术手册中的状态图。简单记法当QEPA的边沿变化领先于QEPB时例如A上升时B为低A下降时B为高通常判定为正向QPOSCNT递增。相位错误如果A、B两相同时发生跳变这在正常正交信号中不应发生QFLG[PHE]标志位会被置起。这通常意味着编码器信号受到严重干扰、电源不稳或接线错误。3.2.2 方向计数模式有些传感器或早期编码器直接输出“方向”和“时钟”两路信号。此时应将时钟信号接QEPA方向信号接QEPB。当方向信号为高时QEPA的每个上升沿使计数器递增方向为低时则递减。应用场景接驳非标准正交输出的传感器或某些数字输出的直线位移传感器。3.2.3 向上/向下计数模式这两种模式将QEPA作为唯一的时钟源方向被硬连线为向上或向下。通过配置QDECCTL[XCR]位可以选择在QEPA的单个边沿或两个边沿计数从而实现2倍频。应用场景频率测量或脉冲计数。例如测量一个单通道转速传感器的频率。此时QEPB引脚可以悬空或用作其他GPIO功能。重要提示在正交计数模式下eQEP对输入信号的抖动非常敏感。务必启用GPIO模块的输入限定器并设置合适的采样窗口周期以滤除可能因电气噪声引起的毛刺否则会导致额外的计数错误。4. 双管齐下基于eQEP的高精度速度测量策略速度测量是运动控制的另一个核心。eQEP提供了两种互补的方法分别针对高速和低速场景进行优化从而实现全速度范围内的精确测速。4.1 方法一基于单位时间的位置差法M法测速这是最直观的方法适用于中高速。原理利用eQEP的单位时间UTIME基准产生一个固定周期T的中断。在每次中断服务程序中读取当前的位置计数器值x(k)并与上一次的值x(k-1)相减得到在时间T内走过的脉冲数ΔX。计算公式速度 v ΔX / TeQEP实现配置位置计数器为“单位时间超时复位”模式PCRM11。设置QUPRD寄存器定义单位时间T。使能单位时间超时中断UTEINT。在中断中锁存的位置差值可以直接反映速度。或者在PCRM01模式下软件自己维护一个last_position变量在定时中断里做减法。优点计算简单CPU开销小在高速时精度高。点在低速时误差大。例如编码器分辨率是4000脉冲/转速度计算频率是1kHzT1ms。当电机转速为15 RPM时每毫秒产生的脉冲数为(15转/60秒) * 4000脉冲/转 * 0.001秒 1脉冲。此时速度分辨率就是1个脉冲对应的速度即15 RPM。如果转速低于15 RPMΔX经常为0测出的速度就是0或者在有/无1个脉冲之间剧烈跳动完全无法使用。4.2 方法二基于固定位置间隔的时间差法T法测速这种方法适用于低速。原理不固定时间而是固定一个位置变化量ΔX例如1个脉冲。测量编码器产生这ΔX个脉冲所花费的时间ΔT。计算公式速度 v ΔX / ΔTeQEP实现这正是边沿捕获单元QCAP的用武之地。配置QCAPCTL寄存器设置捕获定时器QCTMR的时钟分频并选择捕获单位例如每1个QCLK边沿捕获一次。当编码器产生指定数量的边沿后QCTMR中的值就会被锁存到QCTMRLAT寄存器并产生中断。这个值就代表了产生ΔX个脉冲所花费的“机器周期”数结合系统时钟频率即可算出ΔT。优点在低速时精度极高。因为无论速度多慢我都是测量固定数量脉冲的时间这个时间可以测得很准。缺点在高速时ΔT变得非常小受限于定时器的时钟分辨率和中断响应延迟相对误差会变大。同时高速时中断频率会非常高增加CPU负担。4.3 混合测速策略与eQEP的自动化支持在实际系统中电机需要从极低速甚至零速运行到高速。单一的M法或T法都无法满足全范围要求。因此混合测速策略成为必然选择低速区使用T法边沿捕获。高速区切换到M法单位时间中断。切换点需要根据编码器分辨率、系统时钟和精度要求计算一个阈值速度。例如当T法测出的周期ΔT小于某个值时意味着速度已足够高软件自动切换到M法。eQEP的便利性eQEP的硬件同时支持这两种机制。你可以同时使能单位时间中断和边沿捕获中断。在软件中可以根据当前锁存的QCTMRLAT值代表周期来判断当前处于哪个速度区间并决定使用哪个中断源的数据来计算速度甚至可以动态关闭不用的中断源以节省资源。这种硬件支持使得实现全范围无盲区速度测量变得非常高效。实操心得速度计算中的“量化误差”无论是M法还是T法都存在固有的量化误差。M法的误差来源于“脉冲个数的整数化”T法的误差来源于“计时周期的整数化”。理解这一点对评估系统精度至关重要。例如在M法中最低可分辨速度就是1个脉冲 / T。在设计时应根据系统最低速度要求反推最大的可接受单位时间T。5. 高级功能与实战配置指南掌握了核心的位置和速度测量eQEP还有一些高级功能可以大幅提升系统性能和集成度。5.1 位置比较与同步输出这是一个非常实用的功能用于在电机到达特定位置时触发一个同步事件。原理用户预先在QPOSCMP寄存器中设置一个目标位置值。硬件持续将当前位置QPOSCNT与QPOSCMP进行比较。当两者匹配时eQEP模块可以内部产生一个同步脉冲信号。应用触发ADC采样在电机控制中为了获得最佳的电流环控制效果需要在特定的转子位置例如每60度电角度进行相电流采样。可以将电角度对应的编码器位置值写入QPOSCMP利用产生的同步信号去触发ADC开始转换实现硬件级同步精度远高于软件定时。生成精准的PWM事件该同步信号可以连接到PWM模块用于在特定位置更新PWM占空比或相位实现与位置严格同步的功率输出。配置步骤在QPOSCTL寄存器中使能位置比较功能。将目标位置值写入QPOSCMP寄存器注意有时需要写入影子寄存器以避免运行时毛刺。配置QDECCTL[SOEN]和[SPSEL]选择将同步信号输出到哪个引脚通常是索引或选通引脚复用。使能位置比较中断如果需要在匹配时通知CPU。5.2 索引与选通事件的应用索引和选通输入QEPI和QEPS除了用于复位和锁存位置计数器还有更多用途。索引信号归零与绝对定位如上文所述是建立机械零点的关键。多圈计数参考在模式1最大位置复位下虽然索引不复位计数器但可以配置为在索引边沿锁存当前计数值到QPOSILAT。软件可以读取这个值结合溢出次数计算出精确的、相对于某个索引点的多圈绝对位置。选通信号外部事件触发可以连接一个限位开关、光电传感器或外部按钮。当物体移动到传感器位置时选通信号触发eQEP立即锁存当前的位置到QPOSSLAT寄存器。这对于记录特定事件发生时的位置非常有用例如记录机械臂抓取物品的瞬间位置。多轴同步在多轴协同系统中一个主轴的选通信号可以连接到其他从轴的选通输入实现多个编码器在同一个物理事件发生时同时锁存位置保证位置采样的严格同步。5.3 典型配置流程与代码片段思路以下是一个针对标准增量式编码器实现位置测量和单位时间法测速的初始化流程概述GPIO与时钟配置将对应的GPIO引脚复用为eQEP功能QA, QB, QI。配置输入限定器参数采样周期、阈值滤除信号抖动。使能eQEP模块的时钟。正交解码单元配置设置QDECCTL[QSRC] 0选择正交计数模式。根据编码器接线和机械方向决定是否设置SWAP位来交换A、B相。配置输入信号极性QAP, QBP, QIP确保上升沿对应有效的信号跳变。位置计数器配置根据应用选择位置计数器模式QEPCTL[PCRM]。例如对于多圈绝对位置选择模式1。设置QPOSMAX值对于模式1可设为0xFFFFFFFF。配置索引事件行为QEPCTL[IEL]例如选择在索引上升沿锁存位置。速度测量配置M法设置QEPCTL[PCRM]11启用单位时间复位模式。根据所需速度更新率计算并设置QUPRD值。使能单位时间超时中断UTEINT。T法配置QCAPCTL寄存器设置边沿捕获的单位如每1个事件和捕获定时器预分频。使能捕获事件中断CEIINT。中断配置在中断控制器中使能eQEP对应的中断线。编写中断服务程序。在M法的单位时间中断里读取QPOSCNT计算速度差在T法的捕获中断里读取QCTMRLAT计算脉冲周期。启动eQEP最后设置QEPCTL[PHEN] 1使能位置计数器开始计数。// 伪代码示例初始化eQEP1正交模式单位时间法测速 void Init_eQEP1(void) { // 1. 引脚复用和输入限定配置 (调用GPIO驱动API) GPIO_setPinConfig(GPIO_0_EQEP1A); GPIO_setQualificationPeriod(GPIO_0_EQEP1A, SYSTEM_CLOCK_FREQ / 1000000); // 例1us滤波 // 2. 配置解码器 EQEP_setDecoderConfig(EQEP1_BASE, EQEP_CONFIG_QUADRATURE, EQEP_CONFIG_NO_SWAP); // 正交模式不交换AB相 EQEP_setInputPolarity(EQEP1_BASE, false, false, false); // 假设信号均为高电平有效 // 3. 配置位置计数器连续累加模式 EQEP_setPositionCounterConfig(EQEP1_BASE, EQEP_POSITION_RESET_MAX_POS, 0xFFFFFFFF); EQEP_setIndexLatchConfig(EQEP1_BASE, EQEP_LATCH_ON_RISING_EDGE); // 索引上升沿锁存 // 4. 配置单位时间基准用于M法测速假设速度计算频率为1kHz uint32_t unitPeriod SYSTEM_CLOCK_FREQ / 1000; // 计算1ms对应的周期数 EQEP_setUnitPeriod(EQEP1_BASE, unitPeriod); EQEP_enableUnitTimerInterrupt(EQEP1_BASE); // 使能单位时间中断 // 5. 配置并启用中断 Interrupt_register(INT_EQEP1, eQEP1_ISR); Interrupt_enable(INT_EQEP1); EQEP_enableInterrupt(EQEP1_BASE, EQEP_INT_UTIME); // 在eQEP模块内使能单位时间中断源 // 6. 启动eQEP模块 EQEP_enableModule(EQEP1_BASE); } // 中断服务程序示例计算速度 volatile int32_t lastPos 0; volatile float speed_rpm 0.0; void eQEP1_ISR(void) { uint32_t status EQEP_getInterruptStatus(EQEP1_BASE); EQEP_clearInterruptStatus(EQEP1_BASE, status); if (status EQEP_INT_UTIME) { int32_t currentPos EQEP_getPosition(EQEP1_BASE); int32_t deltaPos currentPos - lastPos; // 计算脉冲差 // 处理计数器溢出/下溢此处简化实际需考虑32位溢出 // 计算速度deltaPos (脉冲) / unitPeriod (周期数) * (系统时钟频率) / (编码器每转脉冲数) * 60 speed_rpm (float)deltaPos / (float)unitPeriod * SYSTEM_CLOCK_FREQ / PULSES_PER_REV * 60.0; lastPos currentPos; } }6. 常见问题排查与调试技巧实录即使按照手册配置在实际硬件调试中仍会遇到各种问题。以下是我在多年项目中总结的一些典型问题及排查思路。6.1 位置计数器不计数或计数方向错误这是最常见的问题。症状电机转动但QPOSCNT寄存器值不变。排查步骤信号层面使用示波器直接测量连接到MCU引脚的QEPA和QEPB信号。确保有正确的、幅值足够的方波且两者存在90度相位差。检查电源和地线是否良好编码器供电是否稳定。GPIO配置确认GPIO已正确复用为eQEP功能而非普通的输入。检查输入限定器是否设置得过于“苛刻”例如采样窗口过宽可能滤除了所有有效信号。一个快速验证方法是暂时禁用输入限定。极性配置检查QDECCTL中的QAP和QBP位。如果编码器输出是低电平有效的开路集电极信号可能需要设置极性反转。方向错误通常也可以通过交换A、B相线序或设置SWAP位来解决。模式配置确认QDECCTL[QSRC]设置正确。如果编码器是标准正交输出却配置成了方向计数模式自然不会计数。6.2 位置读数存在偶尔的“跳变”或“回滚”症状位置值大体正确但偶尔会突然增加或减少一个固定值如1, 2, 3或者向反方向跳变一下。原因与解决相位错误这是最可能的原因。检查QFLG[PHE]标志位是否被置位。相位错误意味着A、B两相在同一时刻发生了跳变导致解码状态机混乱。根本原因通常是信号噪声。解决方案包括加强硬件滤波在编码器信号线上靠近MCU端增加RC低通滤波。优化软件滤波适当增加GPIO输入限定器的采样周期。检查布线编码器信号线应使用双绞线并远离电机动力线、PWM线等噪声源。计数器溢出/下溢处理不当在连续计数模式下如果软件没有正确处理32位计数器的溢出从0xFFFFFFFF到0x0或下溢从0x0到0xFFFFFFFF在计算位置差时会出现巨大跳变。软件中必须使用有符号的、足够位宽如64位的变量来维护“扩展位置”或者及时进行溢出补偿计算。6.3 低速时速度测量为零或不准确症状电机在低速旋转但用M法计算出的速度时常为0或者数值极不稳定。分析这是M法测速的固有缺陷。在低速下单位时间内的脉冲数可能小于1导致量化误差极大。解决启用边沿捕获单元进行T法测速。配置QCAPCTL设置一个合适的捕获单位例如CCNT1即每个QCLK边沿捕获一次。在捕获中断中读取QCTMRLAT寄存器值该值代表了两个编码器边沿之间的系统时钟周期数。计算速度速度 (系统时钟频率 / QCTMRLAT) / (每转脉冲数) * 60。注意在极低速时两次捕获间隔可能很长中断频率低需确保看门狗不会误触发。6.4 索引信号不起作用症状配置了索引复位或锁存但电机转过索引点时QPOSCNT没有复位QPOSILAT也没有更新。排查信号确认用示波器确认索引脉冲信号是否正常到达MCU引脚其脉宽和边沿是否符合要求。极性配置检查QDECCTL[QIP]位索引信号的极性是否设反。事件配置检查QEPCTL[IEL]寄存器。如果想在上升沿复位需设置为00想在上升沿锁存需设置为01。两者功能不同别混淆。模式兼容性在“位置计数器在索引事件复位”模式PCRM00下IEL配置是被忽略的因为硬件强制在索引事件标记点复位。只有在其他模式下IEL配置才用于控制锁存行为。6.5 看门狗频繁超时症状QFLG[WTO]标志位经常置位即使电机在正常转动。原因看门狗定时器QWDTMR在每次有效的编码器事件QCLK时会被重置。如果超过QWDPRD设定的时间没有编码器事件就会超时。解决检查电机是否真的停转或堵转。调整看门狗周期根据系统最低运行速度来设置QWDPRD。如果电机最低运行速度为v_minRPM编码器每转脉冲数为P则最小脉冲间隔时间为T_min 60 / (v_min * P)秒。看门狗周期应略大于此值。设置得过小会导致正常低速运行时误报警。检查信号完整性如果信号有断续也会导致看门狗复位。