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.
工具/软件:Code Composer Studio
您好!
我在 EPWM 库中遇到了相移方面的问题... 我n´t 了 PWM、它´s 正常工作、但当我尝试设置相移时、它工作、我需要设置一个新的反向基座、以便它工作...
//这里是我的 PWM 初始化、设置周期等 // //将 PWM 1配置为主器件、将第2相配置为从器件、并让其传递来自 PWM1的 SYNC IN 脉冲 // ePWM_DisablePhaseShiftLoad (VIENNA1_DRV_ePWM_base); ePWM_setSyncOutPulseMode (VIENNA1_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO); ePWM_enablePhaseShiftLoad (vienna2_DRV_ePWM_base); ePWM_setSyncOutPulseMode (vienna2_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN); ePWM_setPhaseShift (vienna2_DRV_ePWM_base、0); ePWM_setCountModeAfterSync (vienna2_DRV_ePWM_base、ePWM_COUNT_MODE_UP_After_SYNC); ePWM_setTimeBaseCounter (vienna2_DRV_ePWM_base、2000); //尽管 PhaseShift 被设置为0,但由于基址计数器的原因,我有一个相移。 ePWM_setSyncOutPulseMode (VIENNA3_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN); ePWM_setCountModeAfterSync (VIENNA3_DRV_ePWM_base、ePWM_COUNT_MODE_UP_After _SYNC); ePWM_enablePhaseShiftLoad (VIENNA3_DRV_ePWM_base); ePWM_setPhaseShift (VIENNA3_DRV_ePWM_base、2000); //我´s PhaseShift,但它根本不起作用...
请帮帮我。
非常感谢。
BR、
Luis
您好!
您能否确认上述代码中使用的 PWM 实例? PWM1是主器件、PWM 2和3是从器件吗? 您还可以共享其他 PWM 配置、如周期、占空比、动作限定符吗?
谢谢
Vasudha
Vasudha、您好!
感谢您的支持。
是的、PWM1是主器件、PWM2和 PWM3是从器件。
PWM 的配置如下所示:
ePWM_setClockPrescaler (PWMbase、Vienna_ePWM_EPWMCLK_DIV、Vienna_ePWM_HSCLK_DIV);
ePWM_setEmulationMode (PWMbase、ePWM_emulation_free_run);
//
//为递增操作配置 ePWM
//
ePWM_setTimeBaseCounter (PWMbase、0);
ePWM_setTimeBasePeriod (PWMbase、Vienna_ePWM_TBPRD);
ePWM_setPeriodLoadMode (PWMbase、ePWM_PERIOD_LOAD);
ePWM_setTimeBaseCounterMode (PWMbase、ePWM_COUNTER_MODE_UP);
ePWM_setPhaseShift (PWMbase、0);
//
//使用影子模式更新 TBPRD 上的 CMPA
//
ePWM_setCounterCompareValue (PWMbase、ePWM_COUNTER_COMPARE_A、0);
ePWM_setCounterCompareShadowImage LoadMode (PWMbase、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD);
//将操作限定符子模块配置为:
// 当 TBCTR=0时输出 A 低电平
ePWM_setActionQualifierShadowImage LoadMode (PWMbase、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO);
ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
// 当 TBCTR=CMPA 时输出 A 高电平
ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
// 当 TBCTR=0时、输出 B 为高电平
ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
// 当 TBCTR=CMPA 时输出 B 为低电平
ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);
//
//为高电平有效的互补 PWM 配置死区发生器
//
ePWM_setDeadBandDelayMode (PWMbase、ePWM_DB_RED、true);
ePWM_setDeadBandDelayMode (PWMbase、ePWM_DB_FED、true);
ePWM_setRisingEdgeDeadBandDelayInput (PWMbase、ePWM_DB_INPUT_EPWMA);
ePWM_setFallingEdgeDeadBandDelayInput (PWMbase、ePWM_DB_INPUT_EPWMA);
ePWM_setDeadBandDelayPolarity (PWMbase、ePWM_DB_FED、ePWM_DB_POLICLE_ACTIVE_LOW);
ePWM_setDeadBandDelayPolarity (PWMbase、ePWM_DB_RED、ePWM_DB_POLICLE_ACTIVE_HIGH);
ePWM_setFallingEdgeDelayCount (PWMbase、Vienna_ePWM_Deadband _FED);
ePWM_setRisingEdgeDelayCount (PWMbase、Vienna_ePWM_Deadband _red);
再次感谢!
Luis
尊敬的 Vasudha:
我´ve 了n´t、但我不知道如何解决这个问题... 这张图片很好地描述了我的问题:
当我使用 PWM1和 PWM2时、移位操作正常。 使用其他 PWM 并将其同步到 PWM1时遇到的问题是、我需要选择输入同步事件。
如何使用 epwm.h 库执行此操作? 如何调用函数来选择 SYNCIN 事件? 我找不到可执行此操作的函数... 请帮帮我。
此致、
Luis
我´ve 解决方法:
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM7、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
添加此行以同步输入时钟;)
谢谢!