深入解析TI eCAP模块:从高精度捕获到多路同步PWM生成

发布时间:2026/7/20 14:49:28
深入解析TI eCAP模块:从高精度捕获到多路同步PWM生成 1. eCAP模块嵌入式时序控制的瑞士军刀在电机控制、数字电源或者任何需要精确时序的嵌入式项目里你肯定遇到过这样的问题需要测量一个脉冲信号的频率和占空比或者需要生成一组严格同步且相位可调的PWM波形。用软件轮询GPIO精度太差CPU占用率高得吓人。用通用定时器模拟逻辑复杂资源占用多同步更是噩梦。这时候如果你用的是TI的C2000或者部分ARM Cortex-M系列微控制器那么你手边就藏着一件被严重低估的利器——增强型捕获模块也就是eCAP。我第一次在无刷电机驱动项目里深挖eCAP是因为需要同时捕获电机霍尔传感器的换相信号并生成互补PWM。当时觉得一个外设既能抓信号又能发信号是不是两边都做不精实际用下来才发现它把这两件事都做到了硬件级的高效和精准。简单来说你可以把eCAP理解为一个带4级深度FIFO和精密计时器的硬件“快照”相机或者一个可灵活配置的PWM信号发生器。它最核心的价值是把时间测量和波形生成这种对实时性要求极高的任务从软件中彻底解放出来交给专用硬件去完成从而为CPU减负让系统响应更 deterministic。这篇文章我就结合自己踩过的坑和项目经验带你彻底搞懂TI eCAP模块。我们不只停留在手册的寄存器描述而是深入它从捕获到PWM生成两种模式的工作原理、配置要点并通过几个典型的实战场景——比如测量脉冲宽度、生成多路同步PWM、实现三相交错电源的相位控制——来展示如何把它用活。无论你是正在调试电机驱动还是设计需要精密时序的测量设备这篇文章都能给你提供可直接“抄作业”的配置思路和避坑指南。2. 核心架构与工作模式解析要玩转eCAP不能只知其然必须知其所以然。它的设计非常巧妙通过一套硬件资源以不同的配置服务于两种截然不同的需求输入捕获和输出比较。我们先来拆解它的核心家当。2.1 硬件资源全景图eCAP模块的核心硬件可以概括为“一个核心两套逻辑四个仓库”。时间基准32位时间戳计数器这是eCAP的心脏一个32位向上计数器。在捕获模式下它自由运行记录当前的时间值在APWM模式下它工作在增减计数或向上计数模式作为PWM的时基。它的时钟源通常来自系统时钟分频精度直接决定了整个模块的测量或输出分辨率。事件识别与处理逻辑这是模块的“感官系统”。它连接到一个专用的输入/输出引脚。在捕获模式下该引脚是输入硬件可以检测上升沿、下降沿事件。在APWM模式下该引脚变为输出直接输出PWM波形。边缘检测极性是可编程的这是实现差分模式测量的关键。4级深度捕获寄存器这是模块的“记忆仓库”即CAP1、CAP2、CAP3、CAP4这四个32位寄存器。这是eCAP设计最精妙的地方它的角色在不同模式下完全不同捕获模式它们是只读的“快照”存储单元。当指定的事件如边沿发生时硬件会自动将此刻TSCTR计数器的值“抓拍”下来存入其中一个寄存器。四个寄存器可以构成一个环形缓冲区连续记录最多4个事件的时间戳。APWM模式它们变身为一组“影子寄存器”系统。CAP1和CAP2作为活动寄存器直接与比较器联动决定PWM的周期和比较值。CAP3和CAP4则作为它们的影子寄存器。你可以在任何时候安全地向影子寄存器写入新的周期或占空比值硬件会在下一个PWM周期开始时自动将其加载到活动寄存器从而实现PWM参数的无毛刺、平滑更新。灵活的工作模式切换这一切的魔法都源于一个关键的配置位ECCTL2.CAP_APWM。把它设为0整个硬件逻辑切换到捕获模式引脚变输入寄存器准备存时间戳。把它设为1硬件逻辑切换到APWM模式引脚变输出寄存器变成PWM发生器。这种硬件级的模式切换使得同一个物理模块可以根据系统需求被动态重定义极大地提高了资源利用率。2.2 捕获模式把时间“拍”下来捕获模式的本质是高精度的时间戳记录仪。想象一下你要测量一个方波的周期。最原始的方法是用CPU中断在上升沿中断里读取系统时间存下来下次上升沿再读一次两者相减。这个方法的问题在于中断响应有延迟而且频繁中断会拖垮CPU。eCAP的捕获模式把这一切都硬件化了。它的工作流程特别是差分模式是理解其价值的关键。绝对时间戳 vs. 差分时间戳绝对模式每次捕获事件发生时直接把TSCTR的当前值存入CAPx寄存器。你需要用软件做减法CAP2 - CAP1才能得到时间间隔。TSCTR会一直累加直到溢出归零。差分模式这是eCAP的杀手锏。通过配置ECCTL1.CTRRSTx位你可以让硬件在每次捕获事件发生后自动将TSCTR清零。这样下一次捕获到的时间戳直接就是两次事件之间的时间差省去了软件减法的步骤也避免了32位计数器溢出带来的计算复杂度。差分模式测量脉宽实例假设我们要测量一个PWM信号的高电平和低电平时间。配置流程如下设置CAP1捕获上升沿并设置CTRRST1 1第一次捕获后复位计数器。设置CAP2捕获下降沿并设置CTRRST2 1第二次捕获后复位计数器。设置CAP3捕获下一个上升沿CTRRST3 1。设置CAP4捕获下一个下降沿CTRRST4 1并将工作模式设置为连续模式。当信号输入后硬件会自动化执行以下操作第一个上升沿到来触发CEVT1将此刻TSCTR值假设为0存入CAP1然后TSCTR复位并开始从0计数。随后的下降沿到来触发CEVT2将TSCTR的当前值即高电平时间T1存入CAP2TSCTR再次复位。下一个上升沿到来触发CEVT3将TSCTR值即低电平时间T2存入CAP3TSCTR复位。再下一个下降沿到来触发CEVT4将TSCTR值下一个高电平时间T3存入CAP4TSCTR复位。此时Mod4计数器回绕下一个事件将覆盖CAP1如此循环。这样一来你只需要在中断中读取CAP2和CAP3就能直接得到高电平和低电平的计数值进而算出占空比。整个过程完全由硬件完成精度仅取决于时钟频率与软件延迟无关。注意在差分模式下CAP1中存储的值通常是上一个周期的低电平时间或0如果是第一个周期而CAP2、CAP3、CAP4则循环存储着最新的高、低电平时间。理解这个存储顺序对正确读取数据至关重要。2.3 APWM模式精准的波形“雕刻师”当CAP_APWM位被置1eCAP摇身一变成为一个功能齐全的PWM发生器。此时它的核心逻辑从“记录时间”转变为“比较时间”。PWM生成的基本原理在APWM模式下TSCTR计数器在0和周期值之间循环计数。CAP1寄存器被重新定义为周期活动寄存器CAP2被定义为比较活动寄存器。同时CAP3和CAP4作为它们的影子寄存器。当TSCTR从0开始计数小于比较值时输出有效电平由APWMPOL位定义高有效或低有效。当TSCTR等于或大于比较值但小于周期值时输出无效电平。当TSCTR计数到等于周期值时产生周期匹配事件TSCTR复位为0或从CTRPHS加载同时硬件动将CAP3和CAP4影子寄存器的值加载到CAP1和CAP2活动寄存器开始一个新的周期。影子寄存器的妙用这是实现PWM参数无毛刺更新的核心。假设电机控制算法计算出一个新的占空比。如果直接写入CAP2而写入的瞬间TSCTR刚好跨过这个新值就会导致当前PWM周期出现一个极窄或极宽的脉冲即“毛刺”这在电机驱动中是致命的。通过影子寄存器机制你可以安全地在任何时间将新值写入CAP4。硬件保证只在下一个周期开始时才生效从而确保了PWM输出的连续性和平滑性。同步与相位控制单个PWM生成并不稀奇eCAP的强大之处在于多模块协同。通过SYNCI和SYNCO信号多个eCAP模块可以串联起来。主模块可以配置为在TSCTR等于周期值时产生一个SYNCO同步输出脉冲。从模块可以配置为在接收到SYNCI同步输入脉冲时将其自身的TSCTR计数器复位为CTRPHS寄存器中设定的相位值。这就为实现多通道同步PWM和精确的相位控制提供了硬件基础。例如在三相逆变器中你可以让三个eCAP模块同步运行并分别设置不同的CTRPHS值从而让三路PWM波彼此相差120度电角度。3. 从捕获到APWM的实战配置详解理解了原理我们进入实战。手册里的寄存器表格往往让人望而生畏我们把它翻译成具体的、可操作的步骤和代码。3.1 捕获模式实战测量PWM信号频率与占空比假设我们需要测量一个频率约1kHz占空比可变的PWM信号。系统时钟SYSCLK为100MHz我们希望测量分辨率达到100ns。第一步引脚与时钟配置首先将对应的GPIO引脚复用为eCAP功能。例如在TI的C2000系列中可能需要配置GPxMUX寄存器。确保eCAP模块的时钟使能。第二步关键寄存器初始化以下是基于差分模式、连续捕获的配置代码及详解// 假设使用 eCAP1 模块 void ECAP1_CAP_Init(void) { // 1. 停止计数器确保安全配置 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_STOP; // 2. 配置事件捕获控制寄存器1 (ECCTL1) ECap1Regs.ECCTL1.bit.CAP1POL EC_RISING; // CAP1 捕获上升沿 ECap1Regs.ECCTL1.bit.CAP2POL EC_FALLING; // CAP2 捕获下降沿 ECap1Regs.ECCTL1.bit.CAP3POL EC_RISING; // CAP3 捕获上升沿 ECap1Regs.ECCTL1.bit.CAP4POL EC_FALLING; // CAP4 捕获下降沿 // 设置为差分模式每次捕获后复位计数器CAPx中直接存储时间间隔 ECap1Regs.ECCTL1.bit.CTRRST1 EC_DELTA_MODE; ECap1Regs.ECCTL1.bit.CTRRST2 EC_DELTA_MODE; ECap1Regs.ECCTL1.bit.CTRRST3 EC_DELTA_MODE; ECap1Regs.ECCTL1.bit.CTRRST4 EC_DELTA_MODE; ECap1Regs.ECCTL1.bit.CAPLDEN EC_ENABLE; // 使能捕获事件时自动加载CAPx寄存器 ECap1Regs.ECCTL1.bit.PRESCALE EC_DIV1; // 事件预分频设为1不分频 // 3. 配置事件捕获控制寄存器2 (ECCTL2) ECap1Regs.ECCTL2.bit.CAP_APWM EC_CAP_MODE; // 设置为捕获模式 ECap1Regs.ECCTL2.bit.CONT_ONESHT EC_CONTINUOUS; // 连续捕获模式 ECap1Regs.ECCTL2.bit.STOP_WRAP EC_WRAP_4; // 4个事件后回绕覆盖CAP1 ECap1Regs.ECCTL2.bit.SYNCI_EN EC_DISABLE; // 禁用外部同步输入 ECap1Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCO_DIS; // 禁用同步输出 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_RUN; // 启动TSCTR计数器 // 4. 配置中断可选如果需要实时处理 ECap1Regs.ECEINT.bit.CEVT4 1; // 使能第4次捕获事件中断一个完整周期结束 // ... 其他中断使能配置并连接至PIE和CPU }第三步中断服务程序与数据处理配置捕获完成中断后在中断服务程序中进行计算__interrupt void ECAP1_ISR(void) { volatile uint32_t high_time, low_time, period, duty_cycle_percent; // 读取捕获值。在差分模式下CAP2和CAP3通常对应一个完整周期的高电平和低电平时间 // 注意由于是环形缓冲需要根据当前Mod4计数器的状态判断哪个寄存器是最新数据 // 这里假设一个简单情况每次进入中断都是CEVT4触发即完成了一个完整的上升-下降-上升-下降循环 high_time ECap1Regs.CAP2; // 高电平时间计数值 low_time ECap1Regs.CAP3; // 低电平时间计数值 period high_time low_time; // 计算占空比百分比。注意防止除零和溢出。 if (period ! 0) { duty_cycle_percent (high_time * 100) / period; } else { duty_cycle_percent 0; } // 计算频率Hz。假设系统时钟为100MHz分频为1则每个计数周期为10ns。 float freq_hz 1.0 / ((float)period * 10e-9); // ... 将计算结果用于你的控制算法或发送出去 // 清除中断标志 ECap1Regs.ECCLR.bit.CEVT4 1; ECap1Regs.ECCLR.bit.INT 1; // 应答PIE中断 PieCtrlRegs.PIEACK.all PIEACK_GROUP4; }实操心得在差分模式下理解CAPx寄存器数据的“流水线”顺序是关键。一个稳健的做法是在中断中读取所有四个CAP寄存器并配合ECFLG寄存器中的事件标志位来重构完整的信号时序而不是假设固定的映射关系。这对于非对称或占空比快速变化的信号尤其重要。3.2 APWM模式实战生成单路与多路同步PWM现在我们切换到信号生成角色。假设我们需要用eCAP1生成一路频率为20kHz占空比为30%的PWM。第一步计算寄存器值系统时钟100MHz不分频。周期值 系统时钟 / PWM频率 100,000,000 / 20,000 5000比较值 周期值 * 占空比 5000 * 0.3 1500第二步单路PWM初始化配置void ECAP1_APWM_Single_Init(void) { // 1. 停止计数器 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_STOP; // 2. 配置为APWM模式并设置初始参数 ECap1Regs.CAP1 5000; // 设置周期活动寄存器 (APRD) ECap1Regs.CAP2 1500; // 设置比较活动寄存器 (ACMP) // 注意在APWM模式下写入CAP1/CAP2会同时写入其影子寄存器CAP3/CAP4实现立即加载。 ECap1Regs.ECCTL2.bit.CAP_APWM EC_APWM_MODE; // APWM模式 ECap1Regs.ECCTL2.bit.APWMPOL EC_ACTV_HI; // 高电平有效比较值对应高电平时间 ECap1Regs.ECCTL2.bit.SYNCI_EN EC_DISABLE; // 禁用同步输入主模式 ECap1Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCO_DIS; // 禁用同步输出单路不需要 ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_RUN; // 启动计数器 // 3. 使能周期匹配和比较匹配中断如果需要 ECap1Regs.ECEINT.bit.PRDEQ 1; ECap1Regs.ECEINT.bit.CMPEQ 1; }第三步动态更新占空比要安全地更新占空比必须写入影子寄存器CAP4void Update_ECAP1_DutyCycle(uint32_t new_compare_val) { // 安全更新写入影子寄存器CAP4将在下一个PWM周期开始时生效 ECap1Regs.CAP4 new_compare_val; // 注意不要直接写CAP2否则可能导致当前周期出现毛刺脉冲。 }第四步构建多路同步PWM系统这是eCAP的进阶应用。假设我们需要4路PWM频率分别为5kHz、10kHz、20kHz、25kHz且要求它们同步启动相位对齐。设计思路主模块选择频率最低的5kHz作为主模块eCAP1。将其配置为在周期匹配时产生同步输出脉冲SYNCO_SEL EC_CTR_PRD。从模块其他三个模块eCAP2, eCAP3, eCAP4配置为从模式使能同步输入SYNCI_EN EC_ENABLE并将同步源选择为SYNCI。位对齐所有从模块的CTRPHS寄存器设置为0这样它们在收到主模块的同步脉冲时TSCTR从0开始计数实现完全同步。主模块(eCAP1)配置// eCAP1 主模块 5kHz ECap1Regs.CAP1 20000; // 周期值 100MHz / 5kHz ECap1Regs.CAP2 7000; // 初始占空比 ECap1Regs.ECCTL2.bit.CAP_APWM EC_APWM_MODE; ECap1Regs.ECCTL2.bit.SYNCO_SEL EC_CTR_PRD; // 关键周期匹配时产生SYNCO ECap1Regs.ECCTL2.bit.TSCTRSTOP EC_RUN;从模块(eCAP2)配置// eCAP2 从模块 10kHz (2倍频于主模块) ECap2Regs.CAP1 10000; // 周期值 100MHz / 10kHz ECap2Regs.CAP2 2000; // 初始占空比 ECap2Regs.ECCTL2.bit.CAP_APWM EC_APWM_MODE; ECap2Regs.ECCTL2.bit.SYNCI_EN EC_ENABLE; // 关键使能同步输入 ECap2Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCI; // 同步输出选择为输入直通可选 ECap2Regs.ECCTL2.bit.TSCTRSTOP EC_RUN;eCAP3和eCAP4的配置类似只需设置各自的CAP1周期和CAP2比较值。注意事项在多模块同步时启动顺序很重要。应先启动所有从模块的计数器TSCTRSTOP EC_RUN最后再启动主模块。因为从模块在等待同步信号时计数器是停止的。如果先启动主模块从模块可能错过第一个同步脉冲。4. 高级应用三相交错DC-DC的相位控制在诸如三相交错并联Buck/Boost变换器这样的拓扑中各相PWM需要彼此间隔固定的相位差例如120°以减小输入输出电流纹波优化磁件尺寸。eCAP的相位控制功能为此而生。场景控制一个三相交错DC-DC变换器开关频率100kHz各相之间相位差120°。设计步骤确定主模块选择eCAP1作为主模块产生基准频率和同步信号。周期值 100MHz / 100kHz 1000。计算从模块相位偏移值相位差转换为时间偏移。一个周期360°对应1000个计数。eCAP2 需要滞后 120°CTRPHS2 (120/360) * 1000 ≈ 333eCAP3 需要滞后 240°CTRPHS3 (240/360) * 1000 ≈ 667注意实际计算需取整并考虑计数器是向上计数CTRPHS是计数器被同步时的加载值。配置主模块使能周期同步输出。配置从模块使能同步输入并设置各自的CTRPHS值。配置代码关键片段// eCAP1 主模块配置 ECap1Regs.CAP1 1000; // 100kHz 周期 ECap1Regs.CTRPHS 0; // 主模块相位为0 ECap1Regs.ECCTL2.bit.SYNCO_SEL EC_CTR_PRD; // 周期匹配时发出同步脉冲 // eCAP2 从模块配置 (滞后120°) ECap2Regs.CAP1 1000; // 相同频率 ECap2Regs.CTRPHS 333; // 关键设置相位偏移 ECap2Regs.ECCTL2.bit.SYNCI_EN EC_ENABLE; ECap2Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCI; // 可继续传递同步信号 // eCAP3 从模块配置 (滞后240°) ECap3Regs.CAP1 1000; ECap3Regs.CTRPHS 667; ECap3Regs.ECCTL2.bit.SYNCI_EN EC_ENABLE; ECap3Regs.ECCTL2.bit.SYNCO_SEL EC_SYNCO_DIS; // 最后一个模块可禁用同步输出工作原理 主模块eCAP1的TSCTR从0计数到999然后归零同时产生一个SYNCO脉冲。eCAP2和eCAP3在收到这个脉冲的瞬间会立即将自己的TSCTR计数器加载为CTRPHS寄存器中的值分别是333和667然后开始向上计数。这样三路PWM波就自然形成了120°的相位差。避坑指南相位值CTRPHS必须小于周期值CAP1。如果设置CTRPHS等于或大于CAP1在同步加载时计数器会立刻触发周期匹配或比较匹配导致输出异常。务必在软件中增加边界检查。5. 寄存器精讲与配置陷阱手册里的寄存器描述是权威但也是“天书”。我结合调试经验把几个最容易出错的寄存器配置要点提炼出来。5.1 ECCTL1捕获事件的“规则制定者”这个寄存器定义了硬件如何响应输入引脚的变化。CAPxPOL这是边沿极性选择。最常见的错误是设反了。记住0是上升沿1是下降沿。在差分测量脉宽时必须交替设置如上升、下降、上升、下降。CTRRSTx差分模式开关。设为1该事件捕获后TSCTR自动清零。绝对模式下所有CTRRSTx都应设为0差分模式下通常全部设为1以实现每次捕获后重新计时。CAPLDEN必须设为1使能否则事件发生时不会将时间戳存入CAPx寄存器你会永远读不到数据。PRESCALE事件预分频。用于滤除高频毛刺。如果输入信号有噪声可以设置一个分频值如2或4让硬件在连续检测到N个边沿后才认为是一个有效事件。但注意这会降低时间分辨率。5.2 ECCTL2模式与同步的“总开关”这是eCAP的“大脑”。CAP_APWM最关键的位。0捕获模式1APWM模式。模式切换后引脚功能、寄存器含义、计数器行为全部改变。务必在计数器停止时切换此模式。CONT_ONESHT连续/单次模式。捕获模式下0为连续模式环形缓冲1为单次模式捕获指定次数后停止。APWM模式下此位无效。STOP_WRAP在连续捕获模式下它定义环形缓冲区的“绕回点”。通常设为3即EC_WRAP_4表示在第4个事件后绕回CAP1。如果设为2则只使用CAP1-CAP3循环。SYNCI_EN / SYNCO_SEL同步控制的核心。SYNCI_EN1使能同步输入。当SYNCI引脚有事件时TSCTR会加载CTRPHS的值。在APWM模式下这是实现从模块相位控制的关键。SYNCO_SEL选择同步输出源。00直通输入01选择PRDEQ周期匹配事件10和11为禁用。在多模块同步中主模块应选01从模块可选00或禁用。APWMPOL仅APWM模式有效。决定了输出有效电平。0高有效比较值对应高电平时间1低有效。务必根据后续驱动电路如上桥臂驱动芯片是低有效还是高有效来正确设置。5.3 影子寄存器机制与更新策略这是APWM模式稳定性的基石也是最容易混淆的地方。活动寄存器CAP1APRD、CAP2ACMP。它们直接参与当前PWM周期的比较。影子寄存器CAP3APRD影子、CAP4ACMP影子。它们是后台寄存器。加载时机影子寄存器的值只在TSCTR等于周期值PRDEQ事件时才会被一次性加载到活动寄存器。更新策略立即加载直接写CAP1或CAP2。这会同时更新活动寄存器和对应的影子寄存器。风险是可能产生毛刺。影子加载写CAP3或CAP4。只更新影子寄存器在下一个周期开始时生效。这是运行时更新PWM参数的标准安全做法。手册中提到的“初始化时写活动寄存器”就是这个原因上电初始化时没有PWM输出不存在毛刺风险直接写CAP1/CAP2最方便。但在运行中动态调整必须使用CAP3/CAP4。6. 调试技巧与常见问题排查即使配置看起来完美实际调试中还是会遇到各种问题。下面是我总结的eCAP模块的“症状-诊断-解决”清单。问题现象可能原因排查步骤与解决方案捕获模式下读不到数据1. 引脚复用未配置。2.CAPLDEN位未使能。3. 计数器未启动(TSCTRSTOP)。4. 中断标志未清除导致后续事件不触发。1. 检查GPIO的MUX配置确保引脚功能选对。2. 确认ECCTL1.CAPLDEN 1。3. 确认ECCTL2.TSCTRSTOP 1。4. 在中断服务程序中读取数据后立即清除对应的CEVTx和全局INT标志。捕获的时间值异常大或为01. 差分/绝对模式配置错误。2. 计数器溢出处理不当。3. 事件预分频(PRESCALE)设置过大。1. 检查CTRRSTx位。想测间隔用差分模式(1)想测绝对时间用绝对模式(0)。2. 在绝对模式下TSCTR是32位会溢出。计算时间差时需做溢出处理delta (current previous) ? (current - previous) : (0xFFFFFFFF - previous current 1)。3. 检查PRESCALE如果信号频率不高但设了高分频可能导致长时间无“有效”事件。APWM模式无输出或波形不对1. 模式未切换(CAP_APWM0)。2. 引脚配置为输入。3. 周期或比较值为0。4. 同步信号导致计数器不运行。1. 确认ECCTL2.CAP_APWM 1。2. 即使配置为APWM模式部分芯片仍需将GPIO方向设置为输出。检查GPxDIR寄存器。3. 确保CAP1(周期)和CAP2(比较)已写入非零值且CAP2 CAP1。4. 对于从模块检查是否使能了SYNCI_EN但在等待永远不来的同步信号。可先禁用同步测试单模块输出。多路PWM不同步1. 主从模块启动顺序错误。2. 同步信号路径未连通。3. 从模块CTRPHS设置错误。1.先启动所有从模块计数器再启动主模块。确保从模块先进入“等待同步”状态。2. 使用示波器或芯片的GPIO复用功能将主模块的SYNCO信号引出检查是否有脉冲产生。3. 确认从模块CTRPHS值小于其自身的CAP1周期值。动态更新PWM参数时出现毛刺运行时直接写入了活动寄存器CAP1或CAP2。严格禁止在PWM运行时直接写CAP1/CAP2。所有运行时更新必须通过写入影子寄存器CAP3/CAP4来完成。中断无法进入1. PIE或CPU级中断未使能。2. eCAP模块中断未使能(ECEINT)。3. 中断标志位在初始化时未清除。1. 按层级检查eCAP模块中断使能位 - PIE组使能 - CPU全局中断使能。2. 确认ECEINT寄存器中对应的CEVTx、PRDEQ或CMPEQ位已置1。3. 在初始化eCAP后、使能中断前先写ECCLR寄存器清除所有可能残留的标志位。调试必备工具示波器直接观察eCAP引脚波形是判断有无输出、同步信号是否产生、相位关系是否正确的最直观手段。CCS的寄存器查看和内存查看实时监控TSCTR、CAPx、ECFLG等关键寄存器的值看它们是否按预期变化。CPU定时器在调试捕获功能时可以用一个已知频率和占空比的PWM信号可由另一个eCAP或GPIO模拟作为eCAP的输入方便验证测量结果。最后分享一个我自己的习惯在编写任何eCAP初始化函数时都会在开头加上ECCTL2.bit.TSCTRSTOP EC_STOP;在配置完成后再启动。这是一个防止在配置过程中计数器乱跑的好习惯。eCAP是一个强大的模块初看复杂但一旦理顺了其“捕获”和“比较”两条主线理解了影子寄存器与同步机制它就会成为你项目中解决时序难题的得力助手。