This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我将使用 eCAP 来测量脉宽。
基本上、CAP1 reg 设置为上升沿、并进行复位。 CAP2被设定为下降边沿、无复位。
附加的是 init 函数。
我将读取 CAP2以获得脉冲宽度。
我有一个问题、在脉冲序列期间、我有时会在 CAP2中读取0 (零)、尽管我看到 GPIO 上存在示波器脉冲(我使用的是1000 Int16矢量、并使用 CCS 图形查看所有捕获)。
我在 GPIO 上使用异步模式、因此没有资格认证。 上拉电阻已禁用。
脉冲约为400ns、因此约为80 sysclk (200MHz SYSCLK)。
我的第一个问题是-如何在 CAP2中设置0? 我找不到这样的情况。
第二、是否有关于解决方案/如何调试的想法?
第三,是否有任何机制将 CAP2结果寄存器复位(例如,读取它)?
非常感谢!
void Init_eCAP(volatile struct ECAP_REGS *eCAP) { EALLOW; eCAP->ECEINT.all = 0x0000; // Disable all capture interrupts eCAP->ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags eCAP->ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads eCAP->ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped eCAP->ECCLR.bit.INT = 1; // Clear Global interrupt flag // Configure peripheral registers eCAP->ECCTL1.bit.CAP1POL = 0; // Rising edge eCAP->ECCTL1.bit.CAP2POL = 1; // Falling edge eCAP->ECCTL1.bit.CTRRST1 = 1; // Reset counter eCAP->ECCTL1.bit.CTRRST2 = 0; // Don't reset eCAP->ECCTL2.bit.SYNCI_EN = 0; // Enable sync in eCAP->ECCTL2.bit.SYNCO_SEL = 0; // Pass through eCAP->ECCTL2.bit.CONT_ONESHT = 0; // Continous eCAP->ECCTL2.bit.STOP_WRAP = 1; // Stop at 2 events eCAP->ECCTL2.bit.CAP_APWM = 0; // Ecap module operates in capture mode. eCAP->ECCTL2.bit.REARM = 1; // arm one-shot eCAP->ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads eCAP->ECCTL2.bit.TSCTRSTOP = 1; // Start Counter EDIS; }
您好 Mojo、
您的初始化遵循以下示例。 我不知道为什么 CAP2会给出一个0、除非那里永远不会出现上升沿。 鉴于 EPWMCLK 的频率为200MHz、我在 PWM 周期为40时对其进行了测试。 我成功捕获了所有边沿。 在上升沿复位和完全不复位时都是如此。
您是否有机会查看从 C2000Ware 软件开发套件中捕获 PWM 信号的示例项目?
在 C:\ti\c2000\C2000Ware_4_03_00_00\device_support\f2837xd\examples\CPU1\ECAP_CAPTURE_PWM 下
在 ECAP ISR 中、是否在 ISR 结束之前重新布防 ECAP? 您似乎没有启用中断。 我强烈建议启用一个发生在边沿事件上的中断、这样您就能够捕获 CAP1/2寄存器并在观察表达式窗口中查看它们。 为了启用捕捉中断、您可以看到示例是如何实现这一点的。 在上面的示例中、它在每4个捕获事件后生成一个中断。
此致、
Ryan Ma
感谢 Ryan、
是的、我熟悉该示例。
因为我在连续模式下工作、所以无需重新启动。
我没有使用中断(由于其他限制、无法使用中断)、因此我依赖寄存器来保存该值。
如果脉冲宽度小于1 SYSCLK 会发生什么情况? 或者可能有2个 sysclks?
上升沿是否会复位计数器、但下降沿会在计数器开始递增之前发生?
在这种情况下、我找不到有关 eCAP 确切时序的规格、但可能我错过了。
谢谢!
您好 Mojo、
已理解、此处给出了该器件输入端的最小脉冲宽度。 只有有时您说会发生这种情况? 您能否提供所见内容的屏幕截图? 您知道这种意外结果是何时发生的、还是随机发生的?
最棒的
Ryan Ma
是的、这是随机发生的。
我认为、由于噪声、我们具有非常短的脉冲(< 2个周期)。 这会导致 CAP2为零吗?
下图:
您好 Mojo、
是的、可能会发生这种情况。 CAP1是否成功捕获信号?
您是否已尝试设置 GPIO 鉴定? 如果您计划使用此工具并对资质审核有任何疑问、我们可以创建一个新主题、以讨论特定于 GPIO 资质审核的问题、我可以向您转发 GPIO 资质审核的正确专家。
最棒的
Ryan Ma