TI DSP eQEP模块深度解析:从正交编码器信号到精准位置与速度反馈
2026/7/19 11:16:54 网站建设 项目流程

1. 从信号到位置:eQEP模块的核心价值与设计哲学

在电机控制、机器人关节驱动或者任何需要精确位置反馈的工业场景里,我们工程师最头疼的问题之一,就是如何让控制器“看见”并“理解”电机的实时位置和速度。这就像给一个盲人装上眼睛,不仅要能看见,还得能分辨方向和速度。正交编码器(Quadrature Encoder)就是这双“眼睛”,而德州仪器(TI)TMS320F2838x系列DSP中的增强型正交编码器脉冲(eQEP)模块,则是处理这双眼睛信号的“大脑”。我接触过不少带编码器接口的MCU,但像eQEP这样功能集成度如此之高、设计如此周到的模块,确实能极大减轻底层驱动开发的负担。

简单来说,eQEP模块的核心任务,就是把来自旋转编码器的两路相位差90度的方波信号(A相和B相),翻译成控制器能直接使用的数字信息:绝对位置、旋转方向和瞬时速度。它的工程价值远不止“数脉冲”那么简单。在伺服系统中,位置环的精度和响应速度直接决定了整机的性能;在精密仪器里,微米级的重复定位精度全靠它;在变频器里,无速度传感器矢量控制(FOC)的初始位置辨识和低速性能优化,也离不开可靠的编码器反馈。eQEP通过硬件集成的正交解码、位置计数、边沿捕获甚至位置比较输出等功能,将CPU从繁琐的定时器中断和边沿检测中解放出来,让我们能更专注于控制算法本身。

理解eQEP,关键在于抓住几个核心:信号从哪里来(输入源选择)、如何解读(解码模式)、如何计数(位置计数器模式)、以及如何利用这些数据(速度计算、同步触发)。接下来,我们就沿着这个逻辑,拆解eQEP的每一个功能单元,并结合实际配置中的坑点,让你不仅能看懂手册,更能用得好。

2. eQEP模块的输入配置:信号源的灵活性与陷阱

eQEP模块的输入引脚看似简单,只有四路:QEPA, QEPB, QEPI(索引)和QEPS(选通)。但它的强大之处在于信号源的极度灵活性。这直接决定了你的编码器信号是来自电机轴端的物理编码器,还是经过其他外设(如比较器子系统CMPSS)处理后的模拟信号。

2.1 输入引脚功能详解

QEPA与QEPB:核心正交/方向时钟信号这是eQEP的“主食”,所有位置信息都源于此。它们有两种基本工作模式,由解码器控制寄存器QDECCTL中的QSRC位决定:

  • 正交计数模式(Quadrature-count Mode):这是最常用的模式,对应增量式光电或磁编码器。编码器输出两路频率相同、但相位相差90电角度的方波(A和B)。eQEP模块的硬件解码逻辑会检测A、B两相信号的每个边沿(上升沿和下降沿),从而实现4倍频。例如,一个每转输出1000个脉冲(1000 PPR)的编码器,在4倍频后,每转能产生4000个计数,分辨率直接提升4倍。方向判断则基于相位关系:若A相领先B相90度,通常定义为正转(顺时针),计数器递增;反之,B相领先A相则为反转,计数器递减。
  • 方向计数模式(Direction-count Mode):有些绝对值编码器或特定传感器输出的是直接的“时钟”和“方向”信号。在此模式下,QEPA引脚接收时钟脉冲,QEPB引脚接收方向电平(高电平通常为正向)。位置计数器在QEPA的每个上升沿根据QEPB的电平进行加或减计数。这种模式简化了解码逻辑,但失去了4倍频带来的分辨率提升。

