TI C2000 eCAP/eQEP模块实战:从原理到电机控制应用 1. 项目概述与核心价值在嵌入式系统尤其是电机控制、伺服驱动和精密运动控制领域我们工程师经常需要和两种最基础的物理量打交道时间和位置。时间决定了我们何时采样、何时驱动而位置则告诉我们“身在何处”。处理这两者如果全靠软件轮询或中断不仅会大量消耗宝贵的CPU资源在高频信号面前更是力不从心精度根本无法保证。这就是为什么像TI C2000系列这样的高性能微控制器会内置专门的硬件外设来应对这些挑战eCAP增强型捕获模块和eQEP增强型正交编码器脉冲模块。前者是你的“高精度秒表”专门用来捕捉信号的边沿记录下事件发生的精确时刻后者则是你的“智能里程表”能自动解读编码器的正交信号实时告诉你电机的转速和转向。我见过不少项目初期为了图省事用GPIO中断加定时器来模拟这些功能结果在电机转速稍高或者PWM频率上去之后系统就变得不稳定采样丢数据、计算有延迟。后来换上eCAP和eQEP整个系统的响应速度和控制精度立刻上了一个台阶CPU负载也降下来了。所以今天我就结合手册里的原理图和代码片段把这两个模块从寄存器配置到实际应用中的坑给大家掰开揉碎了讲清楚。无论你是正在调试无刷电机驱动器还是需要精确测量传感器信号的频率这篇文章都能给你一套可以直接“抄作业”的实战方案。2. eCAP模块你的高精度硬件秒表eCAP模块的核心思想很简单它内部有一个32位的自由运行计数器TSCTR就像一块永不停止的电子表。当外部引脚CAPx上发生你预设的事件比如上升沿时硬件会自动把当前“电子表”的读数时间戳保存到一个专用的捕获寄存器CAP1-CAP4里。整个过程由硬件完成无需CPU干预保证了极高的时效性和精度。2.1 核心工作模式解析根据你的需求eCAP主要可以配置为两种工作模式捕获模式CAP和APWM模式。捕获模式用于测量APWM模式则用于生成信号。我们重点看捕获模式它又细分为两种时间戳类型和两种边沿触发方式排列组合出四种经典应用场景。2.1.1 绝对时间戳模式 vs. 差值时间戳模式这是理解eCAP的关键。手册中的几个波形图Figure 20-21 至 20-24完美诠释了这两种模式。绝对时间戳模式下那个32位的TSCTR计数器一直累加永不停止直到溢出归零。每次捕获事件发生时硬件只是“咔嚓”一下把计数器当前的值复制到CAPx寄存器。要计算两个事件之间的时间间隔比如脉冲周期就需要软件做减法Period TSt2 - TSt1。差值时间戳模式则更加“智能”。在此模式下每次捕获事件发生后硬件在保存时间戳后会立刻将TSCTR计数器复位到0。这意味着下一次捕获发生时CAPx寄存器里存放的值直接就是从上一次事件到这一次事件所经过的时间。软件无需再做减法读取的值就是直接的间隔时间。模式选择心得绝对模式适合测量连续事件的绝对时间点便于进行复杂的事件序列分析而差值模式在单纯测量周期或占空比时更高效软件负担小。但要注意在差值模式下如果两次事件间隔超过了TSCTR计数器的最大值0xFFFFFFFF计数器会溢出CNTOVF这个标志位一定要在中断服务程序中检查和处理否则时间计算会出错。2.1.2 单边沿触发 vs. 双边沿触发边沿触发决定了eCAP模块对什么样的信号变化做出反应。仅上升沿触发只在信号从低到高跳变时捕获。这样连续捕获到的时间戳T1、T2、T3...的差值直接就是信号的周期。Period Tn - T(n-1)。上升沿与下降沿交替触发这是测量PWM波形的利器。通常配置为CAP1上升沿、CAP2下降沿、CAP3上升沿、CAP4下降沿如此循环。这样CAP2和CAP1的差值就是第一个脉冲的高电平时间正占空比CAP3和CAP2的差值是低电平时间而CAP3和CAP1的差值才是完整的周期。2.2 从原理图到代码四种经典配置实战手册给出了四个示例的代码片段我们结合波形图来深入理解其配置意图和操作流程。2.2.1 示例1绝对时间戳仅上升沿触发这是最基础的配置用于测量一个周期性信号的频率。// 初始化配置 ECap1Regs.ECCTL1.bit.CAP1POL EC_RISING; // CAP1捕获上升沿 ECap1Regs.ECCTL1.bit.CAP2POL EC_RISING; // CAP2捕获上升沿 ECap1Regs.ECCTL1.bit.CAP3POL EC_RISING; // CAP3捕获上升沿 ECap1Regs.ECCTL1.bit.CAP4POL EC_RISING; // CAP4捕获上升沿 ECap1Regs.ECCTL1.bit.CTRRST1 EC_ABS_MODE; // CAP1事件后TSCTR不复位绝对模式 ECap1Regs.ECCTL1.bit.CTRRST2 EC_ABS_MODE; // CAP2同理 ECap1Regs.ECCTL1.bit.CTRRST3 EC_ABS_MODE; // CAP3同理 ECap1Regs.ECCTL1.bit.CTRRST4 EC_ABS_MODE; // CAP4同理 ECap1Regs.ECCTL1.bit.CAPLDEN EC_ENABLE; // 使能捕获寄存器加载 ECap1Regs.ECCTL1.bit.PRESCALE EC_DIV1; // 输入预分频为1不分频 ECap1Regs.ECCTL2.bit.CAP_APWM EC_CAP_MODE; // 设置为捕获模式 ECap1Regs.ECCTL2.bit.CONT_ONESHT EC_CONTINUOUS; // 连续捕获模式 ECap1Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCO_DIS; // 同步输出禁用 ECap1Regs.ECCTL2.bit.SYNCI_EN EC_DISABLE; // 同步输入禁用 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_RUN; // 启动TSCTR计数器 // 在中断服务程序中例如CEVT4中断表示4个寄存器已满 TSt1 ECap1Regs.CAP1; // 读取第一个上升沿时间戳 TSt2 ECap1Regs.CAP2; // 读取第二个上升沿时间戳 TSt3 ECap1Regs.CAP3; // 读取第三个上升沿时间戳 TSt4 ECap1Regs.CAP4; // 读取第四个上升沿时间戳 Period1 TSt2 - TSt1; // 计算第一个周期 Period2 TSt3 - TSt2; // 计算第二个周期 Period3 TSt4 - TSt3; // 计算第三个周期关键点这里CTRRSTx都配置为EC_ABS_MODE即绝对模式。CAPLDEN必须使能否则时间戳不会加载到CAPx寄存器。CONT_ONESHT设置为连续模式这样在捕获4个事件后MOD4计数器会滚回0覆盖旧的捕获值实现循环缓冲。通常我们利用CEVT4第4次捕获事件中断来一次性读取4个时间戳进行计算效率最高。2.2.2 示例2绝对时间戳上升沿与下降沿触发此配置用于测量PWM信号的周期和占空比。// 初始化配置仅列出与示例1不同的关键行 ECap1Regs.ECCTL1.bit.CAP1POL EC_RISING; // 第1次上升沿 ECap1Regs.ECCTL1.bit.CAP2POL EC_FALLING; // 第2次下降沿 ECap1Regs.ECCTL1.bit.CAP3POL EC_RISING; // 第3次上升沿 ECap1Regs.ECCTL1.bit.CAP4POL EC_FALLING; // 第4次下降沿 // ... 其他CTRRST等配置与示例1相同均为EC_ABS_MODE // 在中断服务程序中例如CEVT4中断 TSt1 ECap1Regs.CAP1; // 第一个上升沿时间 TSt2 ECap1Regs.CAP2; // 第一个下降沿时间 TSt3 ECap1Regs.CAP3; // 第二个上升沿时间 TSt4 ECap1Regs.CAP4; // 第二个下降沿时间 Period1 TSt3 - TSt1; // 第一个完整周期 第二个上升沿 - 第一个上升沿 DutyOnTime1 TSt2 - TSt1; // 第一个脉冲高电平时间 DutyOffTime1 TSt3 - TSt2; // 第一个脉冲低电平时间计算逻辑这里巧妙地利用交替触发使得CAP1和CAP3总是捕获上升沿CAP2和CAP4总是捕获下降沿。因此相邻两个上升沿的时间差TSt3 - TSt1就是一周期。而一个上升沿和紧随其后的下降沿的时间差TSt2 - TSt1就是该周期内的高电平时间。2.2.3 示例3与示例4差值时间戳模式这两个示例分别对应单边沿和双边沿触发但核心是CTRRSTx配置为了EC_DELTA_MODE。// 关键配置差异 ECap1Regs.ECCTL1.bit.CTRRST1 EC_DELTA_MODE; // CAP1事件后TSCTR复位 ECap1Regs.ECCTL1.bit.CTRRST2 EC_DELTA_MODE; // CAP2事件后TSCTR复位 // ... CAP3, CAP4 同理在差值模式下读取到的CAPx寄存器值直接就是时间间隔。对于示例3仅上升沿CAP2的值就是第一个周期。对于示例4双边沿CAP2是第一个高电平时间CAP3是第一个低电平时间周期需要相加获得。重要提示在差值模式下中断触发的选择有讲究。手册示例3和4建议在CEVT1第一次捕获事件中断中读取数据。这是因为在差值模式下第n次捕获的值实际上是在第n1次事件发生时才被锁存并覆盖旧值。在CEVT1中断时CAP1-CAP4中分别保存的是T4, T1, T2, T3时刻的间隔值参见Figure 20-23。需要根据你的触发顺序仔细对应寄存器和物理时间的映射关系否则会读错数据。我个人的习惯是在差值模式下统一在CEVT4中断中读取并按照CAP1-T1, CAP2-T2...的逻辑去理解然后在软件中根据边沿配置重新计算周期和占空比这样思维负担更小。2.3 APWM模式eCAP的另一面eCAP模块并非只能捕获它还可以作为一个简单的、非对称的PWM发生器使用。这在某些需要额外PWM通道但ePWM模块又不够用的场景下很实用。在APWM模式下CAP1寄存器被重新用作周期寄存器APRDCAP2寄存器被用作比较寄存器ACMP。TSCTR计数器工作在递增计数模式与CAP1比较相等时复位。同时TSCTR也会与CAP2比较根据APWMPOL位的设置在比较匹配时翻转输出引脚的电平从而产生PWM波。// APWM模式配置示例 ECap1Regs.CAP1 0x1000; // 设置PWM周期值 ECap1Regs.CTRPHS 0x0; // 相位寄存器清零 ECap1Regs.ECCTL2.bit.CAP_APWM EC_APWM_MODE; // 切换到APWM模式 ECap1Regs.ECCTL2.bit.APWMPOL EC_ACTV_HI; // 设置PWM输出极性为高有效 // ... 其他同步、运行控制配置 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_RUN; // 启动计数器 // 运行时动态修改占空比 ECap1Regs.CAP2 0x0300; // 设置比较值即高电平时间注意事项eCAP的APWM模式功能比专用的ePWM模块简单得多它通常没有死区生成、故障联防等高级功能。因此它更适合用于驱动指示灯、蜂鸣器或对实时性要求不高的辅助控制而不建议用于驱动电机桥臂等关键功率部分。3. eQEP模块电机位置与速度的智能解码器如果说eCAP是秒表那eQEP就是一个集成了里程表、方向感应和速度计算功能的智能传感器接口。它直接连接增量式光电编码器自动处理两路正交相位差90度的方波信号QEPA, QEPB和一路索引信号QEPI为我们提供精准的位置、方向和速度信息。3.1 正交编码器基础与eQEP工作原理一个典型的增量式编码器盘如图21-1所示上面有明暗相间的刻线。一个完整的明暗对称为一线line。两个光敏元件错开1/4个线对的间距安装从而产生相位差90度的QEPA和QEPB信号。编码器每旋转一线A、B相各输出一个脉冲但相位不同。根据A相超前B相还是B相超前A相可以判断旋转方向。eQEP模块的核心功能单元包括正交解码单元QDU负责将A、B相信号解码为计数时钟QCLK和方向信号QDIR。它支持4倍频解码即A、B相的每个边沿上升沿和下降沿都会产生一个QCLK将位置分辨率提高4倍。对于一个N线/圈的编码器最终位置分辨率是4Ncounts/rev。位置计数器与控制单元PCCU包含一个32位的位置计数器QPOSCNT根据QCLK和QDIR进行递增或递减计数。这是位置信息的核心。边沿捕获单元QCAP用于低速或静止时的精确速度测量其原理与eCAP模块类似通过测量特定数量编码器脉冲之间的时间来计算速度。单位时间基准UTIME用于高速速度测量原理是在一个固定的时间片内读取位置计数器的变化量。看门狗定时器QWDOG用于监测电机是否堵转或丢失编码器信号。3.2 位置计数器工作模式深度解析位置计数器的工作模式由QEPCTL[PCRM]位控制这是配置eQEP的重中之重决定了位置计数器的计数和复位逻辑。3.2.1 索引事件复位模式PCRM00这是最常用的模式之一尤其适用于需要知道“绝对机械角度”的应用。在此模式下每当编码器的索引脉冲QEPI到来时位置计数器QPOSCNT会在下一个正交时钟边沿被复位。正转时复位到0。反转时复位到QPOSMAX用户设定的最大值通常为4N - 1N为编码器线数。如图21-8所示对于一个1000线的编码器QPOSMAX 4000 - 1 0xF9F索引脉冲会将计数器对齐到一个已知的绝对机械零点。模块会记住第一次索引事件发生时的正交边沿和方向后续所有复位都必须对齐到相同的边沿条件否则会触发位置错误标志PCEF。应用场景机械臂关节、旋转平台等需要上电后寻找机械原点的场合。配合QPOSILAT索引位置锁存寄存器可以在索引事件发生时瞬间锁存当前位置值用于校准或触发同步动作。3.2.2 最大位置复位模式PCRM01在此模式下位置计数器达到QPOSMAX值后会在下一个时钟自动复位到0反之向下计数到0后会跳变到QPOSMAX。索引信号在此模式下不会复位计数器。应用场景模拟一个“无限”旋转的编码器或者用于需要模数运算的位置环。例如在永磁同步电机的矢量控制中电角度需要周期性地在0到2π之间变化这种模式就非常合适。QPOSMAX可以设置为电角度的周期值例如对于4极对电机机械旋转一圈电角度变化720度若每个count代表1度则QPOSMAX719。3.2.3 首索引事件复位模式PCRM10此模式与索引事件复位模式类似但只会在第一个索引脉冲到来时复位一次位置计数器之后的索引脉冲将不再触发复位。方向信息以第一次复位时的方向为准。应用场景系统上电或复位后只需要一次绝对位置对齐之后便进行相对位置累积计数。适用于那些启动时需要找零但运行过程中不允许位置计数器被意外清零的场合。3.2.4 单位时间超时复位模式PCRM11此模式专为速度测量设计。位置计数器在一个由QUPRD定义的单位时间周期内自由计数。当单位时间定时器QUTMR达到QUPRD时会产生一个“单位时间超时”事件此时位置计数器的值会被锁存到QPOSLAT寄存器然后位置计数器复位到0开始下一个周期的计数。应用场景这是实现M法测速的硬件基础。速度计算公式为速度 (counts/单位时间) QPOSLAT / 1个单位时间。通过设置合适的QUPRD例如对应1ms、10ms可以定期、固定频率地获取速度反馈非常适合数字速度环的控制。3.3 速度测量高低速结合的智慧手册的引言部分第889页提到了速度估算的两个经典公式这直接对应eQEP的两种测速方式也是工程实践中必须理解的权衡。公式27M法高频测速v(k) [x(k) - x(k-1)] / T。其中T是固定的采样周期即单位时间。这对应上述的单位时间超时复位模式。在高速时单位时间内捕获的脉冲数多速度分辨率高测量准确。公式28T法低频测速v(k) X / [t(k) - t(k-1)]。其中X是固定的位置增量例如1个count。这对应eQEP的边沿捕获单元QCAP模式。在低速时脉冲间隔时间长测量这个间隔时间反而能得到更精确的速度值。eQEP的巧妙之处在于它同时支持这两种模式高速测量M法使用PCCU的单位时间超时模式。配置好QUPRD使能UTO中断在中断中读取QPOSLAT即可得到速度。低速测量T法使用QCAP单元。该单元内部有一个定时器QCTMR和周期寄存器QCPRD。可以配置为在捕获到一定数量的编码器脉冲例如1个、2个、4个等后产生中断并锁存定时器的值。速度计算公式为速度 (预设的脉冲数 * 系统时钟周期) / 锁存的定时器值。工程实践建议在电机全速范围内实现高精度测速通常需要混合策略。在高速区主要依赖M法在低速区切换到T法。可以在软件中设置一个速度阈值根据当前速度值动态判断使用哪个模块的数据或者对两者的结果进行加权融合。eQEP的硬件直接提供了这两种数据源大大减轻了CPU的负担。3.4 关键配置步骤与代码框架以下是一个典型的eQEP初始化配置流程用于正交计数和索引复位// 1. 配置GPIO复用为eQEP功能 (此处以TI C2000为例具体寄存器请参考数据手册) // 假设使用EQEP1 GPIO20/21/23 分别作为 QEPA, QEPB, QEPI GpioCtrlRegs.GPAMUX2.bit.GPIO20 1; // 配置GPIO20为EQEP1A GpioCtrlRegs.GPAMUX2.bit.GPIO21 1; // 配置GPIO21为EQEP1B GpioCtrlRegs.GPAMUX2.bit.GPIO23 1; // 配置GPIO23为EQEP1I // 2. 初始化eQEP寄存器 EQep1Regs.QUPRD 0xFFFFFFFF; // 单位周期寄存器先设最大若不用M法则无关紧要 EQep1Regs.QWDPRD 0xFFFF; // 看门狗周期防止信号丢失 EQep1Regs.QDECCTL.bit.QSRC 0; // 00: 正交计数模式 EQep1Regs.QDECCTL.bit.XCR 0; // 0: 使用4倍频计数推荐 EQep1Regs.QDECCTL.bit.SWAP 0; // 0: 不交换A/B相输入 EQep1Regs.QDECCTL.bit.IGATE 0; // 0: 禁止索引门控 EQep1Regs.QDECCTL.bit.QAP 0; // A相输入极性0: 不反相 EQep1Regs.QDECCTL.bit.QBP 0; // B相输入极性 EQep1Regs.QDECCTL.bit.QIP 0; // 索引输入极性 // 3. 配置位置计数器控制 EQep1Regs.QEPCTL.bit.FREE_SOFT 2; // 仿真挂起时eQEP继续运行 EQep1Regs.QEPCTL.bit.PCRM 0; // 00: 索引事件复位模式 EQep1Regs.QEPCTL.bit.UTE 0; // 0: 禁用单位定时器若不用M法则禁用 EQep1Regs.QEPCTL.bit.QCLM 0; // 0: 索引事件发生时锁存位置计数器 EQep1Regs.QEPCTL.bit.IEL 0; // 00: 在索引上升沿锁存根据编码器实际信号调整 EQep1Regs.QEPCTL.bit.SWI 0; // 0: 索引事件不产生位置计数器交换 EQep1Regs.QEPCTL.bit.SEL 0; // 0: 选择索引作为复位源 EQep1Regs.QEPCTL.bit.IEL 1; // 01: 在索引上升沿和下降沿都锁存如果编码器索引信号是脉冲 // 4. 设置位置计数器最大值 (例如对于2500线编码器4倍频后为10000 counts/rev) // 如果希望计数器在0~9999之间循环则QPOSMAX设为9999。 // 在索引复位模式下反转时复位到此值。 EQep1Regs.QPOSMAX 10000 - 1; // 0x270F // 5. 使能看门狗 EQep1Regs.QEPCTL.bit.WDE 1; // 使能eQEP看门狗 // 6. 清零位置计数器并启动 EQep1Regs.QPOSCNT 0; EQep1Regs.QEPCTL.bit.QPEN 1; // 使能eQEP位置计数器 // 7. 配置中断例如索引事件中断、单位时间超时中断、看门狗超时中断 EQep1Regs.QEINT.bit.IEL 1; // 使能索引事件中断 // EQep1Regs.QEINT.bit.UTO 1; // 使能单位时间超时中断如果使用M法 // EQep1Regs.QEINT.bit.WDOG 1; // 使能看门狗中断4. 实战经验与避坑指南纸上得来终觉浅绝知此事要躬行。手册上的原理很完美但实际调试中会遇到各种问题。下面分享几个我踩过的坑和总结的技巧。4.1 eCAP模块常见问题信号毛刺与误触发eCAP的输入引脚对边沿非常敏感。如果被测信号有噪声或振铃会导致多次误触发捕获到错误的时间戳。务必在硬件上做好滤波例如在引脚附近添加RC低通滤波电路。同时eCAP模块内部有输入限定器可以通过配置ECCTL2.bit.CAPLDEN等相关位具体位名可能因型号而异需查手册来设置需要多少个系统时钟周期的稳定电平才确认为一个有效边沿软件上也要合理利用这个功能。计数器溢出处理无论是绝对模式还是差值模式32位的TSCTR计数器都有溢出的可能。在绝对模式下如果两次捕获事件间隔过长TSt2 - TSt1的计算结果可能是负数因为计数器从0xFFFFFFFF绕回0。必须在软件中做溢出判断。一个简单的办法是如果TSt2 TSt1则实际间隔 (0xFFFFFFFF - TSt1) TSt2 1。在差值模式下要监控CTROVF标志位。中断服务程序效率eCAP的中断可能发生在高频信号下。中断服务程序ISR应尽可能短小精悍只做读取寄存器、计算基本参数、存入缓冲区的操作。复杂的滤波、转换等算法应放到主循环或低优先级任务中处理。避免在ISR内进行浮点运算或调用耗时函数。APWM模式下的影子寄存器在APWM模式下CAP1周期和CAP2比较值寄存器有活动寄存器和影子寄存器之分。初始化时必须同时写入活动寄存器运行时通常只更新影子寄存器在下一个周期边界影子值才会加载到活动寄存器生效。直接写活动寄存器可能导致PWM输出出现毛刺。4.2 eQEP模块调试技巧编码器信号质量问题这是eQEP工作不正常的最常见原因。使用示波器同时观察QEPA和QEPB信号确保它们是干净、相位差90度的方波没有严重的过冲、振铃或毛刺。索引信号也要检查其宽度和与A/B相的相对位置是门控型还是非门控型。信号质量差会导致位置计数器偶尔跳变、方向误判QDF位翻转或相位错误PHE标志置位。“飞车”与位置计数器溢出/下溢在高速或连续单向旋转时32位的位置计数器也可能溢出从最大值跳回0或下溢从0跳回最大值。QFLG寄存器中的COEF和CUEF标志位会指示这种情况。在读取位置值QPOSCNT进行长距离累积位置计算时必须考虑溢出。通常需要用一个64位的软件变量来累积硬件计数器的变化。可以在每次读取QPOSCNT后与上次值比较将其差值考虑溢出累加到软件累积位置中。索引脉冲对齐与机械安装在“索引事件复位模式”下编码器索引脉冲的机械安装位置必须与你的机械零点对齐。如果不对齐每次上电复位后电机的“零位”都是错的。调试时可以让电机缓慢旋转观察QPOSILAT寄存器在索引事件发生时的值。如果这个值不是0或QPOSMAX并且PCEF错误标志被置位说明索引脉冲没有在预期的正交边沿上出现可能需要调整编码器安装或修改QEPCTL[IEL]索引边沿锁存选择的配置。速度测量的平滑处理无论是M法还是T法直接计算出的瞬时速度都可能含有高频噪声。在用于速度环控制前必须进行低通滤波。简单的移动平均滤波或一阶惯性滤波就能显著改善性能。对于T法测速在极低速时脉冲间隔时间会非常长更新率很低此时可以切换到开环控制或使用观测器估算速度。看门狗定时器的使用QWDOG看门狗定时器是一个非常有用的诊断工具。它监控QCLK信号。如果电机停止或编码器线缆断开QCLK停止看门狗就会超时并触发中断。在中断服务程序中可以将系统安全地置于故障状态如PWM输出禁用防止因速度反馈丢失而导致系统失控。5. 系统集成与性能优化将eCAP和eQEP集成到完整的电机控制或运动控制系统中还需要考虑一些系统级的问题。5.1 与CPU内核及外设的协作eCAP和eQEP都是独立于CPU工作的外设但它们产生的中断需要CPU及时响应。在复杂的系统中可能需要为eCAP用于电流采样同步、eQEP用于速度/位置反馈以及PWM中断分配不同的优先级。通常eCAP的中断用于关键保护或采样优先级最高eQEP的速度环中断次之位置环中断再次之。利用DMA可以进一步解放CPU。例如可以配置eCAP在捕获4个事件后自动通过DMA将CAP1-CAP4寄存器的值搬运到指定的内存缓冲区CPU只需定期处理缓冲区中的数据即可避免了频繁的中断。5.2 精度与分辨率考量eCAP的时间精度取决于系统时钟SYSCLKOUT和eCAP模块的预分频器PRESCALE。最终的时间戳分辨率 1 / (SYSCLKOUT / PRESCALE)。例如系统时钟150MHz预分频为1则时间戳分辨率约为6.67ns。测量误差主要来源于信号边沿与计数器时钟的异步性最大为一个时钟周期。eQEP的位置分辨率由编码器线数和eQEP的解码模式决定。4倍频模式下分辨率 4 * Ncounts/rev。对于速度测量M法的速度分辨率 (1 count) / (单位时间 T)。T越小速度更新率越高但低速时分辨率越差。需要根据电机的最低运行速度来权衡选择T。5.3 在实时操作系统中的使用在RTOS如TI的SYS/BIOS或FreeRTOS中eCAP/eQEP的中断服务程序应遵循“快进快出”原则。常见的做法是在ISR中读取数据、清除标志。通过消息队列、信号量或任务通知等方式唤醒一个专门的数据处理任务Task。数据处理任务负责进行复杂的计算、滤波、以及更新控制算法中的状态变量如位置、速度。 这种架构保证了中断响应时间的确定性并将耗时操作从ISR中剥离提高了系统的实时性和可靠性。调试时可以利用RTOS的分析工具如CPU负载图、任务执行时间统计来监控eCAP/eQEP相关中断和任务的执行情况确保它们不会占用过多的CPU时间也不会因为优先级设置不当而导致其他关键任务被阻塞。