TMS320F2837xS eCAP模块深度解析:Delta捕获与APWM模式实战

TMS320F2837xS eCAP模块深度解析:Delta捕获与APWM模式实战 1. 项目概述与核心价值在电机控制、数字电源或者任何需要精确测量外部信号时序的嵌入式实时系统中我们常常需要回答两个关键问题这个脉冲的宽度是多少两个上升沿之间隔了多久传统做法是开启一个通用定时器在中断里读取计数值然后做减法。这种方法在低速场景下尚可一旦信号频率升高或者系统负载加重频繁的中断和软件计算就会成为性能瓶颈甚至引入不可预测的抖动。TMS320F2837xS微控制器内置的增强型捕获模块就是为了从根本上解决这个问题而设计的硬件外设。eCAP模块的核心价值在于它将高精度的时间测量和灵活的波形生成能力直接固化在了芯片的硬件逻辑里。它不仅仅是一个简单的“输入捕获”单元更是一个高度可配置的“时间处理器”。其最巧妙的设计在于两种模式的切换捕获模式和辅助脉宽调制模式。在捕获模式下它像一个高速、精准的“秒表”能自动记录外部事件的精确时刻甚至可以直接计算出相邻事件的时间差在APWM模式下它又摇身一变成为一个独立的PWM信号发生器可以输出频率和占空比可调的波形。这种“一芯两用”的设计极大地提高了硬件资源的利用率和系统设计的灵活性。对于从事电机驱动、逆变器、电源管理或需要精密时序控制的工程师来说深入理解eCAP模块尤其是其Delta差分模式和APWM模式意味着你能将一部分关键的、实时性要求极高的任务从CPU中卸载出来交给硬件去自动完成。这不仅能降低CPU负载更能实现更稳定、更精确的控制是提升产品性能与可靠性的关键一步。接下来我将结合手册原理和实际项目经验为你彻底拆解eCAP模块的工作机制、配置要点以及那些手册上不会写的避坑技巧。2. eCAP模块架构与核心寄存器精讲要玩转eCAP不能只停留在调用DriverLib函数的层面必须深入其硬件架构和寄存器配置。只有这样当遇到诡异的问题时你才能快速定位是配置错误、时序问题还是硬件本身的限制。2.1 核心工作单元时间戳计数器与四深度捕获寄存器eCAP模块的心脏是一个32位的时间戳计数器。你可以把它想象成一个永不停止的电子秒表它的“滴答”频率由系统时钟经过预分频后提供。当外部引脚CAPx/APWMx上发生我们感兴趣的事件比如一个上升沿时这个“秒表”的当前值会被瞬间“拍照”锁存并存入一个名为CAP1-CAP4的四个32位寄存器队列中。这里的关键在于Mod4计数器。这是一个2位的内部状态机决定了当前事件的时间戳该存入CAP1、CAP2、CAP3还是CAP4。每次有效捕获事件发生后Mod4计数器会自动加1或在连续模式下循环。这就构成了一个深度为4的硬件FIFO可以连续记录最多4个事件的时间戳而无需CPU立即干预。2.2 控制逻辑与模式选择ECCTL1和ECCTL2寄存器详解模块的行为完全由两个控制寄存器ECCTL1和ECCTL2支配。配置它们就像给这个硬件模块编写“行为准则”。ECCTL1寄存器主要负责事件捕获的细节控制CAPxPOL (位0, 2, 4, 6)这四个位分别设置四个捕获事件的边沿极性。设置为0是上升沿触发1是下降沿触发。这是实现脉宽测量的基础你可以设置CAP1为上升沿触发CAP2为下降沿触发这样就能自动捕获一个脉冲的高电平时间。CTRRSTx (位1, 3, 5, 7)这是Delta模式的灵魂所在。如果某个CTRRSTx位被置1那么在对应的第x个捕获事件发生后硬件在完成时间戳锁存到CAPx寄存器后会立即将TSCTR计数器清零。这就是“差分”模式的由来——每个捕获值直接就是距离上一个事件的时间间隔省去了软件做减法的步骤。CAPLDEN (位8)捕获使能位。必须置1时间戳才会被加载到CAP1-CAP4寄存器。有时候为了调试可以先关闭它观察事件标志位而不更新捕获值。PRESCALE (位13-9)事件预分频器。它不是对TSCTR时钟分频而是对输入信号进行滤波分频。例如设置为“除以2”意味着只有连续检测到2个有效的边沿事件才会产生一个内部的捕获事件。这对于滤除信号上的毛刺极其有用是工程中提升稳定性的必备设置。ECCTL2寄存器决定了模块的宏观工作模式CAP/APWM (位9)模式选择总开关。0 捕获模式1 APWM模式。这个位是互斥的两种模式下的寄存器功能和行为完全不同。CONT/ONESHT (位0)连续模式与单次模式。在捕获模式下连续模式会让Mod4计数器在达到STOP_WRAP值后自动归零循环捕获。单次模式则在达到STOP_WRAP值后停止等待软件重新“武装”。STOP_WRAP (位2-1)在单次模式下它定义在发生第几个事件后停止1-4。在连续模式下它定义Mod4计数器在哪个值后归零即FIFO的深度。通常设置为3即0b11使用全部4个捕获寄存器。APWMPOL (位10)仅在APWM模式下有效设置输出PWM的极性高有效或低有效。实操心得在切换CAP/APWM模式前务必先停止TSCTR计数器。手册的配置流程建议里隐含了这一点先配置再使能。我曾遇到过在计数器运行时切换模式导致比较逻辑混乱输出异常的问题。稳妥的做法是在ECCTL2中先通过TSCTRSTOP位停止计数器修改CAP/APWM位完成新模式下所有其他配置后再启动计数器。2.3 影子寄存器机制实现无毛刺PWM输出的关键这是eCAP模块设计精妙之处尤其在APWM模式下至关重要。CAP1/CAP2是活动寄存器直接参与当前的PWM周期和比较匹配。CAP3/CAP4则是它们对应的影子寄存器。在APWM模式下CAP3映射为周期影子寄存器APRD shadow。CAP4映射为比较值影子寄存器ACMP shadow。硬件机制保证了只有在当前PWM周期结束时TSCTR与APRD匹配复位时影子寄存器CAP3/CAP4中的值才会被同步加载到活动寄存器CAP1/CAP2中。这意味着你可以在任何时刻安全地更新CAP3或CAP4来改变下一个周期的频率或占空比而不会打断或扭曲当前正在输出的PWM波形实现了“无毛刺”更新。这对于电机控制中需要平滑改变转速或电压的场景是必不可少的。3. Delta差分捕获模式深度解析与实战Delta模式是eCAP在捕获模式下的“杀手锏”应用。它通过硬件自动计算时间差将CPU从繁琐的减法运算和溢出处理中解放出来。3.1 工作原理硬件自动清零与直接周期读取在普通绝对时间戳模式下TSCTR计数器自由运行。要计算周期CPU需要读取两次捕获值比如CAP1和CAP2然后考虑计数器可能溢出进行一个减法运算。公式大致是Period (CAP2 - CAP1) 0xFFFFFFFF。而在Delta模式下配置变得非常直接。以测量一个方波的周期为例假设我们只关心上升沿将CAP1POL和CAP2POL都设置为上升沿触发。关键一步将CTRRST1对应CAP1事件置1将CTRRST2对应CAP2事件也置1。设置STOP_WRAP 2或4CONT/ONESHT 0连续模式。当第一个上升沿事件1到来时TSCTR的当前值被锁存到CAP1然后TSCTR立即被复位为0并开始重新计数。当第二个上升沿事件2到来时TSCTR从0开计数的值被锁存到CAP2然后TSCTR再次被清零。此时CAP2寄存器中存储的值直接就是从第一个上升沿到第二个上升沿的时间间隔也就是信号的周期T。CPU无需做任何计算直接读取CAP2即可得到周期值。CAP3、CAP4则存储后续的周期以此类推。3.2 双沿触发实现占空比测量手册中的图15-15展示了更强大的应用同时捕获上升沿和下降沿来测量占空比。配置如下CAP1POL 0 (上升沿) CTTRST1 1CAP2POL 1 (下降沿) CTTRST2 1CAP3POL 0 (上升沿) CTTRST3 1CAP4POL 1 (下降沿) CTTRST4 1这样在一个完整的PWM周期内CAP1第一个上升沿时刻TSCTR复位后从0开始。CAP2紧随其后的下降沿时刻。CAP2的值就是高电平时间T_on。CAP3下一个上升沿时刻。CAP3的值就是整个周期T_period因为TSCTR在CAP2事件时被清零了CAP3记录的是从下降沿到下一个上升沿的时间即低电平时间T_off。但注意此时周期T_period CAP2 CAP3。CAP4再下一个下降沿时刻。因此通过简单读取高电平时间T_on CAP2周期T_period CAP2 CAP3占空比Duty (CAP2 / (CAP2 CAP3)) * 100%所有计算所需的原始数据都已由硬件准备好且是直接的时间计数值软件开销极小。3.3 中断策略与数据读取流程在连续模式下Mod4计数器会循环例如0-1-2-3-0...。我们需要决定何时读取数据以及处理数据。一个稳健的策略是利用CEVT1中断。为什么是CEVT1因为在四事件循环中当Mod4计数器回到0即准备下一次写入CAP1时意味着CAP1-CAP4这组四个寄存器已经存储了一组完整的新数据。此时触发CEVT1中断在中断服务程序中可以安全地一次性读取CAP1、CAP2、CAP3、CAP4四个寄存器。此时读取到的是一组在时间上连续且完整的数据帧软件只需简单搬运到自己的缓冲区进行计算或处理即可无需担心读到一半数据被覆盖。配置示例代码片段基于DriverLib#include driverlib.h” void configureECAP1_DeltaMode(void) { // 1. 初始化GPIO将指定引脚配置为eCAP1功能 GPIO_setPinConfig(GPIO_16_ECAP1); GPIO_setPadConfig(16, GPIO_PIN_TYPE_STD); // 根据实际需要配置上下拉 // 2. 停止并初始化eCAP模块 ECAP_stopCounter(ECAP1_BASE); ECAP_initModule(ECAP1_BASE); // 3. 配置ECCTL1事件极性与Delta模式 // 上升沿触发CAP1和CAP3下降沿触发CAP2和CAP4 ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_1, ECAP_EV_POL_RISING); ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_2, ECAP_EV_POL_FALLING); ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_3, ECAP_EV_POL_RISING); ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_4, ECAP_EV_POL_FALLING); // 使能Delta模式每个事件后复位计数器 ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_1); ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_2); ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_3); ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_4); // 使能捕获寄存器加载 ECAP_enableTimeStampCapture(ECAP1_BASE); // 可选设置事件滤波预分频如除2以抗干扰 ECAP_setEventPrescaler(ECAP1_BASE, 1); // 1对应除以2 // 4. 配置ECCTL2连续模式使用全部4个捕获寄存器 ECAP_setCaptureMode(ECAP1_BASE, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_4); // 在EVENT4后Wrap ECAP_enableCaptureMode(ECAP1_BASE); // 设置为捕获模式 // 5. 配置中断在CEVT1Mod4计数器归零时触发 ECAP_enableInterrupt(ECAP1_BASE, ECAP_INT_CEVT1); ECAP_clearInterrupt(ECAP1_BASE, ECAP_INT_CEVT1); // 清除可能存在的假标志 Interrupt_register(INT_ECAP1, ECAP1_ISR); // 注册中断服务函数 Interrupt_enable(INT_ECAP1); // 6. 启动计数器 ECAP_startCounter(ECAP1_BASE); } // 中断服务例程 __interrupt void ECAP1_ISR(void) { uint32_t cap1, cap2, cap3, cap4; uint32_t high_time, period, duty; // 读取一组完整的捕获值 cap1 ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_1); cap2 ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_2); cap3 ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_3); cap4 ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_4); // 计算高电平时长和周期 (假设时钟分频已知转换为时间单位) high_time cap2; // CAP2是上升沿到下降沿的计数值 period cap2 cap3; // CAP2 CAP3 为一个完整周期 if (period ! 0) { duty (high_time * 100) / period; // 计算占空比百分比 } // 将数据存入全局变量或缓冲区供主循环处理 g_ecap1_duty duty; g_ecap1_period period; // 必须清除中断标志 ECAP_clearInterrupt(ECAP1_BASE, ECAP_INT_CEVT1); ECAP_clearGlobalInterrupt(ECAP1_BASE); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3); // F2837xS的中断组确认 }避坑指南计数器溢出处理即使是在Delta模式下TSCTR在两次事件间也可能溢出从0xFFFFFFFF翻转到0。手册中提到溢出时会设置CTROVF标志。在超高精度或测量极长间隔时需要关注此标志。一种常见做法是在中断中检查CTROVF标志。如果发生溢出意味着单个32位计数器不足以表示时间间隔你需要结合溢出次数进行计算。更简单的方法是根据信号的最大预期频率和TSCTR的时钟合理设置预分频确保在最大间隔内计数器不会溢出。例如系统时钟150MHz预分频后TSCTR时钟为75MHz则每个计数代表约13.33ns。32位计数器的最大范围约为57秒。对于大多数电机PWM信号kHz级别这完全足够。4. APWM模式将捕获器变为PWM发生器APWM模式展现了eCAP模块的灵活性。当系统自带的ePWM模块不够用或者需要一些简单的、独立的PWM信号时eCAP可以临时“客串”一个PWM发生器。4.1 工作原理与配置映射在APWM模式下模块的内部逻辑发生了根本性变化TSCTR计数器变成一个从0向上计数到达周期值APRD后自动复位的标准PWM时基计数器。CAP1寄存器变为活动周期寄存器APRD Active存储当前PWM周期的计数值。CAP2寄存器变为活动比较寄存器ACMP Active存储当前PWM比较值决定输出翻转点。CAP3寄存器变为周期影子寄存器APRD Shadow用于写入新的周期值。CAP4寄存器变为比较值影子寄存器ACMP Shadow用于写入新的比较值。引脚功能从输入变为输出直接输出PWM波形。PWM的生成逻辑很简单TSCTR从0开始计数在计数值小于ACMP时输出有效电平由APWMPOL位定义高有效或低有效当计数值等于或大于ACMP但小于APRD时输出无效电平当TSCTR等于APRD时计数器复位为0并同时将影子寄存器CAP3/CAP4的值加载到活动寄存器CAP1/CAP2开始一个新的周期。4.2 配置步骤与同步功能配置eCAP为APWM模式相对直接但有几个细节需要注意时基配置TSCTR的时钟源通常来自系统SYSCLK可以通过预分频控制。在APWM模式下ECCTL1中的预分频位PRESCALE通常不使用或保持默认旁路因为输入事件滤波不再需要。PWM频率由APRD值和TSCTR时钟频率决定PWM_Freq TSCTR_Clock / (APRD 1)。影子寄存器加载机制这是实现无毛刺更新的核心。在APWM模式下影子寄存器到活动寄存器的加载只能发生在TSCTR等于APRD的周期边界时刻。这意味着如果你在周期中间修改了CAP3或CAP4新值不会立即生效而是会等到当前周期结束、下一个周期开始时才生效。同步输入与输出eCAP的APWM模式支持与其他eCAP或ePWM模块同步。SYNCI_EN位使能同步输入当外部同步信号到来时TSCTR会被加载CTRPHS寄存器中的值从而实现相位控制。SYNCO_SEL位则选择同步输出源可以将本模块的周期匹配事件CTRPRD作为同步信号输出用于触发其他模块。这在需要多个PWM通道保持特定相位关系的应用中非常有用例如三相逆变器。配置示例代码片段void configureECAP2_APWMMode(uint32_t period, uint32_t compare) { // 1. 初始化GPIO为eCAP2输出功能 GPIO_setPinConfig(GPIO_6_ECAP2); GPIO_setPadConfig(6, GPIO_PIN_TYPE_STD); GPIO_setDirectionMode(6, GPIO_DIR_MODE_OUT); // 配置为输出 // 2. 停止并初始化模块 ECAP_stopCounter(ECAP2_BASE); ECAP_initModule(ECAP2_BASE); // 3. 配置为APWM模式并设置输出极性为高有效 ECAP_enableAPWMMode(ECAP2_BASE); ECAP_setAPWMPolarity(ECAP2_BASE, ECAP_APWM_ACTIVE_HIGH); // 4. 设置PWM周期和比较值通过影子寄存器 // 注意直接设置活动寄存器可能在运行时产生毛刺。应通过影子寄存器设置。 ECAP_setAPWMShadowPeriod(ECAP2_BASE, period); // 写入CAP3 (APRD shadow) ECAP_setAPWMShadowCompare(ECAP2_BASE, compare); // 写入CAP4 (ACMP shadow) // 5. 可选如果需要在第一个周期开始前手动同步一次将影子值加载到活动寄存器 // ECAP_loadCounter(ECAP2_BASE); // 软件强制同步 // 6. 启动计数器 ECAP_startCounter(ECAP2_BASE); } // 运行时动态更新占空比 void updateECAP2_DutyCycle(uint32_t new_compare) { // 安全地更新比较值直接写入影子寄存器CAP4 ECAP_setAPWMShadowCompare(ECAP2_BASE, new_compare); // 新的比较值将在当前PWM周期结束后自动生效无毛刺。 }4.3 APWM模式下的中断应用在APWM模式下有两个关键的中断源非常有用CTRPRD中断当TSCTR计数器达到周期值APRD时触发。这是周期中断可以用于在每一个PWM周期开始时执行一些任务例如更新下一个周期的控制算法计算结果。由于影子寄存器也是在此时加载所以在这个中断里更新CAP3/CAP4是安全的但要注意计算速度避免错过下一个周期。CTRCMP中断当TSCTR计数器达到比较值ACMP时触发。这是比较匹配中断可以用于在PWM脉冲的上升沿或下降沿取决于极性执行精确的定时操作。重要提示在APWM模式下捕获事件中断CEVT1-4是无效的因为模块不再处于捕获状态。同样在捕获模式下CTRPRD和CTRCMP中断也是无效的。配置中断时务必注意模式匹配。5. 实战进阶从单模块到多模块协同在实际系统中单个eCAP模块可能不够用或者需要与其他定时器模块协同工作。5.1 多eCAP模块的同步与相位控制假设你需要两个同频率但有一定相位差的PWM信号。你可以将两个eCAP模块都配置为APWM模式并利用同步链来实现。将第一个eCAP模块例如ECAP1配置为主模块。设置其SYNCO_SEL为输出CTRPRD事件。将第二个eCAP模块例如ECAP2配置为从模块。使能其SYNCI_EN并将其同步输入连接到主模块的同步输出这通常通过芯片内部的同步信号网络完成具体连接方式参考芯片数据手册的“输入X-Bar”和“输出X-Bar”部分。在从模块ECAP2中设置CTRPHS寄存器为一个非零值。这个值定义了相位偏移量。当从模块收到主模块的同步信号时它的TSCTR不会复位为0而是被加载为CTRPHS的值。因此从模块的PWM波形将相对于主模块有一个固定的相位延迟计算公式为相位延迟时间 CTRPHS * TSCTR时钟周期。这种硬件同步的相位控制精度极高不受软件中断延迟的影响非常适合驱动需要严格相位关系的多相桥式电路。5.2 eCAP与ePWM模块的联动eCAP和ePWM是C2000系列中功能互补的兄弟模块。一个常见的应用模式是使用一个ePWM模块产生一个高精度的PWM波形同时使用一个eCAP模块工作在Delta捕获模式来精确测量这个PWM波形的实际输出特性如上升沿抖动、死区时间等实现闭环监测。或者用ePWM产生复杂的多通道互补PWM而用eCAP生成一个简单的、独立的风扇控制PWM信号。它们的寄存器结构和时钟源通常是同源的因此可以共享相同的时基同步信号确保整个系统有一个统一的时间基准。6. 软件驱动层最佳实践与调试技巧虽然直接操作寄存器能带来最大的控制力但TI提供的DriverLib库函数极大地提高了开发效率和代码可读性。理解寄存器与库函数的对应关系如手册中的Table 15-16至关重要。6.1 初始化流程的黄金法则无论配置哪种模式一个健壮的初始化流程应遵循以下顺序这能避免很多难以排查的硬件状态混乱问题禁用全局中断DINT;或Interrupt_disableMaster();停止eCAP计数器ECAP_stopCounter(ecapBase);禁用所有eCAP中断ECAP_disableInterrupt(ecapBase, ECAP_INT_ALL);清除所有可能悬空的中断标志ECAP_clearInterrupt(ecapBase, ECAP_INT_ALL);ECAP_clearGlobalInterrupt(ecapBase);进行模块所有配置包括GPIO复用、控制寄存器ECCTL1/ECCTL2、周期/比较值、相位值等。使能特定的eCAP中断ECAP_enableInterrupt(ecapBase, desiredIntSource);启动eCAP计数器ECAP_startCounter(ecapBase);最后使能全局中断EINT;或Interrupt_enableMaster();6.2 调试与问题排查实录在实际开发中你可能会遇到以下典型问题问题1配置了捕获模式但读到的CAPx寄存器值始终为0。排查思路检查GPIO复用这是最常见的原因。确认引脚是否已正确配置为eCAP功能而非普通的GPIO输入。使用GPIO_setPinConfig函数。检查输入信号用示波器或逻辑分析仪确认引脚上是否有预期的边沿信号。注意eCAP引脚通常有输入限定器极高速的毛刺可能无法触发。检查CAPLDEN位确保ECCTL1[8]捕获使能位已设置为1。DriverLib函数是ECAP_enableTimeStampCapture。检查事件极性确认CAPxPOL位设置与输入信号边沿匹配。检查预分频如果设置了事件预分频如除4则需要连续4个有效边沿才产生一次捕获。对于低频信号这可能造成“无捕获”的假象。调试初期可先设置为旁路除1。问题2APWM模式没有波形输出或输出恒定电平。排查思路确认模式首要检查ECCTL2[9]CAP/APWM位是否已设置为1APWM模式。DriverLib函数是ECAP_enableAPWMMode。检查GPIO方向在APWM模式下引脚必须是输出模式。除了复用功能还要用GPIO_setDirectionMode设置为输出。检查周期和比较值确认写入APRD通过CAP3影子寄存器和ACMP通过CAP4影子寄存器的值是合理的。确保APRD 0且ACMP APRD。如果ACMP 0输出可能恒为低高有效时或恒为高低有效时如果ACMP APRD输出可能恒为高高有效时。检查计数器是否运行确认ECCTL2[4]TSCTRSTOP是否为1运行。DriverLib函数ECAP_startCounter会设置此位。使用软件同步在初始化后、启动计数器前尝试调用一次ECAP_loadCounter来强制将影子寄存器的值加载到活动寄存器。有时硬件在初始上电时影子到活动的加载逻辑需要一次触发。问题3中断无法进入或进入一次后不再进入。核心原因中断标志未清除。这是嵌入式开发中最经典的错误。解决方案在中断服务程序的末尾必须清除两个标志清除特定的中断事件标志ECAP_clearInterrupt(ecapBase, intSource);清除全局中断标志ECAP_clearGlobalInterrupt(ecapBase);对于F2837xS还需要清除对应的PIE组应答位Interrupt_clearACKGroup(group);eCAP1通常在GROUP3。排查步骤可以在中断服务程序入口点设置一个断点或翻转一个测试引脚。如果程序从未进入检查中断向量表配置、PIE使能、全局中断使能。如果只进入一次百分百是中断标志清除有问题。问题4Delta模式下测量的周期值跳动很大不准确。可能原因信号噪声输入信号有毛刺导致误触发。解决方案启用事件滤波预分频ECCTL1的PRESCALE字段。设置为2或4可以有效滤除窄毛刺。计数器溢出在测量极低频率信号时TSCTR可能在两个事件间溢出多次。虽然Delta模式每次事件后清零但如果信号周期超过(0xFFFFFFFF * 时钟周期)则会在一次测量内溢出。解决方案提高TSCTR时钟预分频降低计数频率以扩大测量范围或者使用软件结合溢出标志CTROVF进行扩展计数。中断延迟如果依赖中断读取数据且中断被长时间关闭或高优先级中断打断可能导致捕获寄存器被新数据覆盖读到错误的值。解决方案使用DMA将捕获寄存器值自动搬运到内存或者确保中断服务程序尽可能短小高效。在连续模式下利用CEVT1中断读取一整组4个数据是最稳妥的方式。掌握这些排查思路你就能独立解决eCAP应用中大部分令人头疼的问题。eCAP模块是一个强大的工具将其Delta模式的精准捕获能力和APWM模式的灵活生成能力结合运用可以为你设计的实时控制系统增添强大的硬件加速引擎。关键在于理解其硬件机制遵循正确的配置流程并在调试时系统地检查信号流、配置位和中断逻辑。