QEPI:索引(Index)或零位(Z)信号这个信号通常对应编码器每旋转一圈输出一个脉冲的“零位”信号。它的核心作用是提供绝对位置参考点。在打印机喷头、数控机床回零等需要寻找机械原点的应用中,索引信号至关重要。eQEP模块可以配置为在索引信号边沿到来时,将32位的位置计数器QPOSCNT复位到0(正转)或最大值QPOSMAX(反转),或者仅仅将当前计数值锁存到QPOSILAT寄存器供软件读取,用于校验一圈内的计数是否正确(例如,对于1000线的编码器,4倍频后,相邻两个索引信号之间的计数值差应为4000)。

QEPS:选通(Strobe)信号这是一个通用输入,功能上与索引信号类似,但用途更灵活。它通常连接到一个外部限位开关、光电传感器或某个特定位置的霍尔传感器。当运动部件到达这个物理位置时,传感器触发,eQEP模块可以锁存此刻的位置计数器值到QPOSSLAT寄存器。这在需要记录多个特定位置点的应用中非常有用,比如在流水线上,产品到达加工位、检测位时记录精确位置。

2.2 信号源选择寄存器(QEPSRCSEL)的配置艺术与巨坑

这是eQEP模块一个非常强大但也极易出错的功能。QEPSRCSEL寄存器允许你将QEPA、QEPB和QEPI这三个输入信号的来源,从默认的GPIO引脚,重定向到芯片内部的其他外设输出。手册中的Table 27-1列出了所有可选源,包括多个比较器子系统(CMPSSx)的输出和多个增强型PWM的交叉触发条(EPWMXBARx)。

一个典型的高级应用场景:旋转变压器(Resolver)或正余弦(SinCos)编码器的解码。旋变输出的是模拟的正弦(Sin)和余弦(Cos)信号。我们通常先用ADC采样这两路信号,然后通过CMPSS模块(比较器子系统)将其转换为数字方波。CMPSS内部有一个可编程的滞回比较器,可以将Sin、Cos信号与参考值比较,生成类似正交编码器的A、B相信号,同时还能从Sin信号过零点提取出索引信号。这时,你就可以将QEPSRCSEL寄存器配置为从CMPSS模块取信号,而不是GPIO。这样,eQEP模块接收到的就是已经数字化的“编码器”信号,实现了旋变信号的硬件解码闭环。

必须牢记的致命陷阱:手册在Table 27-1下方用“Note”特别警告:在eQEP模块已经使能并运行时,去配置QEPSRCSEL寄存器,可能会导致这些输入信号上产生意外的跳变,进而引发不可预知的后果(比如位置计数器突然跳变)。

我的踩坑实录:在一次调试中,我试图在电机运行过程中动态切换信号源以实现冗余备份。结果电机瞬间失控,位置环崩溃。排查后发现,就是在写QEPSRCSEL的瞬间,eQEP内部逻辑看到了一个虚假的边沿,导致计数器错误计数。绝对正确的操作顺序是

  1. 首先,通过QEPCTL寄存器禁用eQEP模块(将QEPCTL[QPM]设为000,即关闭位置计数器)。
  2. 然后,安全地配置QEPSRCSEL寄存器,选择新的信号源。
  3. 最后,重新配置并启用eQEP模块。这个顺序是铁律,务必遵守。

3. 正交解码单元(QDU)与位置计数器模式深度解析

正交解码单元是eQEP的“翻译官”,它负责将原始的A、B相信号流,翻译成规整的“时钟”(QCLK)和“方向”(QDIR)信号,送给位置计数器。

3.1 解码原理与状态机

手册中的Figure 27-7和Table 27-3是理解正交解码的核心。A、B两相信号有4种状态组合:(0,0), (0,1), (1,1), (1,0)。当电机旋转时,信号状态会按顺序在这4个状态间循环。解码器内部有一个状态机,跟踪当前和上一个状态。

  • 如果状态转移顺序是 (0,0) -> (0,1) -> (1,1) -> (1,0) -> (0,0)...,则判定为正向旋转,方向信号QDIR为高,并在每次状态变化时产生一个计数时钟QCLK,使QPOSCNT加1。
  • 如果顺序相反,则为反向旋转,QDIR为低,QPOSCNT减1。 由于检测每个状态的跳变(即A、B的每个边沿),因此一圈的计数脉冲数 = 编码器线数 * 4。

