C2000 eQEP模块全解析:从正交编码器原理到高精度速度估算实战
1. 项目概述从编码器信号到精准速度估算在伺服电机、机器人关节或者任何需要精确位置和速度控制的场合编码器就是系统的“眼睛”。它实时告诉控制器“我现在在哪里正在以多快的速度移动”。然而这颗“眼睛”输出的原始信号——两路相位差90度的正交脉冲——并不能直接被CPU理解。如何高效、精准地将这些脉冲信号转换为控制器能直接使用的数字位置和速度值是嵌入式电机控制工程师每天都要面对的挑战。我接触过不少项目从简单的步进电机定位到复杂的高性能伺服驱动编码器信号处理都是核心环节。早期用通用定时器或外部逻辑芯片来解码不仅代码复杂资源占用高而且在处理低速蠕动或高速旋转时的速度估算精度总是不尽如人意。直到深入使用了德州仪器C2000系列MCU内置的增强型正交编码器脉冲eQEP模块才真正体会到硬件专用外设带来的便利与强大。这个模块远不止是一个简单的计数器它集成了正交解码、位置管理、速度测量乃至位置比较输出等一整套功能堪称电机控制领域的“瑞士军刀”。本文将从一个一线工程师的视角彻底拆解eQEP模块的工作原理与应用。我们不仅会看懂数据手册里的框图更要弄明白每个功能单元在实际项目中如何配置、为何这样配置以及如何避开那些手册里可能没明说、但实际调试中一定会踩到的“坑”。核心目标就一个让你拿到一套经过实战检验的、从信号接入到高精度速度估算的完整解决方案并能直接应用到你的下一个电机控制项目中。2. 正交编码器与eQEP模块核心原理拆解2.1 正交编码器信号的源头要玩转eQEP首先得彻底理解它的输入——正交编码器。你可以把它想象成一个精密的“里程表”。码盘旋转时通过光电或磁电效应会产生两路方波信号通常称为A相QEPA和B相QEPB。这两路信号的核心秘密在于它们的相位关系。当电机正转顺时针时A相信号的上升沿会领先于B相信号的上升沿90度反转时则A相滞后于B相90度。eQEP模块的正交解码单元QDU正是通过实时监测这两路信号的边沿跳变顺序来判断运动方向的。一个关键技巧很多编码器标称的“线数”如500线/转指的是码盘上明暗刻线的数量。每一个明暗周期A相或B相会输出一个完整的脉冲周期。但在正交解码的4倍频模式下系统会对A、B相的每个上升沿和下降沿都进行计数。因此最终的位置分辨率是线数的4倍。一个500线的编码器在eQEP中会被当作2000个计数每转CPR来使用。这个细节直接影响你后续设置位置计数器最大值QPOSMAX和计算速度。2.2 eQEP模块架构总览C2000的eQEP模块是一个高度集成的硬件外设其结构远比你想象的要丰富。它不是简单的输入捕获而是一个包含多个协同工作单元的“处理流水线”。理解这个架构是进行正确配置的基础。信号输入与调理前端这是信号进入芯片的第一关。除了基本的GPIO复用配置关键点在于输入同步与滤波。编码器信号可能来自长线缆带有毛刺。eQEP的输入可以配置同步模式和数字滤波器通过GPxQSELn和GPyCTL寄存器这对于抑制噪声、防止误计数至关重要。务必记住eQEP输入不能配置为异步模式否则在高速下会因时序问题导致计数错误。核心处理单元正交解码单元QDU负责将A、B相原始信号转换为标准的方向QDIR和时钟QCLK信号。它支持四种计数模式这是其灵活性的体现。位置计数器与控制单元PCCU包含一个32位的位置计数器QPOSCNT是位置信息的核心。它支持多种复位和锁存模式并与索引Index和选通Strobe信号联动实现绝对位置寻零或特定位置触发。边沿捕获单元QCAP这是实现高精度低速测量的“神器”。它包含一个独立的定时器QCTMR用于测量固定数量编码器脉冲之间的时间间隔从而直接计算低速时的瞬时速度。单位时间基准UTIME提供一个固定的时间基准用于常规的M/T法速度计算。它就像一个节拍器每隔固定时间如1ms产生一个中断让你去读取位置计数器的差值。看门狗定时器QWDOG用于电机堵转检测。如果超过预设时间没有编码器脉冲则触发错误标志提示系统可能发生机械卡死。输出与同步位置比较单元可以让你设置一个目标位置值QPOSCMP当实际位置QPOSCNT匹配时产生一个同步脉冲PCSOUT。这个功能极其有用例如可以用于在特定位置触发ADC采样实现电流环的精准同步或者生成一个用于驱动其他外设的同步信号。2.3 两种速度估算方法的本质与权衡速度估算的精度直接决定了控制系统的性能。eQEP模块的巧妙之处在于它在硬件层面原生支持了两种经典的速度估算方法并能根据速度自动切换。方法一基于固定时间间隔的M/T法对应公式21这是最直观的方法。你设置一个固定的采样周期T例如通过UTIME单元设置1ms中断。在每个周期结束时读取当前位置值x(k)并与上一个周期的位置值x(k-1)相减得到ΔX。速度 v ΔX / T。优点高速时精度高计算简单对CPU负载小。致命缺点低速时分辨率极差。举个例子对于一个2000 CPR的编码器在400Hz采样率下位置最小变化是0.5个计数。这意味着速度低于 (0.5计数/转) * (400次/秒) * (60秒/分) 12 RPM时测出的速度经常会是0。这对于需要低速平稳运行或高精度定位的应用是无法接受的。方法二基于固定位置间隔的T法对应公式22由QCAP单元实现这种方法反其道而行之。我们不再固定时间而是固定位置变化量X例如设置为4个编码器计数即一个完整的正交周期。QCAP单元会精确测量位置变化这固定X个计数所花费的时间ΔT。速度 v X / ΔT。优点低速时精度极高。因为ΔT可以测量得非常精确依赖于系统时钟在极低转速下也能得到有效的速度值。缺点高速时ΔT变得非常小计时器的分辨率限制了测量精度。同时如果速度过高ΔT可能小于一个系统时钟周期导致捕获溢出。eQEP的解决方案在软件中实现一个速度估算器。在低速区间例如低于50 RPM使用QCAP单元提供的ΔT进行T法计算当速度超过某个阈值时自动切换到基于UTIME中断的M/T法。这样就在全速度范围内都获得了最优的估算精度。这个切换逻辑和阈值选择是需要你在软件中精心设计和调试的。3. eQEP模块配置与核心功能实战3.1 硬件引脚配置与初始化流程配置eQEP的第一步是正确连接硬件信号并初始化GPIO。这里有几个容易出错的细节// 以TI C2000 F28003x为例配置GPIO0和GPIO1为eQEP1的A、B相 // 1. 首先禁用引脚上拉根据外部电路决定通常编码器有上拉则禁用内部上拉 GpioCtrlRegs.GPAPUD.bit.GPIO0 1; // 禁用GPIO0上拉 GpioCtrlRegs.GPAPUD.bit.GPIO1 1; // 禁用GPIO1上拉 // 2. 配置GPIO为外设功能**注意顺序先配GMUX再配MUX避免毛刺** GpioCtrlRegs.GPAGMUX1.bit.GPIO0 1; // 将GPIO0配置为外设功能eQEP1A GpioCtrlRegs.GPAGMUX1.bit.GPIO1 1; // 将GPIO1配置为外设功能eQEP1B GpioCtrlRegs.GPAMUX1.bit.GPIO0 2; // 选择eQEP1A功能 GpioCtrlRegs.GPAMUX1.bit.GPIO1 2; // 选择eQEP1B功能 // 3. 配置输入限定滤波这是抗干扰的关键推荐使用带采样的同步模式。 // 假设系统时钟SYSCLK为100MHz我们设置6个采样周期滤除宽度小于60ns的毛刺。 GpioCtrlRegs.GPAQSEL1.bit.GPIO0 1; // 对GPIO0(eQEP1A)使用6个采样周期的同步模式 GpioCtrlRegs.GPAQSEL1.bit.GPIO1 1; // 对GPIO1(eQEP1B)同样处理关键避坑点数据手册中特别警告在eQEP已经运行即模块使能时绝对不要去动态修改输入信号源选择寄存器QEPSRCSEL。这会导致输入信号产生不可预测的跳变可能引发位置计数器疯狂计数或方向误判。正确的做法是在初始化阶段先配置好所有GPIO和eQEP源选择最后再使能eQEP模块。3.2 正交解码单元QDU的四种模式深度解析QDU的QDECCTL[QSRC]位决定了位置计数器如何工作。选对模式是第一步。3.2.1 正交计数模式QSRC00这是最常用的模式用于标准正交编码器。eQEP内部的状态机如图23-7会跟踪A、B相的四个状态00, 01, 11, 10在每次状态变化时根据方向递增或递减计数器。它实现了4倍频。方向判断状态机序列为00-01-11-10-00...是正转00-10-11-01-00...是反转。方向状态实时反映在QEPSTS[QDF]位。相位错误处理如果A、B相同时跳变如从00直接到11这属于非法状态QFLG[PHE]相位错误标志会被置位。在实际中这通常由严重的电气噪声或编码器故障引起。你的软件应该监控这个标志并做出相应的错误处理如报警、停机。3.2.2 方向计数模式QSRC01有些编码器或传感器直接输出“脉冲方向”信号。此时脉冲接QEPA方向电平接QEPB高电平为正低电平为负。在此模式下位置计数器在QEPA的每个上升沿根据QEPB的电平进行加/减计数。注意此模式没有倍频一个脉冲对应一个计数。3.2.3 增计数/减计数模式QSRC10/11这两种模式将位置计数器变成一个简单的频率测量器。在增计数模式下QEPA的每个边沿或上升沿取决于QDECCTL[XCR]配置使计数器加1减计数模式则使其减1。这通常用于测量单个脉冲信号的频率。重要提醒在此模式下务必确保QEPB引脚没有信号输入否则可能干扰计数。模式选择心得绝大多数电机控制应用都使用正交计数模式。只有在使用特定类型的直线光栅尺或旋转变压器数字转换器RDC输出“脉冲方向”时才考虑方向计数模式。增/减计数模式更多用于通用频率测量场景。3.3 位置计数器PCCU的工作模式与实战应用位置计数器是eQEP的核心其工作模式通过QEPCTL[PCRM]配置决定了它如何对待“一圈”这个概念。3.3.1 索引事件复位模式PCRM00这是增量式编码器结合索引信号实现“每圈绝对位置”的经典模式。在此模式下每当索引Index信号有效边沿到来时位置计数器QPOSCNT会被复位正转时复位到0反转时复位到QPOSMAX通常设置为4 * 线数 - 1如1999。应用场景伺服电机上电后需要寻找机械零点Z脉冲。找到后此后每一圈的位置都是从该零点开始计算的绝对位置避免了多圈累计误差。配置要点需要正确设置QPOSMAX。对于1000线编码器4000 CPRQPOSMAX应设为3999。同时索引信号的电平极性需要通过QDECCTL[QIP]位匹配你的编码器。3.3.2 最大位置复位模式PCRM01这是多圈绝对位置计数或无限累加模式。位置计数器自由累加仅在向上溢出超过QPOSMAX时回到0或在向下溢出低于0时回到QPOSMAX。索引信号在此模式下仅用作锁存或初始化不复位计数器。应用场景需要记录电机总转数的场合或者编码器本身是绝对式多圈编码器其输出已经是经过插补的正交信号。调试技巧在此模式下你可以通过监控QFLG寄存器中的上溢QFLG[COEF]或下溢QFLG[UEOF]标志来软件扩展一个64位甚至更高位的位置计数器实现超长行程的绝对位置记录。3.3.3 首次索引事件复位模式PCRM10这是上述两种模式的混合。仅在第一次遇到索引信号时复位计数器之后便像PCRM01模式一样自由循环。这适用于只需要在启动时寻找一次零点之后进行相对位置控制的场景。3.3.4 单位时间超时复位模式PCRM11此模式专为速度测量设计。位置计数器会在每个单位时间事件UTIME溢出时被复位。这样在每个速度计算周期内QPOSCNT的值就直接代表了该周期内的位移增量ΔX省去了软件做减法的步骤。这是实现M/T法速度估算的硬件优化。锁存功能的应用除了复位索引和选通Strobe信号还可以配置为锁存事件。例如你可以设置当索引信号上升沿时将当前的QPOSCNT值锁存到QPOSILAT寄存器。这有什么用可以用来做编码器误差自检。对于一个1000线的编码器在索引复位模式下从索引脉冲到下一个索引脉冲之间QPOSCNT应该正好从0计数到3999再回到0。如果锁存的值不是0或3999说明中间有计数丢失或增加QEPSTS[PCEF]位置错误标志会置位。这是一个非常强大的诊断功能。3.4 边沿捕获单元QCAP实现高精度低速测量当电机低速运行时M/T法失效QCAP单元就派上了用场。它的原理是测量走过固定位置步长X所花费的时间ΔT。3.4.1 关键寄存器配置QCAPCTL[UPPS]单位位置事件预分频。这个参数定义了你的“固定位置步长X”。它是对QCLK即4倍频后的编码器时钟进行分频。例如UPPS0010表示每4个QCLK即一个完整的正交周期产生一个单位位置事件UPEVNT。对于500线编码器这对应着1/500转的位移。X 4 * (2^UPPS)个基础计数。QCAPCTL[CCPS]捕获时钟预分频。这是对系统时钟SYSCLK进行分频作为捕获定时器QCTMR的时钟源。它的选择决定了ΔT的时间分辨率。分辨率越高分频系数越小低速测量越精确但定时器溢出上限越低。需要在精度和量程间权衡。QEPCTL[QCLM]锁存模式。建议设置为1这样在单位时间事件UTOUT发生时QPOSCNT位移ΔX、QCTMR和QCPRD时间ΔT会自动锁存到对应的*LAT寄存器中。软件只需在UTIME中断中读取这些锁存值计算速度即可保证了数据在同一个时刻被捕获避免异步读取带来的误差。3.4.2 低速速度计算实操假设配置如下编码器500线2000 CPRUPPS0010每4个QCLK一个事件即X4个计数CCPS配置使捕获时钟频率为F_cap SYSCLK / 8 12.5MHz假设SYSCLK100MHz。 在UTIME中断服务程序中检查QEPSTS[UPEVNT]标志是否置位表示有新数据。读取锁存的捕获周期值delta_T_count QCPRDLAT。计算真实时间delta_T delta_T_count / F_cap。计算速度速度 (计数/秒) X / delta_T。转换为转速转速 (RPM) (速度 / 2000) * 60。清除UPEVNT标志。严重警告数据手册的“CAUTION”部分明确指出UPPS预分频器不能动态修改这意味着你无法在运行时根据速度切换不同的位置步长X。你必须在初始化时确定一个合适的值并在整个运行过程中保持不变。通常选择一个中等大小的值如对应1-2个正交周期作为低速测量的基准。CCPS可以在捕获单元禁用时动态修改但这通常也不必要。3.5 位置比较单元与同步输出这是一个高级但极其有用的功能用于生成与位置严格同步的触发信号。工作原理你设置一个目标位置比较值QPOSCMP。当位置计数器QPOSCNT的值与QPOSCMP匹配时硬件会自动产生一个同步事件PCEVNT并可以输出一个脉冲PCSOUT到索引或选通引脚通过QDECCTL[SPSEL]选择。典型应用一电流采样同步。在磁场定向控制FOC中希望在每个电角度周期的特定位置例如0度进行相电流采样。你可以将QPOSCMP设置为对应0度电角度的位置值并启用同步输出。将该输出连接到ADC的启动转换SOC触发源即可实现电流采样与转子位置的硬同步消除软件延迟带来的控制误差。典型应用二精准输出事件。在需要与机械位置同步执行某个动作的场合比如在旋转到某个角度时打开激光、喷胶等。使用位置比较输出触发一个外部中断或直接驱动一个IO其精度和实时性远高于软件查询。配置技巧影子寄存器使能QPOSCTL[PCSHDW]将QPOSCMP配置为影子寄存器模式。这样你可以在任何时候安全地更新目标位置值而不会干扰正在进行的比较操作。影子值会在下一次比较匹配或位置计数器归零时由QPOSCTL[PCLOAD]决定自动加载到活动寄存器。脉冲宽度通过QPOSCTL[PCSPW]可以设置输出脉冲的宽度以SYSCLK周期为单位确保它能被下游电路可靠捕获。4. 全速域速度估算方案实现与调试4.1 软件架构设计双模式平滑切换基于eQEP硬件特性我们可以设计一个鲁棒的全速域速度估算器。其核心是一个状态机根据当前估算的速度值决定使用哪种数据源和算法。typedef struct { float speed_rpm; // 当前估算速度 (RPM) int32_t pos_count_prev; // 上一周期位置 (用于M/T法) uint32_t cap_time_prev; // 上一周期捕获时间 (用于T法校验) enum {SPEED_HIGH, SPEED_LOW, SPEED_TRANSITION} est_mode; // 估算模式 float threshold_high_to_low; // 切换到低速模式的阈值 (RPM) float threshold_low_to_high; // 切换到高速模式的阈值 (RPM)可设滞环防抖 float filter_alpha; // 一阶低通滤波器系数 } EqepSpeedEstimator; void EQEP_Velocity_Estimate(EqepSpeedEstimator *est) { float speed_temp; uint32_t cap_period; int32_t pos_diff; // 读取单位时间事件标志 if (EqepRegs.QEPSTS.bit.UPEVNT 1) { // 无论哪种模式都读取锁存的位置增量ΔX和捕获时间ΔT pos_diff (int32_t)EqepRegs.QPOSLAT - est-pos_count_prev; cap_period EqepRegs.QCPRDLAT; // 注意高速时此值可能为0xFFFF无效 // 检查捕获数据有效性 if (EqepRegs.QEPSTS.bit.COEF 1 || EqepRegs.QEPSTS.bit.CDEF 1) { // 捕获定时器溢出或方向改变数据无效强制使用M/T法 est-est_mode SPEED_HIGH; cap_period 0xFFFF; // 标记无效 } // 根据当前模式选择算法 switch (est-est_mode) { case SPEED_HIGH: // M/T法: v ΔX / T // T是固定的单位时间例如QUPRD设定的时间对应的秒数 speed_temp (float)pos_diff / (FIXED_UNIT_TIME_T); break; case SPEED_LOW: // T法: v X / ΔT 前提是ΔT有效 if (cap_period ! 0 cap_period ! 0xFFFF) { float delta_t (float)cap_period / CAPTURE_CLOCK_FREQ; float unit_pos_x (float)(1 (EqepRegs.QCAPCTL.bit.UPPS 2)); // 计算X speed_temp unit_pos_x / delta_t; } else { // 如果T法数据无效 fallback 到M/T法 speed_temp (float)pos_diff / FIXED_UNIT_TIME_T; } break; default: // 过渡模式可以取平均或保持上一次值 speed_temp est-speed_rpm; break; } // 单位转换速度(计数/秒) - 转速(RPM) // counts_per_rev 是编码器每转计数如2000 speed_temp (speed_temp / COUNTS_PER_REVOLUTION) * 60.0f; // 应用低通滤波器平滑噪声 est-speed_rpm est-filter_alpha * speed_temp (1.0f - est-filter_alpha) * est-speed_rpm; // 模式切换逻辑带滞环 if (est-est_mode SPEED_HIGH fabs(est-speed_rpm) est-threshold_high_to_low) { est-est_mode SPEED_LOW; } else if (est-est_mode SPEED_LOW fabs(est-speed_rpm) est-threshold_low_to_high) { est-est_mode SPEED_HIGH; } // 更新历史值 est-pos_count_prev EqepRegs.QPOSLAT; est-cap_time_prev cap_period; // 清除硬件标志 EqepRegs.QEPSTS.bit.UPEVNT 1; // 写1清除 EqepRegs.QEPSTS.bit.COEF 1; EqepRegs.QEPSTS.bit.CDEF 1; } }4.2 关键参数计算与配置表示例为了让配置更直观下面用一个具体的例子展示如何根据电机和编码器参数计算出eQEP各个关键寄存器的值。假设系统参数如下系统时钟SYSCLK 100 MHz编码器2500线每转10000个计数POS_MAX 9999期望速度更新率1 kHz即速度环控制频率低速/高速切换阈值50 RPM低速测量单位位置事件选择每16个QCLK即4个正交周期一次UPPS 3(因为 2^(32) 16)参数计算公式示例值对应寄存器/操作位置计数器最大值POS_MAX 4 * 线数 - 19999QPOSMAX 9999单位时间周期 (T)QUPRD SYSCLK / 速度更新率100,000,000 / 1,000 100,000QUPRD 100000单位时间 (秒)T QUPRD / SYSCLK100,000 / 100e6 0.001 s用于软件速度计算低速捕获时钟预分频 (CCPS)权衡分辨率与量程。设CCPS6即64分频CAP_CLK 100MHz / 64 ≈ 1.56MHzQCAPCTL.bit.CCPS 6低速单位位置事件 (UPPS)根据需求设定如每4个正交周期X 16个计数QCAPCTL.bit.UPPS 3低速最小可测速度V_min X / (CAP_TIMER_MAX * T_cap)CAP_TIMER_MAX 65535T_cap 1 / CAP_CLK16 / (65535 / 1.56e6) ≈ 0.38 计数/秒→ 0.38/10000*60 ≈ 0.0023 RPM理论极限实际受噪声限制高速最小分辨率V_res 1 / (T * COUNTS_PER_REV) * 601 / (0.001 * 10000) * 60 6 RPMM/T法在1kHz下的分辨率这个表格清晰地展示了配置的推导过程。可以看到T法在低速下的理论分辨率极高而M/T法在1kHz采样下对10000 CPR的编码器分辨率只有6RPM。这正体现了混合方案的必要性。4.3 常见问题排查与调试心得在实际调试中你会遇到各种各样的问题。下面是我总结的一些典型故障现象和排查思路。问题现象可能原因排查步骤与解决方案位置计数器不计数或乱跳1. GPIO配置错误未映射到eQEP功能。2. 输入信号极性接反。3. 编码器供电或信号线接触不良。4. 输入噪声过大缺少滤波。1. 用示波器直接测量芯片引脚上的QEPA、QEPB信号确认波形正确。2. 检查QDECCTL[QAP/ QBP]极性位尝试反转。3. 确认GPxQSELn已配置为同步输入模式非异步。4. 尝试增大输入限定滤波采样周期。索引复位位置不准每次有偏移1. 索引信号与正交信号的相位关系不固定。2.QEPCTL[IEL]或QEPCTL[PCRM]配置模式不符。1. 这是许多编码器的通病。索引脉冲宽度可能很窄其边沿与A/B相的相对位置在每圈可能有微小差异。eQEP的“索引事件标记”功能IEL11就是用来解决这个的它会在索引边沿后的第一个正交边沿才执行复位/锁存保证了复位的重复性。务必使用这个模式。低速时速度估算值跳动大1. 捕获定时器时钟CCPS分频过大分辨率低。2. 机械振动或编码器抖动导致脉冲间隔不均匀。3. 软件滤波不足。1. 在保证不溢出的前提下尽量减小CCPS提高捕获时钟频率。2. 检查编码器安装是否同心联轴器是否有间隙。3. 对QCAP计算出的速度施加低通滤波。注意滤波会引入相位滞后在控制环中需补偿。高速时速度估算值不准1. M/T法分辨率不足采样频率太低。2. 单位时间中断处理函数耗时过长错过数据。1. 提高速度估算频率减小QUPRD但这会增加CPU负载。2. 优化中断服务程序只做必要的读取和计算。确保在下一个UTIME中断前完成处理。方向判断错误A、B相序接反。交换电机上编码器A、B相的接线或者通过设置QDECCTL[SWAP]位来软件交换。使用位置比较输出无反应1. 同步输出未使能QDECCTL[SOEN]0。2. 输出引脚选择错误QDECCTL[SPSEL]。3. 比较值QPOSCMP设置错误或影子寄存器未加载。1. 确认SOEN1SPSEL选择了正确的引脚INDEX或STROBE。2. 确认该引脚已正确配置为输出功能。3. 如果使用影子模式检查PCLOAD配置和PCR标志确保新值已加载。可以先将QPOSCMP设为一个很小的值手动转动电机用示波器观察输出。几个宝贵的调试心得善用仿真器实时观察在CCS的Expressions窗口添加EqepRegs.QPOSCNT等关键寄存器实时观察其变化。用手轻轻转动电机看计数器是否平滑增减。这是最直接的验证手段。初始化顺序很重要先配置所有GPIO和eQEP控制寄存器最后再置位QEPCTL[FREE_SOFT]或QEPCTL[PEN]来使能eQEP模块。关闭时顺序相反。索引信号的去抖动有些编码器的索引信号质量不高。如果发现索引复位偶尔出错可以考虑在软件中增加确认逻辑例如连续读到2-3次有效的索引事件后才执行复位操作或者在索引中断中检查位置值是否在预期范围内。速度估算的滤波艺术无论是M/T法还是T法原始速度值都带有噪声。一阶低通滤波y(k) α * x(k) (1-α) * y(k-1)是必须的。但滤波系数α的选择是门艺术α太大接近1滤波效果弱噪声大α太小响应慢影响控制带宽。通常需要根据实际系统调试在噪声抑制和动态响应间折衷。对于切换区可以引入更复杂的自适应滤波。