大家好、我叫 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