C2000-GANG: F280049C SDFM EPWM同步问题

Part Number: C2000-GANG
Other Parts Discussed in Thread: AMC3306EVM

你好,我使用了贵公司的F280049C控制板,调制器用的AMC3306EVM,我想使用其中的SDFM同步功能,程序模板为sdfm_ex4_pwm_sync_cpuread.c。实际使用中,我能够采集到和输入一致的波形,并且能够在PWM1A(GPIO0)引脚上抓到PWM波形,但是我想问一下,这个同步体现在哪里?按照手册上的说明,PWM event能够复位DOSR counter。为了验证确实能够复位DOSR counter,我在sdfmDR1ISR中翻了个IO,按照我的理解,当GPIO0引脚上PWM反转时,中断中IO的反转周期或者占空比会因为DOSR counter的复位而产生变化,但是无论我怎么操作,进入中断的时间从来就没发生变化,或者说感觉DOST counter从来就没有复位过,请问是我的理解或操作有问题吗?麻烦解答,谢谢!

__interrupt void sdfmDR1ISR(void)
{
    GPIO_togglePin(12);
    static uint16_t loopCounter1 = 0,times = 0;
    SDFM_setOutputDataFormat(SDFM1_BASE, SDFM_FILTER_1,
                             SDFM_DATA_FORMAT_16_BIT);

    //
    // Read SDFM flag register (SDIFLG)
    //
    if(loopCounter1 >= MAX_SAMPLES)
    {
        loopCounter1 = 0;
        times++;
    }

    while((HWREG(SDFM1_BASE + SDFM_O_SDIFLG) & 0xF000U) != 0xF000U)
    {
    }

    filter1Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_1) >> 16U);
    filter2Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_2) >> 16U);
    filter3Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_3) >> 16U);
    filter4Result[loopCounter1++] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_4) >> 16U);


    //
    // Clear SDFM flag register (SDIFLG)
    //
    SDFM_clearInterruptFlag(SDFM1_BASE, SDFM_MASTER_INTERRUPT_FLAG |
                            SDFM_FILTER_1_NEW_DATA_FLAG            |
                            SDFM_FILTER_2_NEW_DATA_FLAG            |
                            SDFM_FILTER_3_NEW_DATA_FLAG            |
                            SDFM_FILTER_4_NEW_DATA_FLAG);

    //
    // Acknowledge this interrupt to receive more interrupts from group 5
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);
}

 

image.png

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • Hello?有没有大佬回复一下?

  • 同步不在PWM1A波形引脚本身上。 在内部,SDFM滤波器逻辑获取来自ePWM的同步脉冲,该同步脉冲重置SDFM抽取/OSR计时(DOSR计数器),以便滤波器输出更新与PWM周期中的已知点对齐。 此功能主要存在,因此您可以根据PWM周期确定读取SDFM结果的时间。 和你所看到的保持一致。

    关于ISR计时以及为什么反相PWM1A不能证明DOSR重置,有两个关键点。 首先,SDFM输出不会更新每个SD时钟,而是会更新每个OSR * SD-CX时钟周期。 因此,中断节奏由OSR和调制器时钟主导,而不是由PWM占空比主导。 其次,反相PWM1A输出不会移动SOC/SYNC事件。 输出反转仅反转输出极性;它不会更改生成SOCA的底层时基比较/零/周期事件。 因此,您的反向PWM >> ISR职责更改预期不会发生。

    要验证DOSR重置,我需要更改SOC定时,而不是PWM输出极性。

  • 你好,关于你回答的内容,我有个疑问。针对这句话,”同步不在PWM1A波形引脚本身上。 在内部,SDFM滤波器逻辑获取来自ePWM的同步脉冲,该同步脉冲重置SDFM抽取/OSR计时(DOSR计数器),以便滤波器输出更新与PWM周期中的已知点对齐“,难道PWM1A输出的波形不是ePWM的同步脉冲吗?如果是,根据你提出的同步脉冲可以改变OSR计时且中断节奏由OSR和调制器时钟主导的说法,改变PWM1A的脉冲周期应该是可以改变OSR的计时进而影响中断节奏的。