
专家好,我想请教下,我在测试EPWM1的同步SYNC信号输出和pwm的相对位置关系时发现有点奇怪
我设置了SYNC信号在计数器等于0时输出信号(通过XBAR配置为GPIO输出,用于示波器查看)
PWM设置为上下模式、上升沿低电平+下降沿高电平。PWM比较寄存器仅在周期进行加载
理论上波形应该是SYNC信号处在PWM波形的高电平中点位置,但示波器上看对不上,想请教下是为什么呢?

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.

专家好,我想请教下,我在测试EPWM1的同步SYNC信号输出和pwm的相对位置关系时发现有点奇怪
我设置了SYNC信号在计数器等于0时输出信号(通过XBAR配置为GPIO输出,用于示波器查看)
PWM设置为上下模式、上升沿低电平+下降沿高电平。PWM比较寄存器仅在周期进行加载
理论上波形应该是SYNC信号处在PWM波形的高电平中点位置,但示波器上看对不上,想请教下是为什么呢?

您好
针对你提到的TMS320F28379D的EPWM1的SYNC信号输出和PWM相对位置关系的问题,这里有几个可能的原因和检查点,希望能帮助你解决问题:
SYNC信号和PWM时钟的关系:
PWM比较寄存器的加载时机:
PWM的模式和极性设置:
硬件电路的影响:
示波器的设置和校准:
软件代码和配置:
https://dev.ti.com/tirex/explore/node?node=A__AHZ5a4K.FJu1TjJGe1Pj3Q__C2000WARE__1kRFgrO__LATEST
以上是官方的相关例程。
PWM的相关配置如下:
EPWM_setClockPrescaler(EPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod(EPWM1_BASE, INV_PWM_PERIOD);
EPWM_setTimeBaseCounter(EPWM1_BASE, 0U);
EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad(EPWM1_BASE);
EPWM_setPhaseShift(EPWM1_BASE, 0U);
EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
// Set up shadowing
EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_PERIOD);
// Set Compare values
EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 0);
// Set actions
EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
// Set dead-band - Use EPWMA as the input for both RED and FED
EPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA);
EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA);
// Set dead-band - Set the RED and FED values
EPWM_setFallingEdgeDelayCount(EPWM1_BASE, INV_PWM_DB);
EPWM_setRisingEdgeDelayCount(EPWM1_BASE, INV_PWM_DB);
// Set dead-band - Do not invert the delayed outputs (AH)
EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH);
EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);
// Set dead-band - Use the delayed signals instead of the original signals
//EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, true);
//EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, true);
EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, false);
EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, false);
//Set Initialize State
EPWM_setActionQualifierContSWForceAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_SW_OUTPUT_LOW);
EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_PERIOD);
EPWM_setActionQualifierContSWForceShadowMode(EPWM1_BASE, EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO_PERIOD);
SYNC的配置如下
SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
XBAR_setOutputMuxConfig(XBAR_OUTPUT1, XBAR_OUT_MUX14_EXTSYNCOUT);
XBAR_enableOutputMux(XBAR_OUTPUT1, XBAR_MUX14);
XBAR_invertOutputSignal(XBAR_OUTPUT1, TRUE);
GPIO_setPinConfig(GPIO_58_OUTPUTXBAR1);
感谢您的回复。
我测量的是DSP直接输出引脚的电平,具体软件配置如上,现象倒是很稳定
您看是否是我在配置上有遗漏等原因呢?感觉还是想软件哪里配置上有问题,但反复对比并挨个检查了寄存器,未发现异常