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.
大家好、我叫 Iulian Popa。
我是´m 萨拉戈萨大学的学生。 我´m 您的开发板'LAUNCHXL-F280049C'、当我尝试控制某些 PWM 信号时、我有一些问题和疑问。
首先、我使用:
- CodeComposer 版本9.3
- C2000Ware 版本3.1.0.00
我´m 使用3个 PWM 模块来控制全桥(我必须使用的 PWM 信号由 HW 施加)。 ePWM 信号如下:
- ePWM_7 A 和 B 输出
- ePWM_6输出 A
- ePWM_4输出 A
当我想同步 ePWM 输出并将 ePWM_7设置为"主器件"以及 ePWM6和 ePWM4的相移时、我的问题就会开始。 我一直在阅读 TI 论坛上的其他主题、例如: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/906918?tisearch=e2e-sitesearch&keymatch=F28004x%252525252525252520PWM%252525252525252520PhaseShift
我将模块的初始化保留在下面(ePWM5_B 是另一个东西、忽略它):
void Config_ePWM_Outputs (void){ SYSCTL_DisablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//tiene que IR Aqui porque Sino no SE SINCRONIZA BIEN EL EPWM ePWM_enablePhaseShiftLoad (EPWM4_base); ePWM_enablePhaseShiftLoad (EPWM6_BASE); ///------------------------------ >ePWM_7_A_B (H1 - L1)<--------------- EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //-------------------------------- ePWM_setTimeBaseCounterMode (EPWM7_BASE、ePWM_COUNTER_MODE_UP); //-------------------------------- ePWM_setTimeBasePeriod (EPWM7_BASE、EPWM7_PERIOD); ePWM_setPhaseShift (EPWM7_BASE、0U); //-------------------------------- ePWM_setCounterCompareValue (EPWM7_BASE、ePWM_COUNTER_COMPARE_A、EPWM7_Buty); //-------------------------------- ePWM_setClockPrescaler (EPWM7_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); //-------------------------------- ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero); ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_OUTPUT A、ePWM_AQ_OUTPUT 低电平、ePWM_AQ_OUTPUT ON_TIMEBASE_UP_CMPA); ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero); ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA); //-------------------------------- ///------------------------------ >ePWM_6_A (H2)<----------------- EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//跟随先前的 PWM //-------------------------------- ePWM_setTimeBaseCounterMode (EPWM6_BASE、ePWM_COUNTER_MODE_UP); //-------------------------------- ePWM_setTimeBasePeriod (EPWM6_BASE、EPWM6_PERIOD); ePWM_setPhaseShift (EPWM6_BASE、100U); //-------------------------------- ePWM_setClockPrescaler (EPWM6_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); //-------------------------------- ePWM_setCounterCompareValue (EPWM6_BASE、ePWM_COUNTER_COMPARE_A、EPWM6_Buty); //-------------------------------- ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero); ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA); //-------------------------------- ///------------------------------ >ePWM_4_A (L2)<--------------- EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//跟随先前的 PWM //-------------------------------- ePWM_setTimeBaseCounterMode (EPWM4_base、ePWM_COUNTER_MODE_UP); //-------------------------------- ePWM_setTimeBasePeriod (EPWM4_base、EPWM4_PERIOD); ePWM_setPhaseShift (EPWM4_base、0U); //-------------------------------- ePWM_setClockPrescaler (EPWM4_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); //-------------------------------- ePWM_setCounterCompareValue (EPWM4_base、ePWM_COUNTER_COMPARE_A、EPWM4_Duty); //-------------------------------- ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero); ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA); //-------------------------------- ///------------------------------ >ePWM_5_B (12V_ISO)<-------------- //-------------------------------- ePWM_setClockPrescaler (EPWM5_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); ePWM_setEmulationMode (EPWM5_base、ePWM_emulation_free_run); //-------------------------------- ePWM_setTimeBaseCounter (EPWM5_base、0); ePWM_setTimeBasePeriod (EPWM5_base、EPWM5_PERIOD); ePWM_setPeriodLoadMode (EPWM5_base、ePWM_PERIOD_LOAD); ePWM_setTimeBaseCounterMode (EPWM5_base、ePWM_COUNTER_MODE_UP); //-------------------------------- ePWM_setCounterCompareValue (EPWM5_base、ePWM_COUNTER_COMPARE_A、EPWM5_Duty); ePWM_setCounterCompareShadowImage LoadMode (EPWM5_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD); //-------------------------------- ePWM_setActionQualifierShadowImage LoadMode (EPWM5_base、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO); ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero); ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA); //-------------------------------- SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT); SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM1、SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT); SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//启用 PWM 同步和时钟 }
此致、我等待您的回复。 Iulian
您好!
[引用 user="Iulian Ovidiu Popa"]当我要同步 EPWM 输出并将 EPWM_7设置为"主"ePWM6和 ePWM4的相移时,问题就会开始。
首先、感谢您在创建新线程之前参考您的查询的现有论坛帖子。
您提到的帖子中已经提供了同步链结构。
如果 PWM7作为主器件、您可以生成如图所示的同步脉冲输出、将其作为 SYNCOUT 发送并作为 EXTSYNCIN 回送至 PWM4和6。
大家好、感谢您的回答。 我已经尝试实施您告诉我的内容。 但是、我无法实现 ePWM7和 ePWM 4、6之间的相移。 ¿您能从我的第一篇帖子中检查我的 ePWM 配置吗?¿解决方案我还做些什么?
此致、我等待您的回复。 Iulian
´ve,我读的是错误的回答。 这对我很有用。 Ty Subraahmanya。
如果有人需要、我将配置保留在这里:
void Config_ePWM_Outputs (void){
SYSCTL_DisablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//tiene que IR Aqui porque Sino no SE SINCRONIZA BIEN EL EPWM
ePWM_enablePhaseShiftLoad (EPWM4_base);
ePWM_enablePhaseShiftLoad (EPWM6_BASE);
///------------------------------ >ePWM_7_A_B (H1 - L1)<---------------
ePWM_setSyncOutPulseMode (EPWM7_BASE、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM7_BASE、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM7_BASE、EPWM7_PERIOD);
ePWM_setPhaseShift (EPWM7_BASE、0U);
//--------------------------------
ePWM_setCounterCompareValue (EPWM7_BASE、ePWM_COUNTER_COMPARE_A、EPWM7_Buty);
//--------------------------------
ePWM_setClockPrescaler (EPWM7_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_OUTPUT A、ePWM_AQ_OUTPUT 低电平、ePWM_AQ_OUTPUT ON_TIMEBASE_UP_CMPA);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM7_BASE、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------
///------------------------------ >ePWM_6_A (H2)<-----------------
ePWM_setSyncOutPulseMode (EPWM6_BASE、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM6_BASE、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM6_BASE、EPWM6_PERIOD);
ePWM_setPhaseShift (EPWM6_BASE、200U);
//--------------------------------
ePWM_setClockPrescaler (EPWM6_BASE、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setCounterCompareValue (EPWM6_BASE、ePWM_COUNTER_COMPARE_A、EPWM6_Buty);
//--------------------------------
ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM6_BASE、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------
///------------------------------ >ePWM_4_A (L2)<---------------
ePWM_setSyncOutPulseMode (EPWM4_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
//--------------------------------
ePWM_setTimeBaseCounterMode (EPWM4_base、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setTimeBasePeriod (EPWM4_base、EPWM4_PERIOD);
ePWM_setPhaseShift (EPWM4_base、350U);
//--------------------------------
ePWM_setClockPrescaler (EPWM4_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//--------------------------------
ePWM_setCounterCompareValue (EPWM4_base、ePWM_COUNTER_COMPARE_A、EPWM4_Duty);
//--------------------------------
ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM4_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------
///------------------------------ >ePWM_5_B (12V_ISO)<--------------
//--------------------------------
ePWM_setClockPrescaler (EPWM5_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
ePWM_setEmulationMode (EPWM5_base、ePWM_emulation_free_run);
//--------------------------------
ePWM_setTimeBaseCounter (EPWM5_base、0);
ePWM_setTimeBasePeriod (EPWM5_base、EPWM5_PERIOD);
ePWM_setPeriodLoadMode (EPWM5_base、ePWM_PERIOD_LOAD);
ePWM_setTimeBaseCounterMode (EPWM5_base、ePWM_COUNTER_MODE_UP);
//--------------------------------
ePWM_setCounterCompareValue (EPWM5_base、ePWM_COUNTER_COMPARE_A、EPWM5_Duty);
ePWM_setCounterCompareShadowImage LoadMode (EPWM5_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD);
//--------------------------------
ePWM_setActionQualifierShadowImage LoadMode (EPWM5_base、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO);
ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM5_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
//--------------------------------
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM1、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);//启用 PWM 的同步和时钟
}