主题中讨论的其他器件:C2000WARE、 SysConfig
您好!
我正在 尝试 使用 ePWM 模块生成单个双脉冲信号、用于驱动 MOSFET 双脉冲测试装置。 目标是 实现类似于下图所示的波形:
我 认为 这应该 非常容易在 Launchpad 上实现。 但是、由于我是该开发平台的新手、因此我现在已经为该平台纠结了一段时间。
我采用的方法依赖于 ePWM 跳闸区域和事件触发器子模块。 我可以 使用 SYSCFG 文件并使用 CMPA 和 CMPB 计数器比较来生成所需的波形、如图所示。 我正在使用 事件触发器子模块 在每个周期后生成一个中断。 我已 在 SYSCFG 文件中将 GPIO1配置为 INPUTXBAR 源(GPIO 配置为输入: 输入时启用推挽输出/上拉)。 其原理是 当中断产生时、在中断无效中处理、此时 GPIO0被切换、触发一次性 TZ1 (通过 XBAR)并强制 EPWM 输出为低电平状态。
以下是借助各种 c2000ware 示例、C2000 ePWM 开发人员指南以及此论坛中发现的类似问题完成的工作:
#include "driverlib.h"
#include "device.h"
#include "board.h"
uint32_t epwm1IntCount;
__interrupt void DPhandler(void);
void main(void)
{
epwm1IntCount = 0U;
Device_init(); // Initialize device clock and peripherals
Device_initGPIO(); // Disable pin locks and enable internal pull-ups.
Interrupt_initModule(); // Initialize PIE and clear PIE registers. Disables CPU interrupts.
Interrupt_initVectorTable(); // Initialize the PIE vector table with pointers to the shell Interrupt service Routines (ISR).
Board_init();
SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // Disable sync(Freeze clock to PWM as well)
EPWM_setSyncOutPulseMode(myEPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO); // ePWM1 SYNCO is generated on CTR=0
Interrupt_enable(INT_EPWM1);
EPWM_setInterruptEventCount(myEPWM1_BASE, 0U);
Interrupt_register(INT_EPWM1, &DPhandler);
EPWM_enableTripZoneInterrupt(myEPWM1_BASE, EPWM_TZ_INTERRUPT_OST);
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // Enable sync and clock to PWM
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;) // IDLE loop. Just sit and loop forever (optional):
{
asm (" NOP");
}
}
__interrupt void DPhandler(void)
{
epwm1IntCount++; // Interrupt count
GPIO_togglePin(myGPIO1); // trip TZ1
EPWM_clearOneShotTripZoneFlag(myEPWM1_BASE, EPWM_TZ_OST_FLAG_OST1);
EPWM_clearTripZoneFlag(myEPWM1_BASE, (EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_CBC));
EPWM_clearTripZoneFlag(myEPWM1_BASE, (EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST));
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP2); // acknowledge interrupt to continue
}
根据当前解决方案、即使配置了计时器周期以及 CMPA 和 CMPB 值、使得 pulse1应为10us、pulse2应为4us、二者之间相差3us、也会生成单个4.6us 脉冲。 下面是 EPWM 模块的.syscfg 配置。 TBCTR 配置为在同步事件之后从初始计数器值100开始递减、以确保动作限定器事件"时基计数器等于零"被挂接。
我的 方法是否也 适用? 如果能对此提供任何帮助,我将不胜感激。
如前所述、现在我已经 使用.syscfg 文件配置了 EPWM、GPIO 和 INPUTXBAR。 如果我要 在.c 代码中配置 EPWM 占空比、那么 SYSCFG 如何发挥作用? 是否将覆盖在.syscfg 中进行的配置? 如果我想使用参数控制脉冲宽度、我在将来可能想做这件事。
非常感谢您的帮助。
此致、
Juhani