相位错误(Phase Error)标志: 在理想情况下,A、B相信号永远保持90度相位差。但在实际中,由于编码器安装同心度问题、长线缆干扰或信号抖动,可能会出现A、B相同时跳变的情况(例如从(0,0)直接跳到(1,1)),这被称为“无效状态转移”。eQEP模块会检测到这种异常,并在状态寄存器QEPSTS中置位相位错误标志PHE,同时可能产生中断。这个功能非常有用,是诊断编码器信号质量、排查机械安装问题的重要硬件标志。一旦发现频繁的相位错误,你就需要检查编码器连接器、电缆屏蔽或联轴器了。

3.2 位置计数器(PCCU)的四种复位模式:适应不同场景

位置计数器QPOSCNT是一个32位的核心寄存器,它的行为模式由QEPCTL[PCRM]位域控制。选择哪种模式,取决于你的应用对“绝对位置”的定义。

模式一:索引事件复位(PCRM=00)这是增量编码器结合每圈绝对索引的经典模式。每当索引信号(Index)的有效边沿到来时,QPOSCNT会在下一个QCLK边沿被复位。复位值取决于方向:正转时复位到0,反转时复位到QPOSMAX(通常设置为4倍频后的每转计数-1,如3999)。

  • 应用场景:伺服电机。每次上电或遇到索引信号,位置就以该索引点为“电气零点”。QPOSCNT的值表示的是相对于本圈零点的位置。这对于需要每圈对齐一次的应用(如机床主轴定向)是必须的。
  • 注意事项:此模式下,eQEP会严格记住第一次索引复位发生时的正交边沿(比如是B相的下降沿)。后续的所有索引复位都必须对齐到同一个正交边沿,否则会触发位置计数器错误标志PCEF。这保证了复位时刻的精确性和一致性。

模式二:达到最大位置复位(PCRM=01)此模式下,索引信号不再复位计数器。QPOSCNT自由累加或递减。仅当计数值达到上下限时发生复位:向上计数达到QPOSMAX后,下一个时钟复位到0;向下计数达到0后,下一个时钟复位到QPOSMAX

  • 应用场景多圈绝对位置测量长行程直线位移。例如,一个带电池的多圈绝对值编码器,或者一个长行程的直线光栅尺。QPOSCNT会不断累加,结合溢出/欠载中断,软件可以维护一个更高精度的“扩展位置”计数器(比如64位),从而实现超长距离的绝对位置跟踪。
  • 实操技巧QPOSMAX通常设置为编码器每转计数值(4*PPR)的整数倍减1。你需要根据机械行程和所需精度来权衡设置。设置过大,可能过早溢出;设置过小,则复位频繁,增加软件处理开销。

模式三:首次索引事件复位(PCRM=10)这是模式一和模式二的结合。仅第一个索引信号会复位QPOSCNT,之后计数器就按照模式二(达到QPOSMAX或0时复位)的方式运行。

  • 应用场景:需要建立一个唯一的“上电参考点”,但运行过程中允许位置计数器自由累积的应用。比如,在设备启动时,通过回零操作找到索引点,将当前位置设为0。之后在连续生产过程中,即使再次经过索引点,位置也不复位,从而可以记录从启动开始的总位移量。

模式四:单位超时事件复位(PCRM=11)此模式与速度测量单元(UTIME)关联。当单位定时器QUTMR达到周期值QUPRD时,会产生超时事件UTOUT,并在此事件上复位QPOSCNT

  • 应用场景:主要用于固定时间间隔的速度测量。在这种模式下,位置计数器实际上被用作“在固定时间窗内捕获的位移脉冲数”。结合后文将讲到的边沿捕获单元,可以方便地计算速度。

