大家好,
我尝试使用TMS320F2.8379万D实现峰值电流模式控制。
将1V信号应用到CMPIN1P引脚。 斜面发生器用于比较器的负输入。 CMCSS模块1配置了以下代码:
CMPS_enableModule(CMPSS1_base); CMPS_configHighComparator (CMPSS1_BASE,CMPS_INSRC_DAC); CMPS_configDAC (CMPSS1_BASE,CMPS_DACVAL_PWMSYNC | CMPS_DACREF_VDDA | CMPS_DACSRC_RAMP); CMPSS_configOutputsHigh (CMPSSS1_BASE,CMPSS_TRIGK_FILTER | CMPS_TRIPOUT_SYNC_COMP); CMPS_setRampDecValue (CMPSSS1_BASE,RAMP_RECOTION); CMPS_setRampDelayValue (CMPSSS1_BASE,RAMP_DELAY); CMPS_configRamp (CMPS1_BASE, 2.7万, 渐变递减, 斜坡延迟, 1, TRUE); CMPS_configFilterHigh (CMPSSS1_BASE,2,20,15); CMPS_initFilterHigh (CMPSSS1_BASE);
GPIO _setMasterCore (11,GPIO核心_CPU1);
GPIO_setPinConfig (GPIO _11_OUTPUTXBAR7);
GPIO_setDirectionMode (11,GPIO_DIR_MODE_OUT);
GPIO _setPadConfig (11,GPIO PIN类型标准);
xbar_setOutputMuxConfig (XBAR_OUTPUT7,XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
xbar_enableOutputMux (XBAR_OUTPUT7,XBAR_MUX00); XBAR_setEPWMMuxConfig (XBAR_TRIP4,XBAR_ePWM_MUX00_CMPSS1_CTRIPH); XBAR_enableEPWMMux (XBAR_TRIP4, Xbar_MUX00);
这按预期工作。
现在有两个选项可用于配置ePWM模块。
选项1:使用跳闸区域的传统方式,与旧ePWM类型1相同
//设置TBCLK ePWM_setTimeBasePeriod (EPWM1_BASE,PWM_TIMER_TBPRD); ePWM_setPhaseShift (EPWM1_BASE,0); ePWM_setTimeBaseCounter (EPWM1_BASE, 0U); ePWM_setSyncOutPulseMode (EPWM1_BASE,ePWM_SYNC_Out_PULSE_ON_COUNT_ZERO); //设置计数器模式 ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_COUNTRY_MODE_UP); ePWM_dislockPhaseLoad (ableWM1_BASE); eEPcalseter,PWM Pressetbase ePWM_Clock_diver_1, ePWM_HSCLOCK分隔符_1); //设置阴影 ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE, ePWM_counter_compare_A, ePWM_COMP_LOG_ON_CNTR_ZERO); ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE, ePWM_counter_compare_B, ePWM_COMP_LOW_ON_CNTR_ZERO); //设置比较值 ePWM_setCounterCompareValue (EPWM1_BASE, ePWM_counter_compare_A, 0); //设置操作 ePWM_setActionQualifierAction (EPWM1_base, ePWM_AQ_OUTPUT A, ePWM_AQ_OUTPUT高, ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO); ePWM_setActionQualifierAction (EPWM1_BASE, ePWM_AQ_OUTPUT A, ePWM_AQ_OUTPUT低, ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA); //设置数字比较 // TRIP4 -> DCBH ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE, ePWM_DC_combinational_TRIPIN4, ePWM_DC_TYPE_DCBH); // DCBH -> DCBEVT2 ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE, ePWM_TZ_DC_OUTPT_B2, ePWM_TZ_EVENT_DCXH_HIGH); //将DCB启用为CBC ePWM_enableTripZoneSignals (EPWM1_BASE,ePWM_TZ_SIGNAL_DCBEVT2); //设置跳闸区域 ePWM_setTripZoneAction (EPWM1_BASE,ePWM_TZ_ACT_EVENT_TZ,ePWM_TZ_LOW操作);ePWM_
这按预期工作。 当Cmpss1Regs.RAMPMAXREFS值从0线性增加到4万时,PWM在开始时为低,一旦斜坡启动值超过1V,将生成小PWM脉冲。
示波器截图显示占空比从0上升到25 %。 通过比较器脉冲,PWM变为低。 一切都如预期的那样工作。
脚注:PWM1_L为永久低电平。 这应该是PWM1_H的反向信号,但不能用于DSP。 翻转和死区将通过硬件门外部生成。
选项2:使用Action Qualliifier和Dead Band的新方法
使用Action Qualifier (操作限定符)而不是使用跳闸区域来清除PWM信号。 这具有与死区模块生成互补PWM信号的优势。
//设置TBCLK ePWM_setTimeBasePeriod (EPWM1_BASE,PWM_TIMER_TBPRD); ePWM_setTimeBaseCounter (EPWM1_BASE,0U); ePWM_setSyncOutPulseMode (EPWM1_BASE, ePWM_SYNC_OUT PULSE_ON_COUNTER_ZERO); //设置计数器模式 ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_COUNT_MODE_UP); ePWM_DisablePhaseShiftLoad (EPWM1_BASE); ePWM_setClockPrescaler (EPWM1_BASE, ePWM_Clock_diver_1, ePWM_HSCLOCK分隔符_1); //设置阴影 ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE, ePWM_counter_compare_A, ePWM_COMP_LOG_ON_CNTR_ZERO); ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE, ePWM_counter_compare_B, ePWM_COMP_LOW_ON_CNTR_ZERO); //设置比较值 ePWM_setCounterCompareValue (EPWM1_BASE, ePWM_counter_compare_A, 0); //设置死区 ePWM_setDeadBandDelayPolarity (EPWM1_BASE,ePWM_DB_FED,ePWM_DB_POLICY_ACTIVE_LOW); ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_RED, TRUE); ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_FED,TRUE); ePWM_setRisingEdgeDelayCount (EPWM1_BASE, PWM_DB); ePWM_setFallingEdgeDelayCount (EPWM1_BASE,PWM_DB); //设置操作 ePWM_setActionQualifierAction (EPWM1_BASE, ePWM_AQ_OUTPUT A, ePWM_AQ_OUTPUT高, ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO); ePWM_setActionQualifierAction (EPWM1_BASE, ePWM_AQ_OUTPUT A, ePWM_AQ_OUTPUT低, ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA); //设置数字比较 // TRIP4 -> DCBH ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE, ePWM_DC_combinational_TRIPIN4, ePWM_DC_TYPE_DCBH); // DCBH -> DCBEVT2 ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE, ePWM_TZ_DC_OUTPT_B2, ePWM_TZ_EVENT_DCXH_HIGH); //将DCB启用为T1源 ePWM_setActionQualifierT1TriggerSource (EPWM1_BASE,ePWM_AQ_TRIGG_EVENT_TRIG_DCB_2); ePWM_setActionQualifierAction (EPWM1_BASE, ePWM_AQ_OUTPUT A, ePWM_AQ_OUTPUT低, ePWM_AQ_OUTPT_ON_T1_COUNT_UP);
COMPSS1初始化代码与选项1相同。
通过此实施,我有两个意外的行为。
1:当斜坡起始值低于比较器负输入的1V时,为什么是50 % 的占空比(这是CMPA的值)。 我的理解是,它应该为0。
2:死区模块未生成反向门信号。 Dead Band模块应独立于Action Qualifier模块。
此致,
托比亚斯









