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.
大家好、
我的客户遇到 HRPWM 无法按预期工作的问题。
测试结果如下:
案例1:Boostdutycycle_pu = 0.4、
CMPA = 80、CMPAHR = 0、
测得的实际 PWM 占空比= 35.3%。
情况 boostdutycycle_pu = 0.404、
CMPA = 80、CMPAHR = 52224、
测得的实际 PWM 占空比= 35.3%。
寄存器 CMPAHR 已更改、但波形相同。
案例3:Boostdutycycle_pu = 0.405、
CMPA = 81、CMPAHR = 0、
实际 PWM 占空比= 34.81%。
由于 CMPA 从80变为81、波形从35.3%更改为34.81%。
下面是配置。
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRPWM); SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1); SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM2); EPWM_setPeriodLoadMode(base, EPWM_PERIOD_SHADOW_LOAD); EPWM_setTimeBasePeriod(base, Period); EPWM_setPhaseShift(base, 0); EPWM_setTimeBaseCounter(base, 0); EPWM_setEmulationMode(base, EMULATION_MODE); EPWM_setTimeBaseCounterMode(base, EPWM_COUNTER_MODE_UP); EPWM_setClockPrescaler(base, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1); // // Configure linking between PWM modules // if(syncmode == EPWM_SYNC_IN_PULSE_SRC_DISABLE) // config as a Master { // // Disable phase shift load // sync out on CTR = 0 // EPWM_disablePhaseShiftLoad(base); EPWM_enableSyncOutPulseSource(base, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO); } else // Configure module as slave { // // Enable phase shift load // Set sync-out to software only (effectively disabled) // Set sync-in signal per argument passed in to this function // Count up after sync // EPWM_enablePhaseShiftLoad(base); EPWM_enableSyncOutPulseSource(base, EPWM_SYNC_OUT_PULSE_ON_SOFTWARE); EPWM_setSyncInPulseSource(base, syncmode); EPWM_setCountModeAfterSync(base, EPWM_COUNT_MODE_UP_AFTER_SYNC); } // // ===================================================== // // === Configure Counter Compare Submodule Registers === // // ===================================================== // // // Set initial CMPA value // Set initial CMPB value // Enable CMPA shadow load on CTR = 0 // Enable CMPB shadow load on CTR = 0 // EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_A, CMPA); EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_B, CMPB); EPWM_setCounterCompareShadowLoadMode(base, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); EPWM_setCounterCompareShadowLoadMode(base, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO); // // =============================================== // // === Configure Dead-Band Submodule Registers === // // =============================================== // // // Active high complementary PWMs - Set up the deadband // Enable rising edge delay // Enable falling edge delay // RED polarity is active high // FED polarity is active low (inverted) // Enable shadow load on CTR = 0 for RED count // Enable shadow load on CTR = 0 for FED count // EPWM_setRisingEdgeDeadBandDelayInput(base, EPWM_DB_INPUT_EPWMA); EPWM_setFallingEdgeDeadBandDelayInput(base, EPWM_DB_INPUT_EPWMB); EPWM_setDeadBandDelayMode(base, EPWM_DB_RED, true); EPWM_setDeadBandDelayMode(base, EPWM_DB_FED, true); EPWM_setDeadBandDelayPolarity(base, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH); EPWM_setDeadBandDelayPolarity(base, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW); EPWM_setRisingEdgeDelayCountShadowLoadMode(base, EPWM_COMP_LOAD_ON_CNTR_PERIOD); EPWM_setFallingEdgeDelayCountShadowLoadMode(base, EPWM_COMP_LOAD_ON_CNTR_PERIOD); EPWM_setRisingEdgeDelayCount(base, red); EPWM_setFallingEdgeDelayCount(base, fed); // // Load AQCSFRC on CTR = 0 // EPWM_setActionQualifierContSWForceShadowMode(base, EPWM_COMP_LOAD_ON_CNTR_PERIOD); #if(EPWM_HR_ENABLED == true) // // Align HRPWM CMPA value and shadow mode with EPWM // HRPWM_setCounterCompareValue(base, HRPWM_COUNTER_COMPARE_A, 0); //should be chosen to be the same as the regular load option for the CMPA, CMPB register. //If the HRPWM module is configured in UP-DOWN counter mode, the shadow mode for the HRPWM // registers must be set to load on both ZERO AND PERIOD. HRPWM_setCounterCompareShadowLoadEvent(base, HRPWM_CHANNEL_A, HRPWM_LOAD_ON_CNTR_PERIOD); // // Align the HRPWM CMPA behavior with EPWM // HRPWM_setMEPEdgeSelect(base, HRPWM_CHANNEL_A, HRPWM_MEP_CTRL_FALLING_EDGE); HRPWM_setMEPControlMode(base, HRPWM_CHANNEL_A, HRPWM_MEP_DUTY_PERIOD_CTRL); // // HRCAL uses the EPWM1 clock // SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1); HRPWM_enableAutoConversion(base); // // Calibrate MEP_ScaleFactor // do { sSfoStatus = SFO(); } while(sSfoStatus == SFO_INCOMPLETE);
使用示例时会出现编译器错误、如下所示:
C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM
您好!
我会得到类似的误差。 我将与团队进行核实、然后再联系您。
您好!
我似乎已经解决了这个问题、不允许使用以下配置、否则在设置 CMPAHR 时不会产生任何结果、
// ePWM_setActionQualifierAction (BOOST_PWM2_base、ePWM_AQ_output_A、
// ePWM_AQ_output_low、
// ePWM_AQ_output_on_timebase_zero);
但我不知道原因、TI 参考设计2PH_IL_LLC_F28002x 项目似乎也具有类似的设置:
对于以下示例、SFO_V8_FPU_lib_build_c28.lib 将编译器问题修复为 新问题。
C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM
但我又遇到了另一个问题、我通过以下链接发布了新问题:
您好!
[引用 userid="180630" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/997072/tms320f280025c-hrpwm-cmpahr-changed-did-not-have-effect/3703690 #3703690"]我似乎已经解决了这个问题、不允许使用以下配置、否则在设置 CMPAHR 时不会产生任何结果、
// ePWM_setActionQualifierAction (BOOST_PWM2_base、ePWM_AQ_output_A、
// ePWM_AQ_output_low、
// ePWM_AQ_output_on_timebase_zero);
但我不知道原因、TI 参考设计2PH_IL_LLC_F28002x 项目似乎也具有类似的设置:
[/报价]您是否参考了此处的示例代码 C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM 或其他代码?
C:\ti\c2000\C2000Ware_DigitalPower_SDK_3_01_00_00\solutions\TIDM_1001\f28002x
您好!
对于此示例 C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM
您可以尝试使用最新的 CCS 版本(10.x)吗?
大家好、我刚刚尝试了 CCS 的最新版本10.3.1.00003、它没有编译错误。 请更新 CCS。