EPWM.H文件学习

  1. 代码片段
    \内部
    / / !检查ePWM基址。
    / / !
    / / !\param base指定ePWM模块基址。
    / / !
    / / !此函数确定ePWM模块的基址是否有效。
    / / !
    / / !\return如果基址有效则返回\b true,而\b false
    / / !否则
#ifdef DEBUG
static inline bool EPWM_isBaseValid(uint32_t base)
{
    return(
           (base == EPWM1_BASE) ||
           (base == EPWM2_BASE) ||
           (base == EPWM3_BASE) ||
           (base == EPWM4_BASE) ||
           (base == EPWM5_BASE) ||
           (base == EPWM6_BASE) ||
           (base == EPWM7_BASE) ||
           (base == EPWM8_BASE)
          );
}
#endif

/ !设置时间基数计数
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param count是时间基础计数值。
/ / !
/ / !该函数设置时基计数器的16位计数器值。
/ / !
/ / !\返回None。

static inline void
EPWM_setTimeBaseCounter(uint32_t base, uint16_t count)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Write to TBCTR register
    //
    HWREGH(base + EPWM_O_TBCTR) = count;
}

/ / !设置移相同步后的计数模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param模式是计数模式。
/ / !
/ / !此函数将时间基础计数设置为在新操作后向上或向下计数
/ / !epwm_setphasshift()设置的相位值。计数方向为
/ / !由变量模式决定。mode的有效输入是:
/ / !—EPWM_COUNT_MODE_UP_AFTER_SYNC—同步完成后计数
/ / !—EPWM_COUNT_MODE_DOWN_AFTER_SYNC—同步完成后倒计时
/ / !
/ / !\返回None。

static inline void
EPWM_setCountModeAfterSync(uint32_t base, EPWM_SyncCountMode mode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    if(mode == EPWM_COUNT_MODE_UP_AFTER_SYNC)
    {
        //
        // Set PHSDIR bit
        //
        HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PHSDIR;
    }
    else
    {
        //
        // Clear PHSDIR bit
        //
        HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PHSDIR;
    }
}

设置时间基准时钟和高速时间基准时钟计数预刻度
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param预刻度是时间基数计数预刻度值。
/ / !\param highspeedprecaler是高速时基计数预刻度
/ / !价值。
/ / !
/ / !这个函数设置基准时钟的预刻度(分频器)值
/ / !计数器和高速基准时钟计数器。
/ / !prescaler和highSpeedPrescaler的有效值是EPWM_CLOCK_DIVIDER_X,
/ / !其中X为1,2,4,8,16,32,64或128。
/ / !这些宏的实际数值表示值0,1…7。
/ / !输出时钟的方程为:
/ / !TBCLK = EPWMCLK/(highspeedprecaler * prescaler)
/ / !
/ / !\b注:EPWMCLK是SYSCLK的缩放版本。复位时EPWMCLK为一半
/ / !SYSCLK。
/ / !
/ / !\返回None。

static inline void
EPWM_setClockPrescaler(uint32_t base, EPWM_ClockDivider prescaler,
                       EPWM_HSClockDivider highSpeedPrescaler)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Write to CLKDIV and HSPCLKDIV bit
    //
    HWREGH(base + EPWM_O_TBCTL) =
                ((HWREGH(base + EPWM_O_TBCTL)  &
                ~(EPWM_TBCTL_CLKDIV_M | EPWM_TBCTL_HSPCLKDIV_M)) |
                (((uint16_t)prescaler << EPWM_TBCTL_CLKDIV_S) |
                ((uint16_t)highSpeedPrescaler << EPWM_TBCTL_HSPCLKDIV_S)));
}

! 强制软件同步脉冲
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !该功能导致单个软件启动同步脉冲。确保
/ / !在使用此函数之前,使用EPWM_setupSyncOutputMode()选择合适的模式。
/ / !
/ / !\返回None。

static inline void
EPWM_forceSyncPulse(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Set SWFSYNC bit
    //
    HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_SWFSYNC;
}

/ !设置同步输出脉冲事件
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param模式是同步输出模式。
/ / !
/ / !设置同步出脉冲模式。
/ / !mode的有效值为:
/ / !—EPWM_SYNC_OUT_PULSE_ON_SOFTWARE—同步脉冲由软件生成
/ / !当EPWM_forceSyncPulse ()
/ / !函数由EPWMxSYNCI调用
/ / !信号。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO—同步脉冲产生于
/ / !时间基准计数器等于零。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_B -同步脉冲产生于
/ / !时基计数器等于比较
/ / !B值。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_C同步脉冲
/ / !时基计数器等于比较
/ / !C值。
/ / !—EPWM_SYNC_OUT_PULSE_ON_COUNTER_COMPARE_D同步脉冲
/ / !时基计数器等于比较
/ / !D值。
/ / !—EPWM_SYNC_OUT_PULSE_DISABLED禁用同步脉冲。
/ / !
/ / !\返回None。

