TI C2000 eCAP 笔记

发布时间:2026/6/19 20:44:11

TI C2000 eCAP 笔记 eCAP 全称 Enhanced Capture干的活就是把输入信号边沿发生的时刻记下来——这个时刻就是模块内部计数器 TSCTR 当时的值。最常见的用途是测外部 PWM 的频率和占空比。这篇按 SysConfig 配置页一项一项过一遍再把 TSCTR、Counter Reset、同步机制几个容易绕的点单独拎出来说清楚。1. eCAP 是什么测 PWM 时eCAP 不会直接给你频率和占空比而是把几个边沿的时间戳依次存进 CAP1~CAP4剩下的差值计算交给软件。三个关键对象先认一下TSCTR内部时间戳计数器按 eCAP 时钟一直递增边沿一来就把它的当前值锁下来。CAP1~CAP4四个捕获寄存器依次保存第 1~4 个事件的 TSCTR 值每个事件抓上升还是下降沿由 Event Polarity 决定。Counter Reset指定某个事件后把 TSCTR 清零方便下一组测量从 0 重新开始。2. SysConfig 选项逐项过按界面从上到下每项说清楚它控制什么、普通测 PWM 时怎么配。Name / eCAP Instance前者myECAP0是 SysConfig 里的软件实例名生成代码的变量名、中断函数名会用到不是寄存器名后者选硬件实例ECAP1 对应ECap1RegsECAP2 对应ECap2Regs。Emulation Mode仿真暂停CCS 打断点时 TSCTR 停不停。当前是暂停即停学习调试用这个合适。eCAP Mode CaptureeCAP 有 Capture 和 APWM 两种用法前者测输入边沿后者把 eCAP 当简单 PWM 输出。这里是捕获模式。Capture Mode ContinuousCAP1~CAP4 循环使用不用每次手动 arm另一种 One-shot 抓到指定事件就停、要重新 arm。Capture Stops at EventOne-shot 下表示抓到第几个事件后停Continuous 下大致是第几个事件后回绕。截图里是 Event1等于只反复用 CAP1测不了完整占空比——测占空比要改成 Event4凑齐一组 CAP1~CAP4 再回绕。Event Prescaler 0输入事件分频0 表示不分频、每个有效边沿都抓。普通测 PWM 用 0。Event 1~4 Polarity四个事件各抓什么边沿。截图里四个全是 Rising只能测连续上升沿间隔。测占空比要配成 Rise / Fall / Rise / FallEvent1 Rising - CAP1 Event2 Falling - CAP2 Event3 Rising - CAP3 Event4 Falling - CAP4 高电平时间 CAP2 - CAP1 周期 CAP3 - CAP1 占空比 (CAP2 - CAP1) / (CAP3 - CAP1)Use / Register / Enable Interrupt、Interrupt Source四个一组。Use Interrupt 只是允许在 SysConfig 里配中断不代表真会进Register Interrupt Handler 决定要不要 SysConfig 帮你注册 ISR不勾就得自己Interrupt_register(INT_ECAP1, xxxISR)Enable Interrupt 才是真正开 CPU/PIE 通道Interrupt Source 选哪个事件当中断源。截图里 Source 是 None等于没中断。要稳定读一组 CAP1~CAP4常见做法是开 Event4 中断Event4 一到说明这组边沿基本抓全了。Enable Counter Reset None选哪些事件后清 TSCTR。None 表示不清CAPx 存的是连续时间戳。Phase Shift Count / Enable Load Counter / Load Counter / Reset Counters都跟同步和软件复位有关普通捕获基本用不到——Phase Shift Count 填 0后面三个不勾。其中 Reset Counters 初始化可清一次运行中别乱碰。Sync Out Mode / Sync-In Pulse Source同步相关下面第 4 节单独说。普通测外部 PWMSync-In 选 DisableSync Out 保持默认或关掉都行。eCAP Input选 ECAP1 捕获哪一路输入截图是 GPTRIP7。务必确认外部 GPIO / Input XBAR / GPTRIP7 到 ECAP1 的输入路径接通了这一步漏了就一直抓不到边沿。Use DMA Source / DMA Source要不要用 eCAP 事件触发 DMA。普通测 PWM 用 CPU 读就行不用勾真要用触发源一般选 Event4。Re-arm eCAP重新 arm主要对 One-shot 有意义Continuous 下不用管。3. TSCTR、CAP1~CAP4、Counter Reset 怎么联动边沿来的时候eCAP 不算占空比只是把 TSCTR 当前值存进 CAPPWM ___|‾‾‾‾|_____|‾‾‾‾|_____ ↑ ↓ ↑ ↓ E1 E2 E3 E4 TSCTR 100 250 500 650 CAP1100 CAP2250 CAP3500 CAP4650 高电平时间 CAP2 - CAP1 周期 CAP3 - CAP1 低电平时间 CAP3 - CAP2Enable Counter Reset 清的是 TSCTR不是清 CAP1~CAP4也不是清 CPU Timer。三种清法对应三种读数方式不清时 CAPx 是绝对时间戳靠差值算周期/脉宽逻辑最清楚每个事件都清时 CAPx 直接就是相邻边沿的间隔只在 Event4 清时一组 CAP1~CAP4 共用同一时间基准、下一组从头开始连续测 PWM 占空比最方便。贴一段对应的寄存器配置Rise/Fall/Rise/Fall Event4 清零ECap1Regs.TSCTR 0; // 清时间戳计数器 ECap1Regs.ECCTL1.bit.CAPLDEN 1; // 允许捕获值加载到 CAP1~CAP4 ECap1Regs.ECCTL1.bit.CAP1POL 0; // Event1 上升沿 ECap1Regs.ECCTL1.bit.CAP2POL 1; // Event2 下降沿 ECap1Regs.ECCTL1.bit.CAP3POL 0; // Event3 上升沿 ECap1Regs.ECCTL1.bit.CAP4POL 1; // Event4 下降沿 ECap1Regs.ECCTL1.bit.CTRRST1 0; // Event1 后不清 TSCTR ECap1Regs.ECCTL1.bit.CTRRST2 0; // Event2 后不清 TSCTR ECap1Regs.ECCTL1.bit.CTRRST3 0; // Event3 后不清 TSCTR ECap1Regs.ECCTL1.bit.CTRRST4 1; // Event4 后清 TSCTR ECap1Regs.ECCTL2.bit.CAP_APWM 0; // Capture 模式 ECap1Regs.ECCTL2.bit.TSCTRSTOP 1; // TSCTR 开始运行4. 同步机制这块名字容易让人误会先把对象说清楚eCAP 的同步不是同步外部输入信号也不是让被测 PWM 变整齐它同步的是 eCAP 内部的 TSCTR 时间基准。当 eCAP 收到 Sync-In、且装载功能打开时硬件执行的是TSCTR Phase Shift Count。所以 Phase Shift Count 0 时同步就等于把 TSCTR 清零填 1000同步后 TSCTR 就从 1000 起算。要让它真正生效三样要配齐Sync-In Pulse Source 选好同步源ePWM Sync-Out、其他模块、软件强制等Enable Load Counter 打开不开的话 Sync-In 来了也不改 TSCTRPhase Shift Count 填同步后的起点值。Sync-In 和 Sync-Out 是相反方向Sync-In 是别人同步我Sync-Out 是我同步别人或把收到的同步继续往下传。比如一条同步链 ePWM1 → ECAP1 → ECAP2ePWM1 │ Sync-Out ↓ ECAP1 (Sync-In 选 ePWM1Sync Out Mode 决定要不要继续往外发) │ Sync-Out ↓ ECAP2 / 其他模块什么时候才需要同步只测一个外部 PWM 的频率/占空比时不需要因为周期和占空比都用 CAP 差值算TSCTR 的绝对零点无所谓。只有当你想知道外部边沿相对 ePWM 周期的位置、或者要让多个 eCAP/ePWM 共用一个时间基准时才需要让 TSCTR 和主时基对齐。普通捕获就 Sync-In Disable、Load Counter 不勾、Phase Shift Count 0。5. 常用配置建议测频率 占空比Capture 模式 ContinuousCapture Stops at Event 选 Event4Prescaler 0极性 Rise/Fall/Rise/FallCounter Reset 选 Event4中断可不开要开就选 Event4Sync-In Disable。只测频率/周期Event1~4 全 Rising连续上升沿差值就是周期Stops at Event 至少到 Event2要两个上升沿才能算一个周期Counter Reset 清不清都行。中断 vs 轮询主循环或定时器里周期性读 CAP 的话轮询就够Interrupt Source 留 None想一组抓完立刻处理就开 Event4 中断高频、数据量大、不想频繁进中断再上 DMA触发源选 Event4。6. 配置检查清单输入路径接通了没外部 GPIO / Input XBAR / GPTRIP7 / ECAP1 输入要连起来漏了就一直抓不到边沿。测占空比时 Event1~4 别全是 Rising要 Rise/Fall/Rise/Fall。Capture Stops at Event 还停在 Event1 的话只能反复抓一个事件测不了完整占空比。Counter Reset 清的是 TSCTR测一组 PWM 一般选 Event4 后清。普通测量先别开同步Sync-In DisableLoad Counter 不勾。要开中断Register / Enable / Interrupt Source 三个得配齐。不用 DMA 就别勾 Use DMA Source下面的 DMA Source 下拉不用管。

相关新闻