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.

TMS320F28379S: ECAP not counting all pulse?

Part Number: TMS320F28379S

Team,

Could you please help with the below questions?
Some more info will be posted soon.

The goal is to count pulses of external PWM signals. The PWM signals seems to be clean on the X-BAR input.
However the ECAP does not seem to be able to count all the pulses. The count only reaches 60 000 while approximately 7 000 000 pulse have been generated.
What could be the reason?

Thanks in advance!

A.

  • Hi,

    additional informations to this issue:

    It's an internal PWM-Impulse and the PWM Signals are correctly and clean I checked this.

    And here the Init part of the Source Code:

    int8_t BSP_CAP_Config_DCAC(void)
    {
        /* Configure GPIO24 as Xbar Input 7 (eCAP 1) */
      GPIO_setPadConfig(GPIO_DCAC_FAN_1_TACHO_PIN, GPIO_PIN_TYPE_STD);
      GPIO_setPinConfig(GPIO_DCAC_FAN_1_TACHO_PIN_CONFIG_DEFAULT);
      GPIO_setDirectionMode(GPIO_DCAC_FAN_1_TACHO_PIN, GPIO_DIR_MODE_IN);
      GPIO_setQualificationMode(GPIO_DCAC_FAN_1_TACHO_PIN, GPIO_QUAL_ASYNC);
      XBAR_setInputPin(ECAP_TACHO_FAN_1_XBAR_INPUT, GPIO_DCAC_FAN_1_TACHO_PIN);
    
      /* Configure GPIO25 as Xbar Input 8 (eCAP 2) */
      GPIO_setPadConfig(GPIO_DCAC_FAN_2_TACHO_PIN, GPIO_PIN_TYPE_STD);
      GPIO_setPinConfig(GPIO_DCAC_FAN_2_TACHO_PIN_CONFIG_DEFAULT);
      GPIO_setDirectionMode(GPIO_DCAC_FAN_2_TACHO_PIN, GPIO_DIR_MODE_IN);
      GPIO_setQualificationMode(GPIO_DCAC_FAN_2_TACHO_PIN, GPIO_QUAL_ASYNC);
      XBAR_setInputPin(ECAP_TACHO_FAN_2_XBAR_INPUT, GPIO_DCAC_FAN_2_TACHO_PIN);
    
      /* Configure GPIO26 as Xbar Input 9 (eCAP 3) */
      GPIO_setPadConfig(GPIO_DCAC_FAN_3_TACHO_PIN, GPIO_PIN_TYPE_STD);
      GPIO_setPinConfig(GPIO_DCAC_FAN_3_TACHO_PIN_CONFIG_DEFAULT);
      GPIO_setDirectionMode(GPIO_DCAC_FAN_3_TACHO_PIN, GPIO_DIR_MODE_IN);
      GPIO_setQualificationMode(GPIO_DCAC_FAN_3_TACHO_PIN, GPIO_QUAL_ASYNC);
      XBAR_setInputPin(ECAP_TACHO_FAN_3_XBAR_INPUT, GPIO_DCAC_FAN_3_TACHO_PIN);
    
      /* Configure GPIO27 as Xbar Input 10 (eCAP 4) */
      GPIO_setPadConfig(GPIO_DCAC_FAN_4_TACHO_PIN, GPIO_PIN_TYPE_STD);
      GPIO_setPinConfig(GPIO_DCAC_FAN_4_TACHO_PIN_CONFIG_DEFAULT);
      GPIO_setDirectionMode(GPIO_DCAC_FAN_4_TACHO_PIN, GPIO_DIR_MODE_IN);
      GPIO_setQualificationMode(GPIO_DCAC_FAN_4_TACHO_PIN, GPIO_QUAL_ASYNC);
      XBAR_setInputPin(ECAP_TACHO_FAN_4_XBAR_INPUT, GPIO_DCAC_FAN_4_TACHO_PIN);
    
      return 0;
    }
    
    /*****************************************************************************
     * @brief Init BSP_CAP
     * @param base location of EPWM base
     * @return result of initialization 0 - OK
     */
    int8_t BSP_CAP_Init_DCAC(void)
    {
        /* eCap 1 */
        /* Disable ,clear all capture flags and interrupts */
        ECAP_disableInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_1, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
        ECAP_clearInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_1, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
    
        /* Disable CAP1-CAP4 register loads */
        ECAP_disableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_1);
    
        /* Configure eCAP */
        ECAP_stopCounter(ECAP_BASE_ADDRESS_TACHO_FAN_1);
        ECAP_enableCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_1);
    
        ECAP_setCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_1, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_1);
        ECAP_setEventPolarity(ECAP_BASE_ADDRESS_TACHO_FAN_1, ECAP_EVENT_1, ECAP_EVNT_RISING_EDGE);
        ECAP_enableCounterResetOnEvent(ECAP_BASE_ADDRESS_TACHO_FAN_1, ECAP_EVENT_1);
    
        ECAP_enableLoadCounter(ECAP_BASE_ADDRESS_TACHO_FAN_1);
        ECAP_startCounter(ECAP_BASE_ADDRESS_TACHO_FAN_1);
        ECAP_enableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_1);
    
        /* eCap 2 */
        /* Disable ,clear all capture flags and interrupts */
        ECAP_disableInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_2, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
        ECAP_clearInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_2, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
    
        /* Disable CAP1-CAP4 register loads */
        ECAP_disableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_2);
    
        /* Configure eCAP */
        ECAP_stopCounter(ECAP_BASE_ADDRESS_TACHO_FAN_2);
        ECAP_enableCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_2);
    
        ECAP_setCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_2, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_1);
        ECAP_setEventPolarity(ECAP_BASE_ADDRESS_TACHO_FAN_2, ECAP_EVENT_1, ECAP_EVNT_RISING_EDGE);
        ECAP_enableCounterResetOnEvent(ECAP_BASE_ADDRESS_TACHO_FAN_2, ECAP_EVENT_1);
    
        ECAP_enableLoadCounter(ECAP_BASE_ADDRESS_TACHO_FAN_2);
        ECAP_startCounter(ECAP_BASE_ADDRESS_TACHO_FAN_2);
        ECAP_enableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_2);
    
        /* eCap 3 */
        /* Disable ,clear all capture flags and interrupts */
        ECAP_disableInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_3, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
        ECAP_clearInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_3, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
    
        /* Disable CAP1-CAP4 register loads */
        ECAP_disableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_3);
    
        /* Configure eCAP */
        ECAP_stopCounter(ECAP_BASE_ADDRESS_TACHO_FAN_3);
        ECAP_enableCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_3);
    
        ECAP_setCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_3, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_1);
        ECAP_setEventPolarity(ECAP_BASE_ADDRESS_TACHO_FAN_3, ECAP_EVENT_1, ECAP_EVNT_RISING_EDGE);
        ECAP_enableCounterResetOnEvent(ECAP_BASE_ADDRESS_TACHO_FAN_3, ECAP_EVENT_1);
    
        ECAP_enableLoadCounter(ECAP_BASE_ADDRESS_TACHO_FAN_3);
        ECAP_startCounter(ECAP_BASE_ADDRESS_TACHO_FAN_3);
        ECAP_enableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_3);
    
    
        /* eCap 4 */
        /* Disable ,clear all capture flags and interrupts */
        ECAP_disableInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_4, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
        ECAP_clearInterrupt(ECAP_BASE_ADDRESS_TACHO_FAN_4, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE));
    
        /* Disable CAP1-CAP4 register loads */
        ECAP_disableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_4);
    
        /* Configure eCAP */
        ECAP_stopCounter(ECAP_BASE_ADDRESS_TACHO_FAN_4);
        ECAP_enableCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_4);
    
        ECAP_setCaptureMode(ECAP_BASE_ADDRESS_TACHO_FAN_4, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_1);
        ECAP_setEventPolarity(ECAP_BASE_ADDRESS_TACHO_FAN_4, ECAP_EVENT_1, ECAP_EVNT_RISING_EDGE);
        ECAP_enableCounterResetOnEvent(ECAP_BASE_ADDRESS_TACHO_FAN_4, ECAP_EVENT_1);
    
        ECAP_enableLoadCounter(ECAP_BASE_ADDRESS_TACHO_FAN_4);
        ECAP_startCounter(ECAP_BASE_ADDRESS_TACHO_FAN_4);
        ECAP_enableTimeStampCapture(ECAP_BASE_ADDRESS_TACHO_FAN_4);
    
        return 0;
    }

  • AnBer,

    Please take a look at similar e2e question at following link below:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/930128