尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

TI C2000 eCAP 笔记

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 下拉不用管。
返回列表