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.
您好!
抱歉我的英语水平。
首先、我致力于开发 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);
}
尊敬的 Damien:
欢迎来到 e2e 论坛。 很高兴能帮助您解决问题。 下面我不太理解您的问题。 您能再解释一下什么不起作用吗?
[引用 userid="489604" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1031871/tms320f280025c-problem-to-configure-cmpss-on-tms320f280025c ]]当我仅使用两个 ADCIN 时,它可以正常工作:仅与 XBAR_MUX00和 XBAR_MUX02配合使用,但不与另一个 ADCIN 配合使用。尊敬的 Franck:
我使用连接到 CMP1_HP 信号的 ADC 输入、例如、我将 DAC 设置为特定阈值、并使用适合仿真 ADC 输入的外部电源。 当然、目标是将 OCP/OVP 反馈连接到这些输入。 我使用引脚分配表将 ADC 条目链接到有问题的 CMPSS。 如果我理解正确,我可以将多个 CMPSS 分配给跳闸区域的同一信号(XBAR_TRIP4)吗? 我能否将多个多路复用器连接到同一跳闸区域切断信号(XBAR_TRIP4)?
当我使用此配置时,它工作正常(关闭正常):
Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX02_CMPSS2_CTRIPH);
Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00、XBAR_MUX02);
但是,当我想在 ADC 条目中添加另一个 CMPSS 时,它不起作用? 使用相同的跳闸区域或安托尔。 例如、此代码不适用于 MUX06:
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);
Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00 | XBAR_MUX02 | XBAR_MUX06);
我将查看是否是 microcontrolleur 的配置问题、在相关引脚上、我可能不适合 CMPSS、而是另一个函数(请参阅表引脚属性)
您好!
我想问题是 CMPSS 配置:CMPx_HPx 与模拟输入输出的关系否?
我的配置如下:
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);
//AIO224 -> myAIO0 Pinmux
GPIO_setPinConfig (GPIO_224_GPIO224);
GPIO_setAnalogMode (224、GPIO_ANALOG_ENABLED);
//AIO230 -> myAIO1 Pinmux
GPIO_setPinConfig (GPIO_230_GPIO230);
GPIO_setAnalogMode (230、GPIO_ANALOG_ENABLED);
//AIO226 -> myAIO2 Pinmux
GPIO_setPinConfig (GPIO_2226_GPIO226);
GPIO_setAnalogMode (226、GPIO_ANALOG_ENABLED);
//使用 CMP1_HP0
ASysCtl_selectCMPHPMUX (ASYSCTL_CMPHPMUX_SELECT_1、0);
//使用 CMP2_HP3
ASysCtl_selectCMPHPMUX (ASYSCTL_CMPHPMUX_SELECT_2、3);
//使用 CM3_HP0
ASysCtl_selectCMPHPMUX (ASYSCTL_CMPHPMUX_SELECT_3、0);
//使用 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_MUX04_CMPSS3_CTRIPH);
//请参阅 ePWM X-BAR Mux 配置表
Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00 | XBAR_MUX02 | XBAR_MUX04);
//清除跳闸标志
ePWM_clearTripZoneFlag (base、ePWM_TZ_interrupt | ePWM_TZ_FLAG_OST);
返回 TBCLK;
}
可以帮帮我吗?
谢谢
此致
Damien
您好!
我将带有 AIO224的 CMP1_HP1与引脚13 (µC I ² C 的80QFP)搭配使用
带有 AIO230的 CMP2_HP3连接到引脚29 (用于 I µC ² C 的80QFP)
带 AIO226的 CM3_HP0至引脚11 (我的 μ µC 为80QFP)
当我在引脚(13和29)上使用电源施加1V (参考 DAC = 1024) 时、ePWM 会正确关闭、但当我在引脚编号11上施加电压时、它不起作用。 为什么? 可以告诉我吗?
谢谢
Damien
尊敬的 Damien:
您的 CMPSS 配置看起来正确。 要排除这一问题、您能否查看下面寄存器的内容?
AnalogSubsysRegs.CMPHPMXSEL
顺便说一下、在将来发布代码时、请使用代码插入工具。 这使得代码更易于阅读。
您好、Frank、
我发现了这个问题,这是一个愚蠢的错误:我忘记了设置 CMPSS 3 DAC 配置。
感谢您的帮助!
Damien
尊敬的 Damien:
很高兴听到您解决了问题! 如果再出现、请告知我们。
您好、Frank、
当我使用 CMPxLP 输入作为 CTRIPxL 输出时、我对 ePWM 输出有一个新问题。
当我使用 CMPxHP 输入来关闭 ePWM 时、一切工作正常。 (仅具有 CMPxHP 输入和 DAC 基准)
这是我们之前的交换中使用的配置。 我现在尝试通过也使用 CMP_LP 输入来完整使用 CMPSS、但在本例中、ePWM 是异步的。 我不明白为什么? 我加入以下代码和 有关 ePWM 的内容。
和代码:
#include <f28002x_device.h> #include "driverlib.h" #include "utils.h" #include "device.h" #include "board.h" #include "config.h" float init_EPWM(); void init_cmpss(); void main(void) { // Initialize device clock and peripherals Device_init(); // Disable pin locks and enable internal pullups. Device_initGPIO(); // Initialize PIE and clear PIE registers. Disables CPU interrupts. Interrupt_initModule(); // Initialize the PIE vector table with pointers to the shell Interrupt Service Routines (ISR). Interrupt_initVectorTable(); // board.c and board.h generate by sysconfig Board_init(); // Disable sync and clock to PWM SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // Configure COMP1H init_cmpss(CMPSS1_BASE); init_cmpss(CMPSS2_BASE); init_cmpss(CMPSS3_BASE); // initEPWM1 - Configure ePWM1 float tbclk = init_EPWM(myEPWM1_BASE); // initEPWM2 - Configure ePWM2 tbclk = init_EPWM(myEPWM2_BASE); // Configure phase between PWM1 & PWM2. PWM1 is configure as master and ePWM2 as slaves. EPWM_disablePhaseShiftLoad(myEPWM1_BASE); EPWM_setPhaseShift(myEPWM1_BASE, 0U); // ePWM1 SYNCO is generated on CTR=0 EPWM_enableSyncOutPulseSource(myEPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO); // Configure phase shift for EPWM2 & 3 set_phase(myEPWM2_BASE, PHI); EPWM_setSyncInPulseSource(myEPWM2_BASE, EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1); EPWM_enablePhaseShiftLoad(myEPWM2_BASE); // Calculate delays get_delays_FED_RED(myEPWM1_BASE, tbclk); get_delays_FED_RED(myEPWM2_BASE, tbclk); // Enable sync and clock to PWM SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // Enable Global Interrupt (INTM) and realtime interrupt (DBGM) EINT; ERTM; while(1) { // Trip flag is set when CTRIP signal is asserted if((EPWM_getTripZoneFlagStatus(myEPWM1_BASE) & EPWM_TZ_FLAG_OST) != 0U && (EPWM_getTripZoneFlagStatus(myEPWM2_BASE) & EPWM_TZ_FLAG_OST) != 0U) { // Wait for comparator CTRIP to de-assert while((CMPSS_getStatus(CMPSS1_BASE) & CMPSS_STS_HI_FILTOUT) != 0U && (CMPSS_getStatus(CMPSS2_BASE) & CMPSS_STS_HI_FILTOUT) != 0U) { } // Clear trip flags 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) { float PWM_TBPRD; float PWM_CMPA; EPWM_ClockDivider PWM_PARAM_PRESCALER; EPWM_HSClockDivider PWM_PARAM_HIGHSPEEDPRESCALER; float TBCLK; get_pwm_clock_from_freq(&PWM_TBPRD , &PWM_CMPA , &PWM_PARAM_PRESCALER , &PWM_PARAM_HIGHSPEEDPRESCALER, &TBCLK); // Parameters 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_PARAM_HIGHSPEEDPRESCALER); // Set up shadowing EPWM_setCounterCompareShadowLoadMode(base, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); // Set actions 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); // Trip zone // Configure ePWM1x to output low on TZx TRIP EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW); EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW); // Trigger event when DCBH is high EPWM_setTripZoneDigitalCompareEventCondition(base, EPWM_TZ_DC_OUTPUT_B1, EPWM_TZ_EVENT_DCXH_HIGH); // Configure DCBH to use TRIP4 as an input EPWM_enableDigitalCompareTripCombinationInput(base, EPWM_DC_COMBINATIONAL_TRIPIN4, EPWM_DC_TYPE_DCBH); // Enable DCB as OST EPWM_enableTripZoneSignals(base, EPWM_TZ_SIGNAL_DCBEVT1); // Configure the DCB path to be unfiltered and asynchronous EPWM_setDigitalCompareEventSource(base, EPWM_DC_MODULE_B, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); // To use CMPx_LP //AIO224 -> myAIO0 Pinmux GPIO_setPinConfig(GPIO_226_GPIO226); //AIO237 -> myAIO0 Pinmux GPIO_setPinConfig(GPIO_237_GPIO237); //AIO226 -> myAIO2 Pinmux GPIO_setPinConfig(GPIO_230_GPIO230); // To use CMP1_HP0 ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_1, 1); // To use CMP2_HN1 ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_2, 3); // To use CMP3_HP0 ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_3, 0); XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX01_CMPSS1_CTRIPL); XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX03_CMPSS2_CTRIPL); XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX05_CMPSS3_CTRIPL); XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX01 | XBAR_MUX03 | XBAR_MUX05); // Clear trip flags EPWM_clearTripZoneFlag(base, EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST); return TBCLK; } void set_delays(uint32_t base, uint16_t DBFED, uint16_t DBRED) { // Sets up the rising edge delay input signal. EPWM_setFallingEdgeDeadBandDelayInput(base, EPWM_DB_INPUT_EPWMA); // Sets up the falling edge delay input signal. EPWM_setRisingEdgeDeadBandDelayInput(base, EPWM_DB_INPUT_EPWMA); // This function sets the FED count value, this one should be less than 16384. EPWM_setFallingEdgeDelayCount(base, DBFED); // This function sets the RED count value, this one should be less than 16384. EPWM_setRisingEdgeDelayCount(base, DBRED); // This function sets up the polarity : EPWM_DB_POLARITY_ACTIVE_HIGH => polarity is not inverted and EPWM_DB_POLARITY_ACTIVE_LOW => polarity is inverted. EPWM_setDeadBandDelayPolarity(base, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH); EPWM_setDeadBandDelayPolarity(base, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_HIGH); // This function sets up the dead band delay mode. The enableDelayMode determines if a dead band delay should be applied. 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 init_cmpss(base) { // Enable CMPSS and configure the negative input signal to come from the DAC CMPSS_enableModule(base); CMPSS_configHighComparator(base, CMPSS_INSRC_DAC); CMPSS_configLowComparator(base, CMPSS_INSRC_DAC); // Use VDDA as the reference for the DAC and set DAC value to midpoint for arbitrary reference. CMPSS_configDAC(base, CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK | CMPSS_DACSRC_SHDW); CMPSS_setDACValueHigh(base, 1024); // Configure the output signals. Both CTRIPH will be fed by the synchronous comparator output. CMPSS_configOutputsHigh(base, CMPSS_TRIP_SYNC_COMP); CMPSS_configOutputsLow(base, CMPSS_TRIP_SYNC_COMP); }
此函数的作用是 什么:CMPSS_configOutputsLow (base、CMPSS_TRIP_SYNC_COMP)?
可以帮帮我吗?
谢谢
Damien
尊敬的 Damien:
查看您的配置代码以了解 COMPH 和 compl 之间的差异、我发现您没有为 compl 配置 DACVAL。
CMPSS_setDACValueHigh(base, 1024);
尝试将 DACValueLow 也设置为1024、看看它是否起作用。 明天我将会是 OOO、如果上述建议不起作用、我将在下周早些时候查看您的回复。
你(们)好、Frank
我在论坛上写了一封信后发现了错误、很抱歉、是的、就是这样。 我下次会考虑一些好处。 再次抱歉!
谢谢
Damien
没问题。 如果您遇到更多问题、请告知我们。