static inline void
EPWM_setSyncOutPulseMode(uint32_t base, EPWM_SyncOutPulseMode mode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // No extended mode support
    //
    if(mode < EPWM_SYNC_OUT_PULSE_DISABLED)
    {
        //
        // Write to SYNCOSEL bits
        //
        HWREGH(base + EPWM_O_TBCTL) =
                ((HWREGH(base + EPWM_O_TBCTL) & ~(EPWM_TBCTL_SYNCOSEL_M)) |
                 ((uint16_t)mode << EPWM_TBCTL_SYNCOSEL_S));
    }
    //
    // Extended modes and sync out disable mode
    //
    else
    {
        //
        // Write 0x3 to SYNCOSEL to enable selection from SYNCOSELX
        //
        HWREGH(base + EPWM_O_TBCTL) = HWREGH(base + EPWM_O_TBCTL) |
                                      EPWM_TBCTL_SYNCOSEL_M;

        //
        // Write to SYNCOSELX bit
        //
        HWREGH(base + EPWM_O_TBCTL2) =
               ((HWREGH(base + EPWM_O_TBCTL2) & ~(EPWM_TBCTL2_SYNCOSELX_M)) |
                (((uint16_t)mode & 0x3U) << EPWM_TBCTL2_SYNCOSELX_S));
    }
}

设置PWM周期负载方式。
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param loadMode是PWM周期负载模式。
/ / !
/ / !该功能用于设置PWM周期的负载模式。如果loadMode设置为
/ / !EPWM_PERIOD_SHADOW_LOAD,写或读到TBPRD (PWM周期计数)
/ / !寄存器)访问影子寄存器。如果loadMode设置为
/ / !EPWM_PERIOD_DIRECT_LOAD,一个对TBPRD寄存器的写或读访问
/ / !直接注册。
/ / !
/ / !\返回None。

static inline void
EPWM_setPeriodLoadMode(uint32_t base, EPWM_PeriodLoadMode loadMode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    if(loadMode == EPWM_PERIOD_SHADOW_LOAD)
    {
        //
        // Clear PRDLD
        //
        HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PRDLD;
    }
    else
    {
        //
        // Set PRDLD
        //
        HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PRDLD;
    }
}

! 使能相移负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能可在适当同步时加载相移
/ / !事件发生时。
/ / !
/ / !\返回None。

static inline void
EPWM_enablePhaseShiftLoad(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Set PHSEN bit
    //
    HWREGH(base + EPWM_O_TBCTL) |= EPWM_TBCTL_PHSEN;
}

/ / !禁用移相负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能禁用相移加载。
/ / !
/ / !\返回None。

static inline void
EPWM_disablePhaseShiftLoad(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Clear PHSEN bit
    //
    HWREGH(base + EPWM_O_TBCTL) &= ~EPWM_TBCTL_PHSEN;
}

//
/ / !设置时基计数器模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param counterMode是时基计数器模式。
/ / !
/ / !此函数设置时基计数器模式。
/ / !counterMode的有效值有:
/ / !—EPWM_COUNTER_MODE_UP - Up计数模式。
/ / !—EPWM_COUNTER_MODE_DOWN - Down计数模式。
/ / !—EPWM_COUNTER_MODE_UP_DOWN -上下计数模式。
/ / !- EPWM_COUNTER_MODE_STOP_FREEZE -停止冻结计数器。
/ / !
/ / !\返回None。

static inline void
EPWM_setTimeBaseCounterMode(uint32_t base, EPWM_TimeBaseCountMode counterMode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Write to CTRMODE bit
    //
    HWREGH(base + EPWM_O_TBCTL) =
            ((HWREGH(base + EPWM_O_TBCTL) & ~(EPWM_TBCTL_CTRMODE_M)) |
             ((uint16_t)counterMode));
}

/ / !将阴影设置为同步模式下的活动周期负载
/ / !
/ / !\param base是EPWM模块的基址。
/ / !\param shadowLoadMode是激活加载模式的影子。
/ / !
/ / !此函数将阴影设置为活动周期寄存器加载模式
/ / !关于同步事件。shadowLoadMode的有效值有:
/ / !- EPWM_SHADOW_LOAD_MODE_COUNTER_ZERO - shadow to active load发生时
/ / !时间基准计数器达到0。
/ / !- EPWM_SHADOW_LOAD_MODE_COUNTER_SYNC - shadow to active load发生时
/ / !时间基准计数器达到0和a
/ / !同步发生。
/ / !- EPWM_SHADOW_LOAD_MODE_SYNC -只发生主动负载的影子
/ / !当同步发生时。
/ / !
/ / !\返回None。

static inline void
EPWM_selectPeriodLoadEvent(uint32_t base,
                           EPWM_PeriodShadowLoadMode shadowLoadMode)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Write to PRDLDSYNC bit
    //
    HWREGH(base + EPWM_O_TBCTL2) =
                ((HWREGH(base + EPWM_O_TBCTL2) & ~(EPWM_TBCTL2_PRDLDSYNC_M)) |
                 ((uint16_t)shadowLoadMode << EPWM_TBCTL2_PRDLDSYNC_S));
}

/
/ / !开启单次同步模式
/ / !
/ / !\param base是EPWM模块的基址。
/ / !
/ / !此功能启用一次同步模式。
/ / !
/ / !\返回None。