3.3 位置锁存(Latch)功能:精准的时刻抓拍

除了复位,eQEP还提供了强大的锁存功能。你可以配置在索引信号或选通信号的特定边沿,将QPOSCNT的瞬时值“抓拍”下来,存入对应的锁存寄存器(QPOSILATQPOSSLAT)。

  • 索引事件锁存:通过QEPCTL[IEL]配置,可以在索引信号的上升沿、下降沿或“索引事件标记”(第一个索引边沿后的第一个正交边沿)锁存位置。这常用于在线诊断:在“达到最大位置复位”模式下,你仍然可以在每个索引信号处锁存位置值。理论上,锁存的两个值之差应该是4000(对于1000线编码器)。如果差值偏差很大,说明可能存在丢脉冲或计数错误,可以触发报警。
  • 选通事件锁存:通过QEPCTL[SEL]配置。一个高级功能是,可以配置为根据方向选择锁存边沿(正转时上升沿锁存,反转时下降沿锁存)。这在双向运动的点位触发中非常有用。
  • ADC启动事件锁存:这是TMS320F2838x eQEP 2.0类型的一个亮点功能。通过配置QEPSTROBESEL寄存器,可以将ADC的启动转换信号(ADCSOCA/B)作为虚拟的选通信号。这意味着,你可以让ADC开始采样的精确时刻,同步锁存电机的位置。对于电机控制中的相电流采样,这确保了电流采样时刻与转子位置的严格同步,是实现高性能FOC算法的关键。

4. 位置比较单元与同步输出:硬件级的位置触发

这是eQEP模块中实现“位置环”硬件化的关键部分。它允许你设置一个目标位置值(写入QPOSCMP寄存器),当位置计数器QPOSCNT运行到这个值时,硬件会自动产生一个同步脉冲信号PCSOUT,并可以触发中断。

4.1 工作原理与配置

其工作流程非常直观:

  1. 你预先在QPOSCMP寄存器中设置一个比较值。
  2. QPOSCNT在计数过程中,硬件持续将其与QPOSCMP进行比较。
  3. 当两者匹配时,触发一个“位置比较事件”(PCEVENT),并置位标志QFLG[PCM]
  4. 该事件经过一个可编程脉冲展宽器,生成一个宽度由QPOSCTL[PCSPW]控制的同步脉冲PCSOUT
  5. 这个PCSOUT信号可以通过配置,从索引或选通引脚输出,用于触发外部设备,如另一个ePWM模块、ADC转换或一个外部IO。

影子寄存器与加载机制QPOSCMP寄存器支持影子寄存器。当QPOSCTL[PSSHDW]使能时,你写入的是影子寄存器。影子寄存器中的值加载到活动比较寄存器的时机由QPOSCTL[PCLOAD]控制:

  • PCLOAD=0:在比较匹配时加载。这意味着你可以在本次比较匹配后,立即为下一次匹配更新目标值,实现连续的位置规划。
  • PCLOAD=1:在位置计数器归零时加载。这适用于每圈循环触发固定位置点的场景,比如在索引点(位置0)更新本圈需要触发的几个角度位置。

4.2 高级应用:电子凸轮与多轴同步

位置比较同步输出是实现高级运动控制功能的基石。

  • 电子齿轮/凸轮:在从轴上配置eQEP的位置比较单元,主轴的位置(通过另一路eQEP或通信获取)经过电子凸轮曲线计算后,实时更新到从轴的QPOSCMP寄存器。当从轴运行到该位置时,PCSOUT触发从轴的ePWM模块,实现精确的相位同步。影子寄存器的存在使得在线更新曲线成为可能。
  • 多轴同步触发:在多轴协同作业的机器上,比如龙门架,可以配置两个轴的eQEP在相同的目标位置产生同步脉冲。这个脉冲可以作为一个全局的“事件”去触发两轴的ADC同时采���、或者触发一个共同的输出动作,确保两个轴的动作在空间位置上严格同步,消除因软件响应延迟带来的不同步误差。
  • 脉冲展宽器的意义:手册Figure 27-16展示了脉冲展宽器的作用。如果新的比较匹配事件发生时,上一个脉冲还未结束,展宽器会从新事件开始重新生成一个完整宽度的脉冲。这保证了即使在高速或密集的位置事件下,输出的同步脉冲仍然是完整、干净的,不会被“吞掉”,确保了被触发设备的可靠响应。

