Part Number:TMS320F28379D
专家好,我想请教下,我在测试EPWM1的同步SYNC信号输出和pwm的相对位置关系时发现有点奇怪
我设置了SYNC信号在计数器等于0时输出信号(通过XBAR配置为GPIO输出,用于示波器查看)
PWM设置为上下模式、上升沿低电平+下降沿高电平。PWM比较寄存器仅在周期进行加载
理论上波形应该是SYNC信号处在PWM波形的高电平中点位置,但示波器上看对不上,想请教下是为什么呢?
Freedom:
代码贴上来看看。
,
Daniel:
您好
针对你提到的TMS320F28379D的EPWM1的SYNC信号输出和PWM相对位置关系的问题,这里有几个可能的原因和检查点,希望能帮助你解决问题:
SYNC信号和PWM时钟的关系:
确保SYNC信号确实是在计数器等于0时输出。虽然你通过XBAR配置为GPIO输出用于示波器查看,但还是要确认这个配置是否生效,以及是否有其他因素(如延迟)影响了SYNC信号的实际输出时间。
检查PWM的时钟源设置,确保PWM的时钟与SYNC信号的时钟是一致的。不一致的时钟源可能会导致两者之间的相位关系发生变化。PWM比较寄存器的加载时机:
你提到PWM比较寄存器仅在周期进行加载。请确认这个加载时机是否与SYNC信号的输出时机相协调。如果加载时机不当,可能会导致PWM波形与SYNC信号之间的相对位置关系出现偏差。
PWM的模式和极性设置:
你将PWM设置为上下模式、上升沿低电平+下降沿高电平。请确认这些设置是否正确,并且与你的预期相符。错误的模式或极性设置可能会导致PWM波形与SYNC信号之间的相对位置关系不正确。
硬件电路的影响:
检查与EPWM1相关的硬件电路,包括输出电路、滤波电路等,确保它们没有引入额外的延迟或相位偏移。
示波器的设置和校准:
确认示波器的设置是否正确,包括触发源、时间基准、电压量程等。错误的示波器设置可能会导致观察到的波形与实际波形不一致。
如果可能的话,使用另一台示波器或测试设备进行验证,以排除示波器本身的问题。软件代码和配置:
仔细检查与EPWM1相关的软件代码和配置,确保没有遗漏或错误。特别是与SYNC信号和PWM波形相关的配置和代码。
https://dev.ti.com/tirex/explore/node?node=A__AAzO2oxis8w7tFwC-JEaJA__motor_control_c2000ware_sdk_software_package__0.jXikd__LATEST
https://dev.ti.com/tirex/explore/node?node=A__AHZ5a4K.FJu1TjJGe1Pj3Q__C2000WARE__1kRFgrO__LATEST
以上是官方的相关例程。
,
jing980814:
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 shadowingEPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_PERIOD);// Set Compare valuesEPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 0);// Set actionsEPWM_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 FEDEPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA);EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA);// Set dead-band - Set the RED and FED valuesEPWM_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 StateEPWM_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);
,
jing980814:
你好,EPWM的配置都通过寄存器挨个检查了,应该是没问题
因为绝大部分时候pwm的频率都能对得上,只是中间突然有一个异常的
,
Daniel:
您好
根据您的描述,请减少外部信号干扰和电路板硬件布局优化来解决您的问题。
,
jing980814:
感谢您的回复。
我测量的是DSP直接输出引脚的电平,具体软件配置如上,现象倒是很稳定
您看是否是我在配置上有遗漏等原因呢?感觉还是想软件哪里配置上有问题,但反复对比并挨个检查了寄存器,未发现异常
,
Daniel:
您好
关于软件配置请参考给您分享的相关例程结合TRM来对应一下
https://www.ti.com.cn/cn/lit/ug/spruhm8k/spruhm8k.pdf?ts=1729229874727&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FTMS320F28379D
因为具体功能具体寄存器进行配置,请您按照上述资料进行匹配。