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.

[参考译文] TMS320F28377S:ePWM 未同步

Guru**** 2487425 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/695730/tms320f28377s-epwm-not-synchronising

器件型号:TMS320F28377S
Thread 中讨论的其他器件:controlSUITE

我想将 EPWM1与 EPWM10同步、即每个模块之间的相位延迟为0。 我已经使用互补的 A 和 B 信号实现了死区输出、但我无法同步各个模块的输出。 我参考了有关同步的数据表流程图,了解了模块以三人一组的形式排列的情况,我可以配置每个模块的 SYNCOUTPUT 等 我在这里附上我的代码,我在哪里做错了。

//包含的文件
//
#include "driverlib.h"
#include "device.h"
#define Base10 EPWM10_BASE
#define BASE2 EPWM2_base
#define base6 EPWM6_BASE
#define DELAY 0X080U
#define TIME_BASE 0X1388 //等同于5000U
//
// Main
////// INITWM1 void (EPWM6_BASE)#define DEPTID




(void EPWM3_INITU);INITWM3 (void EPWM32_INITU) void (void EPWM3(void);EPWM3_INITU void (void);EPWM32_EPWM3(void (void)
_interrupt void epwm1ISR (void);
__interrupt void epwm2ISR (void);
__interrupt void epwm3ISR (void);
int i=2000;
int set=0;

_Bool enable=1;
void main (void)
{
//
//初始化设备时钟和外设
//
device_init();

//
//禁用引脚锁定并启用内部上拉。
//
DEVICE_initGPIO();

//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
INTERRUPT_initVectorTable ();
// Interrupt_register (INT_EPWM1、epwm1ISR);
INTERRUPT_REGISTER (INT_EPWM10、epwm2ISR);
// Interrupt_register (INT_EPWM3、&epwm3ISR);
initgpio ();

sysctl_disablePeripheral (sysctl_Periph_CLK_TBCLKSYNC);

//initEPWM1 ();

//initEPWM2();

//initEPWM3();


initEPWMgen(EPWM1_base, 1);
initEPWM2_BASE,0);initEPWM3_BASE
(0);initEPWMgen(EPWM3_base, 0);
initEPWM4_BASE (1);
initEPWM5_BASE (0);
initEPWM6_BASE (0);initEPWM6_BASE、0);
initEPWMgen (EPWM7_BASE、1);
initEPWM8_BASE (0);
initEPWMgen (EPWM9_BASE、0);
initEPWMgen (EPWM10_BASE、1);
//同步
 ePWM_setSyncOutPulseMode (EPWM1_base、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
ePWM_setSyncOutPulseMode (EPWM2_base、 ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM3_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM4_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);ePWM_SYNC_ON EPWMxSYNC_ON
ePWM_setSyncOutPulseMode (EPWM5_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM6_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM7_BASE、EPWM7_EPWM0_PULSEIN) ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM8_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setSyncOutPulseMode (EPWM9_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);EPWMxSYNPIN
ePWM_setSyncOutPulseMode (EPWM10_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);SYSCTL_SYSCTL_SYNCOUT_SYSCUT_IN_SYSCUT_SYSCUT_SYNCOUT_SYSCUT_SYNCOUT_EN_SYSCUT_SYNCOUT
SYSCTL_SYNC_IN_SRC_EPWM4SYNCOUT);
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM10、SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT);

//
启用 PWM 的同步和时钟
//
EPSCTL_ENABLEPeripheral (SYSCTL_SYNCT_INT_EPWINT

);//启用 EPWM3_Interrupt (SYSCT_EPWINT

);/SYSCTCM1_INT_EPWINT (SYNT_INT_EPWINT)