5. 边沿捕获单元(QCAP)与低速速度测量

在高速情况下,我们可以通过定期(例如每1ms)读取位置计数器QPOSCNT的差值来计算速度。但在极低速时,比如电机每分钟只有几转,1ms内位置计数器可能根本不动,这种方法误差极大。eQEP的边沿捕获单元就是为解决低速高精度速度测量而生的。

5.1 测量原理:以位移定时间

传统速度测量是“固定时间,测量位移”。而QCAP单元采用的是“固定位移,测量时间”的反向思路。

  1. 定义单位位移(X):通过QCAPCTL[UPPS]位域设置。这个位移是正交时钟QCLK周期的整数倍。例如,设置UPPS=0010,表示每4个QCLK(即1个完整的正交周期)产生一个“单位位置事件”(UPEVNT)。对于1000线的编码器,这相当于1/1000转的机械角度。
  2. 捕获时间间隔(ΔT):每当发生一个“单位位置事件”,一个独立的16位捕获定时器QCTMR(由系统时钟SYSCLKOUT分频而来)的当前值就会被锁存到捕获周期寄存器QCPRD(或其影子寄存器QCPRDLAT),然后QCTMR清零重启。QCPRD中锁存的值,就是走过这段“固定位移”所花费的系统时钟周期数
  3. 计算速度:速度v = X / ΔT。其中X是已知的固定位移(根据UPPS和编码器分辨率算出),ΔT =QCPRD* (系统时钟周期)。由于QCTMR的时钟源是高速的系统时钟,因此即使位移很小,也能捕获到足够多的时间计数,从而在低速下获得高分辨率的速度值。

5.2 配置要点与错误处理

关键配置寄存器

  • QCAPCTL[CCPS]:捕获定时器QCTMR的时钟预分频。选择SYSCLKOUT的分频比,决定了QCTMR的计数快慢,也即时间测量的分辨率。需要在测量范围和分辨率间权衡。
  • QCAPCTL[UPPS]:单位位置事件预分频。决定多少个QCLK产生一次捕获事件。设置越大,单位位移X越大,在相同速度下两次捕获间隔时间越长,适合更低速测量;设置越小,响应越快,但低速下可能计时器溢出。

错误标志与处理: QCAP单元有两个重要的状态标志,用于指示测量是否可靠:

  • 捕获方向错误(CDEF):如果在两个连续的单位位置事件之间,电机的旋转方向发生了改变,那么这次测量的时间值ΔT就失去了意义(因为它对应的是来回运动的时间总和)。此时QEPSTS[CDEF]会被置位,并且QCPRDLAT会被设置为0xFFFF。软件在读取速度值前,必须先检查这个标志。
  • 捕获溢出错误(COEF):如果电机速度太慢,导致在两个单位位置事件之间,16位的捕获定时器QCTMR从0计数到0xFFFF又回到了0(即溢出),那么捕获到的时间值也是错误的。此时QEPSTS[COEF]置位,QCPRDLAT同样被设为0xFFFF。

