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直接输出引脚的电平,具体软件配置如上,现象倒是很稳定
您看是否是我在配置上有遗漏等原因呢?感觉还是想软件哪里配置上有问题,但反复对比并挨个检查了寄存器,未发现异常