您好!我在试图用当前设备配置CMPSS,以触发epwm的TZ保护,但始终无法成功触发。
触发CMPSS比较器的外部引脚为C0:
我只需要配置高触发,也就是当引脚采集电压高于设定值时触发TZ保护。CMPSS相关的宏定义如下:
#define PVA_VDS_CMPSS_BASE CMPSS1_BASE //C0 #define PVA_VDS_CMPSS_ASYSCTRL_CMPHPMUX ASYSCTL_CMPHPMUX_SELECT_4 #define PVA_VDS_CMPSS_ASYSCTRL_MUX_VALUE 1
EPWM相关宏定义以及配置程序如下:
#define PVA_PhaseA_PWM_BASE EPWM1_BASE//0x00004000U #define PVA_PhaseA_PWM_DCBEVT1 EPWM_TZ_INTERRUPT_DCBEVT1//0x20U #define PVA_PhaseA_PWM_INT INT_EPWM1//0x00300301U #define PVA_PhaseA_PWM_GPIO 0 #define PVA_PhaseA_PWM_GPIO_PIN_CONFIG GPIO_0_EPWM1A //#define PVA_PhaseA_PWM_GPIO_PIN_CONFIG GPIO_0_GPIO0 #define PVA_PhaseB_PWM_BASE EPWM2_BASE #define PVA_PhaseB_PWM_INT INT_EPWM2 #define PVC_PhaseA_PWM_GPIO 12 #define PVC_PhaseA_PWM_GPIO_PIN_CONFIG GPIO_12_EPWM7A //#define PVC_PhaseA_PWM_GPIO_PIN_CONFIG GPIO_12_GPIO12 #define PVC_PhaseB_PWM_BASE EPWM8_BASE GPIO_setDirectionMode(PVC_PhaseA_PWM_GPIO,GPIO_DIR_MODE_OUT); GPIO_setPadConfig(PVC_PhaseA_PWM_GPIO,GPIO_PIN_TYPE_STD); // disable pull up GPIO_setPinConfig(PVC_PhaseA_PWM_GPIO_PIN_CONFIG);
CMPSS配置程序与EPWM TZ配置程序如下:
void setupVNCMPSS(void) { // // Enable CMPSS and configure the negative input signal to come from // the DAC // CMPSS_enableModule(PVA_VDS_CMPSS_BASE); CMPSS_configHighComparator(PVA_VDS_CMPSS_BASE, CMPSS_INSRC_DAC); // Select positive input to come from C0 ASysCtl_selectCMPHPMux(PVA_VDS_CMPSS_ASYSCTRL_CMPHPMUX, PVA_VDS_CMPSS_ASYSCTRL_MUX_VALUE); // // Use VDDA as the reference for the DAC and set DAC value to ~1.5V // CMPSS_configDAC(PVA_VDS_CMPSS_BASE, CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK | CMPSS_DACSRC_SHDW); // Initial - corresponds to ~1V CMPSS_setDACValueHigh(PVA_VDS_CMPSS_BASE, 1240); // CMPSS_setDACValueLow(PVA_VDS_CMPSS_BASE, 1240); // End digital filter specific code // // Configure the output signals. Both CTRIPH and CTRIPOUTH will be fed by // the asynchronous comparator output. // CMPSS_configOutputsHigh(PVA_VDS_CMPSS_BASE, CMPSS_TRIP_SYNC_COMP | CMPSS_TRIPOUT_SYNC_COMP); XBAR_setEPWMMuxConfig(XBAR_TRIP7, XBAR_EPWM_MUX00_CMPSS1_CTRIPH); XBAR_enableEPWMMux(XBAR_TRIP7, XBAR_MUX00); EPWM_enableDigitalCompareTripCombinationInput(PVC_PhaseA_PWM_BASE, EPWM_DC_COMBINATIONAL_TRIPIN7, EPWM_DC_TYPE_DCAH); EPWM_setTripZoneDigitalCompareEventCondition(PVC_PhaseA_PWM_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH); EPWM_setDigitalCompareEventSource(PVC_PhaseA_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); EPWM_setDigitalCompareEventSyncMode(PVC_PhaseA_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED); EPWM_setTripZoneAction(PVC_PhaseA_PWM_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW); EPWM_enableTripZoneSignals(PVC_PhaseA_PWM_BASE, EPWM_TZ_SIGNAL_DCAEVT1 ); }
现在,当我将1.65V电压接到C0上时(阈值设置为1024,即1V左右),PVC_PhaseA_PWM_BASE并没有触发TZ保护,我是否搞错了某些内容?另外,我想请教如何查看CMPSS模块比较器的实时输出值为高还是低,这可以做到吗?