一个实用的低速速度测量流程

  1. 使能QCAP单元(QCAPCTL[CEN]=1)。
  2. 在主循环或定时中断中,检查状态寄存器QEPSTS[UPEVNT],该位在新捕获值就绪时置1。
  3. 如果UPEVNT=1,检查CDEFCOEF标志。
  4. 如果两个错误标志均为0,读取QCPRDLAT值,计算ΔT,进而计算速度v = X / ΔT
  5. UPEVNT位写1以清除该标志。
  6. 如果错误标志置位,则本次速度值无效,应采取上次有效值或报错。

6. 单元定时器(UTIME)与看门狗(QWDOG)

6.1 单元定时器:固定时间窗的速度测量

与QCAP的“固定位移测时间”相反,单元定时器QUTMR提供的是“固定时间测位移”的经典速度测量方法。它本质上是一个由系统时钟驱动的定时器,周期由QUPRD寄存器设定。

  • 工作模式:当QUTMR计数达到QUPRD时,产生单位超时事件UTOUT。在此事件上,可以触发两件事:
    1. 锁存位置值:如果使能了位置锁存模式(QEPCTL[QCLM]=1),则当前QPOSCNT的值会被锁存到QPOSLAT。同时,QCAP单元中的QCTMRQCPRD也会被锁存。
    2. 复位位置计数器:在位置计数器模式四(PCRM=11)下,UTOUT事件会复位QPOSCNT
  • 速度计算:在定时中断服务程序中,读取本次和上次UTOUT事件锁存的QPOSLAT值,其差值ΔX就是在固定周期TQUPRD对应的实际时间)内的位移。速度v = ΔX / T。这种方法在中高速下非常有效且简单。

6.2 看门狗定时器(QWDOG):运动失步检测

这是一个非常实用的安全功能。看门狗定时器QWDTMR的时钟源是正交时钟QCLK。它的周期由QWDPRD设置。

  • 工作原理:只要编码器在转动,QCLK就会不断产生,QWDTMR会在每个QCLK边沿被刷新(复位)。一旦电机堵转或编码器信号丢失,QCLK停止,QWDTMR就会持续累加直到超过QWDPRD,从而触发看门狗超时事件WDTOUT,并产生中断。
  • 应用场景
    • 电机堵转保护:在伺服系统中,如果负载突然卡死,编码器反馈停止,看门狗超时可以立即触发故障保护,关闭PWM输出,防止电机过热或驱动器损坏。
    • 编码器断线检测:编码器电缆松动或断开,也会导致QCLK停止,看门狗超时可以作为硬件级的断线报警。
  • 配置技巧QWDPRD的设置需要根据最低允许转速来计算。例如,电机最低运行转速为10 RPM,编码器1000线,4倍频后每转4000个QCLK。10 RPM对应每秒10/60≈0.167转,每秒QCLK数约为667个,每个QCLK周期约1.5ms。如果你想在信号停止超过10ms时报警,那么QWDPRD应设置为10ms / 1.5ms ≈ 6.7,取整为7。这样,当超过7个QCLK周期没有新脉冲时,看门狗就超时了。

7. 寄存器配置实战与常见问题排查

理解了原理,最终要落到代码上。下面以一个典型的伺服电机增量式编码器应用为例,梳理关键配置步骤和常见问题。

7.1 初始化配置流程