ERTM;
for (;;)
{
while (set=0);

set=0;
}
}
void initgpio(void){

GPIO_setPadConfig (18、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_18_EPWM10A);
GPIO_setPadConfig (19、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_19_EPWM10B);
GPIO_setPadConfig (2、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_2_EPWM2A);
GPIO_setPadConfig (3、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_3_EPWM2B);
GPIO_setPadConfig (10、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_10_EPWM6A);
GPIO_setPadConfig (11、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_11_EPWM6B);

}
void initEPWMgen (uint32_t q、uint32_t sync)
{

ePWM_setCountModeAfterSync (q、ePWM_COUNT_MODE_UP_After_SYNC);


//
//设置 TBCLK
//
ePWM_setTimeBasePeriod (q、time_base);
不需要相移
ePWM_setPhaseShift (q、0U);
ePWM_enablePhaseShiftLoad (q);
ePWM_setTimeBaseCounter (q、0U);

//
//设置比较值
//
ePWM_setCounterCompareValue (q、
ePWM_COUNTER_COMPARE_A、
i);


//
//设置计数器模式
//
ePWM_setTimeBaseCounterMode (q、ePWM_COUNTER_MODE_UP_DOWN);
ePWM_DisablePhaseShiftLoad (q);
ePWM_setClockPrescaler (q、
ePWM_CLOCK 分频器_1、
ePWM_HSCLOCK_DEVIDER_1);

//
//设置隐藏
//
EPWM_setCounterCompareShadowImage 装载模式(q、
ePWM_COUNTER_COMPARE_A、
ePWM_COMP_LOAD_ON_CNTR_ZERO);

//
//设置操作
//注意:ePWM_B 未设置为与 A 互补
ePWM_setActionQualifierAction (q、
ePWM_AQ_OUTPUT A、
ePWM_AQ_OUTPUT 高电平、
ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (q、
ePWM_AQ_OUTPUT A、
ePWM_AQ_OUTPUT 低电平、
ePWM_AQ_output_on_timebase_down_CMPA);

ePWM_setDeadBandOutputSwapMode (q、ePWM_DB_OUTPUT A、false);
ePWM_setDeadBandOutputSwapMode (q、ePWM_DB_output_B、false);
//我们不必交换
ePWM_setDeadBandDelayMode (q、ePWM_DB_RED、true);
ePWM_setDeadBandDelayMode (q、ePWM_DB_FED、true);
逆变器桥臂的//配置设置
ePWM_setDeadBandDelayPolarity (q、ePWM_DB_RED、ePWM_DB_Polarity、ACTIVE_HIGH);
ePWM_setDeadBandDelayPolarity (q、ePWM_DB_FED、ePWM_DB_Polarity、ACTIVE_LOW);

ePWM_setRisingEdgeDeadBandDelayInput (q、ePWM_DB_INPUT_EPWMA);
ePWM_setFallingEdgeDeadBandDelayInput (q、ePWM_DB_INPUT_EPWMA);
//我认为只有在运行时更改 db 时,这些才有效
ePWM_setDeadBandControlShadowImage LoadMode (q、ePWM_DB_LOAD_FREEZE);
ePWM_disableDeadBandControlShadowImage LoadMode (q);


//显而易见
ePWM_setDeadBandCounterClock (q、ePWM_DB_COUNTER_clock_full_cycle);
ePWM_setRisingEdgeDelayCount (q、delay);
ePWM_setFallingEdgeDelayCount (q、delay);
}

__interrupt void epwm2ISR (void)
{
//
//更新 CMPA 和 CMPB 值
//

// ePWM_setSyncOutPulseMode (BASE2、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);


//
//清除此计时器的 INT 标志
//
ePWM_clearEventTriggerInterruptFlag (Base10);

//
//确认中断组
//
interrupt_clearACKGroup (interrupt_ACK_Group3);
}

//
//文件结束
//





  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ranjith:

    我对调试的建议是:
    1) 1)在 CCS 中的调试会话期间使用 Registers 窗口查看 ePWM 寄存器的值。 通过使用技术参考手册中的 ePWM 章节、了解这些寄存器/位的重要性。 检查是否有任何寄存器未按照您的预期进行配置。

    2) 2)查看此示例、它使用位字段代码、与 Driverlib 中的代码不同、但它可以很好地参考涉及的步骤:
    C:\ti\controlSUITE\libs\app_libs\digit_power\f28x7x_v1.0\cnF\PWM_1ch_Cnf.c

    此致、
    Elizabeth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ranjith:

    看起来您是从 EPWM1到 EPWM7再到 EPWM10来实现同步脉冲的。 这是故意的吗? 您应该尽可能使用最短的路径、如果可以的话、直接从 EPWM1到 EPWM10。

    您在波形上看到了什么? 请注意、同步链中存在已知的2周期延迟。 由于您的代码使用的 EPWM7步骤、它可能会被扩展。 为了补偿预期的延迟、将 TBPHS 寄存器加载为2。

    此致、

    Kris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ranjith:

    几周内我没有听到您的声音、所以我写信来看看这是否已经解决了。 如果您没有其他问题、可以按相关回复上的"此问题已解决"按钮。 如果您这样做、请通过回复详细信息告知我们。

    此致、
    Elizabeth