static inline void
EPWM_enableOneShotSync(uint32_t base)
{
    //
    // Check the arguments
    //
    ASSERT(EPWM_isBaseValid(base));

    //
    // Set OSHTSYNCMODE bit
    //
    HWREGH(base + EPWM_O_TBCTL2) |= EPWM_TBCTL2_OSHTSYNCMODE;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一份基于C2000系列控制器的ePWM模块编写三相全桥逆变电路的发波程序,载波频率为10kHz的代码: ```c #include "F28x_Project.h" #define PWM_PERIOD 1000 // PWM周期为1ms #define DUTY_CYCLE 500 // 占空比为50% void main(void) { // 初始化系统时钟 InitSysCtrl(); // 初始化GPIO引脚 InitGpio(); // 配置PWM引脚复用 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // 初始化ePWM模块 InitEPwm(); // 使能全局中断 EINT; ERTM; // 死循环 while (1); } void InitEPwm(void) { // 配置PWM时钟 CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; // 使能ePWM1时钟 CpuSysRegs.PCLKCR2.bit.EPWM2 = 1; // 使能ePWM2时钟 CpuSysRegs.PCLKCR2.bit.EPWM3 = 1; // 使能ePWM3时钟 // 配置PWM计数器 EPwm1Regs.TBCTL.bit.CTRMODE = 0b10; // up-down计数模式 EPwm1Regs.TBCTL.bit.PHSEN = 1; // 使能相位补偿 EPwm1Regs.TBCTL.bit.PRDLD = 1; // Period Shadow寄存器加载 EPwm1Regs.TBCTL.bit.SYNCOSEL = 0b110;// SYNCI作为同步输入信号 EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 高速时钟不分频 EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 时钟不分频 // 配置PWM周期 EPwm1Regs.TBPRD = PWM_PERIOD - 1; // 配置PWM相位 EPwm1Regs.TBPHS.bit.TBPHS = 0; // 配置PWM占空比 EPwm1Regs.CMPA.bit.CMPA = DUTY_CYCLE; // 配置PWM死区时间 EPwm1Regs.DBCTL.bit.OUT_MODE = 0b11;// EPWMxA和EPWMxB都有死区时间 EPwm1Regs.DBCTL.bit.POLSEL = 0b10; // EPWMxB取反 EPwm1Regs.DBCTL.bit.IN_MODE = 0; // 死区时间由逻辑单元生成 EPwm1Regs.DBRED.bit.DBRED = 100; // 死区时间为100ns EPwm1Regs.DBFED.bit.DBFED = 100; // 死区时间为100ns // 配置PWM事件触发 EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能SOCA事件 EPwm1Regs.ETSEL.bit.SOCASEL = 0b001;// 产生SOCA事件时,计数器为零 EPwm1Regs.ETPS.bit.SOCAPRD = 0b01; // SOCA事件周期为每个PWM周期 // 启动PWM计数器 EPwm1Regs.TBCTL.bit.CTRMODE = 0b10; // up-down计数模式 // 配置PWM2和PWM3 EPwm2Regs.TBCTL.all = EPwm1Regs.TBCTL.all; EPwm2Regs.TBPRD = EPwm1Regs.TBPRD; EPwm2Regs.TBPHS.all = EPwm1Regs.TBPHS.all; EPwm2Regs.CMPA.all = EPwm1Regs.CMPA.all; EPwm2Regs.DBCTL.all = EPwm1Regs.DBCTL.all; EPwm2Regs.DBRED.all = EPwm1Regs.DBRED.all; EPwm2Regs.DBFED.all = EPwm1Regs.DBFED.all; EPwm2Regs.ETSEL.all = EPwm1Regs.ETSEL.all; EPwm2Regs.ETPS.all = EPwm1Regs.ETPS.all; EPwm2Regs.TBCTL.bit.CTRMODE = 0b10; EPwm3Regs.TBCTL.all = EPwm1Regs.TBCTL.all; EPwm3Regs.TBPRD = EPwm1Regs.TBPRD; EPwm3Regs.TBPHS.all = EPwm1Regs.TBPHS.all; EPwm3Regs.CMPA.all = EPwm1Regs.CMPA.all; EPwm3Regs.DBCTL.all = EPwm1Regs.DBCTL.all; EPwm3Regs.DBRED.all = EPwm1Regs.DBRED.all; EPwm3Regs.DBFED.all = EPwm1Regs.DBFED.all; EPwm3Regs.ETSEL.all = EPwm1Regs.ETSEL.all; EPwm3Regs.ETPS.all = EPwm1Regs.ETPS.all; EPwm3Regs.TBCTL.bit.CTRMODE = 0b10; } ``` 该代码通过配置ePWM模块的计数器、PWM周期、占空比、相位、死区时间、事件触发等参数,实现了三相全桥逆变电路的发波控制。其中,PWM周期为1ms,占空比为50%,载波频率为10kHz。需要注意的是,该代码中只提供了ePWM模块的初始化函数InitEPwm(),如果需要进一步完善三相全桥逆变电路的发波控制,还需要根据具体电路参数进行计算和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值