假设使用TMS320F2838x,编码器为1000线,工作在正交计数模式,需要索引信号每圈复位,并启用位置比较同步输出。

  1. GPIO复用与输入限定

    // 假设使用EQEP1, 引脚为GPIO20 (QEPA), GPIO21 (QEPB), GPIO22 (QEPI), GPIO23 (QEPS) GPIO_setPinConfig(GPIO_20_EQEP1A); GPIO_setPinConfig(GPIO_21_EQEP1B); GPIO_setPinConfig(GPIO_22_EQEP1I); GPIO_setPinConfig(GPIO_23_EQEP1S); // 配置输入限定器,滤除毛刺。根据编码器信号频率设置采样窗口。 GPIO_setQualificationPeriod(GPIO_20_EQEP1A, 510); // 例:510个SYSCLK周期

    输入限定非常重要,可以滤除因长线传输或环境干扰引起的信号抖动。采样周期需要根据你的系统时钟和编码器最高转速估算,确保能滤掉噪声但不会滤掉真实信号。

  2. 配置解码器控制寄存器(QDECCTL)

    EQEP_setDecoderConfig(EQEP1_BASE, EQEP_CONFIG_QUADRATURE, // 正交计数模式 EQEP_CONFIG_NO_SWAP); // 不交换A、B相(根据实际接线调整) EQEP_setInputPolarity(EQEP1_BASE, false, false, false); // 假设信号均为正常极性

    如果电机实际转向与程序定义的转向相反,可以尝试设置EQEP_CONFIG_SWAP_AB来交换A、B相输入,而不是在软件里对速度或位��取反。

  3. 配置位置计数器与控制寄存器(QEPCTL, QPOSCTL)

    // 位置计数器模式:索引事件复位 (PCRM=00) EQEP_setPositionCounterConfig(EQEP1_BASE, EQEP_POSITION_RESET_IDX, // 索引复位模式 EQEP_MAX_POS_COUNTS(4000)); // 设置QPOSMAX = 4000-1 // 使能索引信号复位,并在索引事件标记处锁存位置(用于校验) EQEP_enableIndexLatch(EQEP1_BASE); // 对应IEL=11 // 初始化位置计数器为0 EQEP_setPositionCounterInit(EQEP1_BASE, 0); // 配置位置比较单元 EQEP_setCompareConfig(EQEP1_BASE, EQEP_SHADOW_LOAD_ON_CNTR_ZERO, // 在计数器为0时加载影子寄存器(PCLOAD=1) EQEP_COMPARE_OUTPUT_HIGH_ACTIVE); // 同步输出高有效 EQEP_setCompareValue(EQEP1_BASE, 1000); // 设置比较值为1000(90度机械角) EQEP_enableCompare(EQEP1_BASE); // 使能比较功能
  4. 配置边沿捕获单元(QCAPCTL)用于低速测量

    // 使能捕获单元 EQEP_enableCapture(EQEP1_BASE); // 设置单位位置事件:每32个QCLK捕获一次时间 (UPPS=5) EQEP_setCaptureUnitPreScaler(EQEP1_BASE, EQEP_CAPTURE_CLK_DIV_1, // CAPCLK不分频 5); // UPPS=5, 即2^5=32个QCLK // 设置捕获定时器预分频,假设SYSCLK=200MHz,希望QCTMR时钟为25MHz // CCPS = log2(200/25) = 3, 即8分频 EQEP_setCaptureTimerPreScaler(EQEP1_BASE, 3);
  5. 配置单元定时器(UTIME)用于中高速测量

    // 设置单位定时器周期,例如希望每1ms产生一次UTOUT事件 // 假设UTIME时钟为SYSCLK/64 ≈ 3.125MHz (200MHz/64) // 则1ms对应的计数值为 3125 EQEP_setUnitTimerPeriod(EQEP1_BASE, 3125); EQEP_enableUnitTimer(EQEP1_BASE); // 使能单元定时器 // 配置在UTOUT事件时锁存位置和捕获值 EQEP_enableLatchOnUnitTimeOut(EQEP1_BASE);
  6. 配置看门狗(QWDOG)

    // 设置看门狗周期,例如希望超过100个QCLK周期无信号则报警 EQEP_setWatchdogPeriod(EQEP1_BASE, 100); EQEP_enableWatchdog(EQEP1_BASE); // 使能看门狗
  7. 使能eQEP模块与中断

    // 最后,使能eQEP位置计数器 EQEP_enableCounter(EQEP1_BASE); // 使能所需中断,例如位置比较匹配、看门狗超时、单元定时器超时等 EQEP_enableInterrupt(EQEP1_BASE, EQEP_INT_POS_COMP | EQEP_INT_WDOG | EQEP_INT_UNIT_TIME_OUT);

7.2 常见问题排查速查表

现象可能原因排查步骤与解决方案
位置计数器QPOSCNT不变化1. eQEP模块未使能 (QEPCTL[QPM]=000)。
2. GPIO复用配置错误,信号未进入eQEP。
3. 编码器供电或接线问题,无信号输出。
4. 输入信号极性配置错误 (QDECCTL[QAP]/[QBP])。
1. 检查QEPCTL寄存器,确保QPM不为0。
2. 用示波器测量GPIO引脚,确认有编码器波形。检查GPIO MUX配置。
3. 检查编码器电源、接地,A/B/I信号线是否接反。
4. 尝试反转输入极性。
计数方向与电机实际转向相反A、B相序接反或解码器配置错误。1. 交换电机驱动器的U/V/W相序中的任意两相,会改变电机转向,但这是下策。
2.推荐:在软件中配置QDECCTL[SWAP]=1,交换A、B相输入。
3. 或者,在代码中对读取到的速度/位置值取反。
索引复位位置不固定,每次有偏差1. 索引信号抖动或噪声。
2. 索引信号有效边沿与QEPCTL[IEL]配置不匹配。
3. 在“索引事件复位”模式下,第一次索引事件的正交边沿未被正确记录或后续未对齐。
1. 增加索引信号的输入限定(滤波)。
2. 确认编码器索引信号是上升沿有效还是下降沿有效,并相应配置IEL位。
3. 确保电机以恒定低速通过索引点完成首次复位。检查QEPSTS[FIMF]QEPSTS[FIDF]标志。
位置比较同步输出PCSOUT无信号1. 位置比较单元未使能 (QPOSCTL相关位)。
2. 同步输出未映射到引脚 (QDECCTL[SOEN], [SPSEL])。
3. 比较值QPOSCMP设置错误,或影子寄存器未加载。
4. 输出引脚GPIO复用配置错误。
1. 检查QPOSCTL寄存器,确保比较功能已使能。
2. 检查QDECCTL寄存器,确认SOEN=1SPSEL选择了正确的输出引脚(INDEX或STROBE)。
3. 检查QPOSCMP活动寄存器的值,确认在目标位置是否触发了PCEVENT(查看QFLG[PCM])。
4. 确认INDEX或STROBE引脚已配置为输出功能 (EQEPxIOEEQEPxSOE)。
低速测量时速度值跳变或为01. QCAP单元未使能或配置错误 (QCAPCTL)。
2. 捕获定时器溢出 (QEPSTS[COEF]=1)。
3. 电机在测量间期内换向 (QEPSTS[CDEF]=1)。
4. 单位位置事件 (UPPS) 设置过大,导致捕获间隔太长。
1. 检查QCAPCTL[CEN]=1,确认CCPSUPPS分频设置合理。
2. 读取QEPSTS寄存器,检查COEFCDEF标志。若COEF=1,需减小CCPS分频比(加快QCTMR)或增大UPPS(增大单位位移)。
3. 若CDEF=1,说明速度方向变化,本次测量值无效,应丢弃并使用上次值或报错。
4. 根据最低速要求,重新计算并减小UPPS值。
看门狗频繁超时1. 看门狗周期QWDPRD设置过小。
2. 电机实际转速低于预期最低速。
3. 编码器信号线受干扰,导致脉冲丢失。
1. 根据最低运行转速和编码器分辨率,重新计算并增大QWDPRD值。
2. 检查电机是否真的在运行,或负载是否过重导致转速过低。
3. 检查编码器电缆屏蔽层是否接地良好,远离动力线。

调试eQEP,示波器是必不可少的工具。首先要确保物理层信号干净、幅值正确、相位关系正常。然后,利用芯片的寄存器实时查看功能,或者通过GPIO翻转来标记中断触发时刻,结合软件变量打印,才能高效地定位是配置问题、信号问题还是逻辑问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询