主题中讨论的其他器件:LAUNCHXL-F280025C、 SysConfig
您好!
抱歉我的英语水平。
首先、我致力于开发 LAUNCHXL-F280025C、以开发电子电源解决方案的数字调节。 我开发了 PWM 功能、包括占空比、相位设置等...
现在浏览论坛几天后、我一直在关注 CMPSS 设计。 我想触发 CMPSS 并关闭所有 ePWM (用于保护 OCP/ OVP 等)。
当我只使用两个 ADCIN 时,它就能正常工作:只能与 XBAR_MUX00和 XBAR_MUX02配合使用,但不能与另一个配合使用。
为什么? 可以告诉我吗?
我加入我的代码。
#include
#include "driverlib.h"
#include "utils.h"
#include "device.h"
#include "board.h"
#include "config.h"
float init_ePWM();
void init_cmpss();
void main (void)
{
//初始化设备时钟和外设
device_init();
//禁用引脚锁定并启用内部上拉。
DEVICE_initGPIO();
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
interrupt_initModule();
//使用指向 shell 中断服务例程(ISR)的指针初始化 PIE 矢量表。
interrupt_initVectorTable();
// board.c 和 board.h 由 SysConfig 生成
Board_init();
//禁用 PWM 的同步和时钟
SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
//配置 COMP1H
init_cmpss (CMPSS1_base);
init_cmpss (CMPSS2_base);
// initEPWM1 -配置 ePWM1
浮点 TBCLK = INIT_ePWM (myEPWM1_BASE);
// initEPWM2 -配置 ePWM2
TBCLK = init_ePWM (myEPWM2_base);
//在 PWM1和 PWM2之间配置相位。 PWM1配置为主器件、ePWM2配置为从器件。
ePWM_DisablePhaseShiftLoad (myEPWM1_base);
ePWM_setPhaseShift (myEPWM1_base、0U);
//在 CTR=0时生成 ePWM1 SYNCO
ePWM_enableSyncOutPulseSource (myEPWM1_base、ePWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
//为 EPWM2 & 3配置相移
SET_PHASE (myEPWM2_base、PHI);
ePWM_setSyncInPulseSource (myEPWM2_base、ePWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
ePWM_enablePhaseShiftLoad (myEPWM2_base);
//计算延迟
GET_DELAY_FED_RED (myEPWM1_BASE、TBCLK);
GET_DELAY_FED_RED (myEPWM2_base、TBCLK);
//启用到 PWM 的同步和时钟
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
//启用全局中断(INTM)和实时中断(DBGM)
EINT;
ERTM;
while (1)
{
当 CTRIP 信号被置位时、//跳闸标志被置位
if ((ePWM_getTripZoneFlagStatus (myEPWM1_base)& ePWM_TZ_FLAG_OST)!= 0U &&(ePWM_getTripZoneFlagStatus (myEPWM2_base)& ePWM_TZ_FLAG_OST)!= 0U)
{
//等待比较器 CTrip 取消置位
while ((CMPSS_getStatus (CMPSS1_base)& CMPSS_STS_HI_FILTOUT)!= 0U &&(CMPSS_getStatus (CMPSS2_base)& CMPSS_STS_HI_FILTOUT)!= 0U)
{
}
//清除跳闸标志
ePWM_clearTripZoneFlag (myEPWM1_base、ePWM_TZ_INTERRUPT | ePWM_TZ_FLAG_OST);
ePWM_clearTripZoneFlag (myEPWM2_base、ePWM_TZ_INTERRUPT | ePWM_TZ_FLAG_OST);
}
}
}
float init_ePWM (base)
{
浮点 PWM_TBPRD;
浮点 PWM_CMPA;
ePWM_ClockDivider PWM_PARAM_PRESCALER;
ePWM_HSClockDivider PWM_PARAM_HIGHSPEEDPRESCALER;
悬空 TBCLK;
get_pwm_clock_fin_freq (&wm_TBPRD、&wm_CMPA、&wm_Param_prescaler、&wm_Param_HIGESPEEDPRESCALER、&TBCLK);
//参数
ePWM_setTimeBasePeriod (base、(uint16_t) PWM_TBPRD);
ePWM_setCounterCompareValue (base、ePWM_COUNTER_COMPARE_A、(uint16_t) PWM_CMPA);
ePWM_setPhaseShift (base、0U);
ePWM_setTimeBaseCounter (base、0U);
ePWM_setTimeBaseCounterMode (base、ePWM_COUNTER_MODE_UP_DOWN);
ePWM_DisablePhaseShiftLoad (base);
ePWM_setClockPrescaler (base、PWM_PARAM_PREScaler、PWM_PAMP_HIGHSPEEDPRESCALER);
//设置隐藏
ePWM_setCounterCompareShadowImage LoadMode (base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
//设置操作
ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_down_CMPA);
ePWM_setActionQualifierAction (base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_down_CMPA);
//跳匣区域
//将 ePWM1x 配置为在 TZx 跳变时输出低电平
ePWM_setTripZoneAction (base、ePWM_TZ_ACT_EVENT_TZA、ePWM_TZ_ACT_LOW);
ePWM_setTripZoneAction (base、ePWM_TZ_ACT_EVENT_TSB、ePWM_TZ_ACT_LOW);
// DCBH 为高电平时触发事件
ePWM_setTripZoneDigitalCompareEventCondition (base、ePWM_TZ_DC_OUTPUT B1、ePWM_TZ_EVENT_DCXH_HIGH);
//配置 DCBH 以使用 TRIP4作为输入
ePWM_enableDigitalCompareTripCombinationInput (base、ePWM_DC_combinational_TRIPIN4、ePWM_DC_TYPE_DCBH);
//将 DCB 启用为 OST
ePWM_enableTripZoneSignals (base、ePWM_TZ_SIGNEL_DCBEVT1);
//将 DCB 路径配置为未过滤和异步
ePWM_setDigitalCompareEventSource (base、ePWM_DC_MODULE_B、ePWM_DC_EVENT_1、ePWM_DC_EVENT_SOURC_ORIG_SIGN);
//使用 ePWM X-BAR 将 TRIP4配置为 CTRIP1H
Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX02_CMPSS2_CTRIPH);
Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX06_CMPSS4_CTRIPH);
//请参阅 ePWM X-BAR Mux 配置表
Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00、XBAR_MUX02 | XBAR_MUX06);
//清除跳闸标志
ePWM_clearTripZoneFlag (base、ePWM_TZ_interrupt | ePWM_TZ_FLAG_OST);
返回 TBCLK;
}
{
//设置上升沿延迟输入信号。
ePWM_setFallingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);
//设置下降沿延迟输入信号。
ePWM_setRisingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);
//此函数设置馈入计数值,此值应小于16384。
ePWM_setFallingEdgeDelayCount (base、DBFED);
//此函数设置红色计数值,此值应小于16384。
ePWM_setRisingEdgeDelayCount (base、DBRED);
//此函数设置极性:ePWM_DB_POLARY_ACTIVE_HIGH =>极性未反转,而 ePWM_DB_POLARY_ACTIVE_LOW =>极性反转。
ePWM_setDeadBandDelayPolarity (base、ePWM_DB_RED、ePWM_DB_Polarity、ACTIVE_HIGH);
ePWM_setDeadBandDelayPolarity (base、ePWM_DB_FED、ePWM_DB_Polarity、ACTIVE_HIGH);
//此函数设置死区延迟模式。 enableDelayMode 决定是否应应用死区延迟。
ePWM_setDeadBandDelayMode (base、ePWM_DB_RED、true);
ePWM_setDeadBandDelayMode (base、ePWM_DB_FED、true);
//ePWM_setDeadBandOutputSwapMode (myEPWM2_base、ePWM_DB_OUTPUT A、false);
ePWM_setDeadBandOutputSwapMode (base、ePWM_DB_output_B、false);
}
void SET_DELUEURS(uint32_t base、uint16_t DBFED、uint16_t DBRED)
void init_cmpss (base)
{
//启用 CMPSS 并将负输入信号配置为来自 DAC
CMPSS_enableModule (base);
CMPSS_CONFIGHighComparator (base、CMPSS_INSRC_DAC);
//使用 VDDA 作为 DAC 的基准,并将 DAC 值设置为中点以供任意基准。
CMPSS CONFIGDAC (base、CMPSS DACREF_VDDA | CMPSS DACVAL_SYSCLK | CMPSS DACSRC_Shdw);
CMPSS_setDACValueHigh (base、1024);
//配置输出信号。 CTRIPH 和 CTRIPOUTH 都将由异步比较器输出供电。
CMPSS_CONFIGOutputsHigh (base、CMPSS_TRIP_TRIP_ASYNC_COMP | CMPSS_TRIPOUT_ASYNC_COMP);
}