C2000 EPWM 模块初始化代码详解:以 EPWM1 为例

本篇文章将详细解读一段 C2000 EPWM 模块初始化代码,该代码用于配置 EPWM1 模块,实现基本的 PWM 输出。

**代码:**cvoid InitEPwm1Example(){ EPwm1Regs.TBPRD = 6000; // Set timer period EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; // Phase is 0 EPwm1Regs.TBCTR = 0x0000; // Clear counter

//    // Setup TBCLK    //    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;       // Clock ratio to SYSCLKOUT    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//    // Setup compare    //    EPwm1Regs.CMPA.bit.CMPA = 3000;

//    // Set actions    //    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;            // Set PWM1A on Zero    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;

EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero    EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;

//    // Active Low PWMs - Setup Deadband    //    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;    EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;    EPwm1Regs.DBRED.bit.DBRED = EPWM1_MIN_DB;    EPwm1Regs.DBFED.bit.DBFED = EPWM1_MIN_DB;    EPwm1_DB_Direction = DB_UP;

//    // Interrupt where we will change the Deadband    //    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;    // Select INT on Zero event    EPwm1Regs.ETSEL.bit.INTEN = 1;               // Enable INT    EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;          // Generate INT on 3rd event}

代码详解:

  1. EPwm1Regs.TBPRD = 6000;:设置 EPWM1 模块的定时器周期为 6000。这意味着定时器将从 0 计数到 6000,然后回到 0 并重复此过程。2. EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;:设置 EPWM1 模块的相位为 0。相位控制 PWM 信号的起始点。3. EPwm1Regs.TBCTR = 0x0000;:将 EPWM1 模块的计数器清零。4. EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;:将 EPWM1 模块的计数模式设为向上和向下计数。这意味着定时器将从 0 计数到 TBPRD,然后从 TBPRD 计数回 0。5. EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;:禁用相位加载功能。6. EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;:将时钟比例设置为 SYSCLKOUT 的四分之一。7. EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;:将时钟比例设置为 SYSCLKOUT 的四分之一。8. EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;:启用影子模式,在计数器为零时加载比较器寄存器。9. EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;:启用影子模式,在计数器为零时加载比较器寄存器。10. EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;:在计数器为零时加载比较器 A 寄存器。11. EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;:在计数器为零时加载比较器 B 寄存器。12. EPwm1Regs.CMPA.bit.CMPA = 3000;:设置比较器 A 的值为 3000。当定时器计数器的值等于 CMPA 时,PWM 输出将发生变化。13. EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;:在计数器为零时,设置 PWM1A 输出为高电平。14. EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;:在计数器等于 CMPA 时,设置 PWM1A 输出为低电平。15. EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;:在计数器为零时,设置 PWM1B 输出为低电平。16. EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;:在计数器等于 CMPA 时,设置 PWM1B 输出为高电平。17. EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;:启用死区发生器。死区时间是指两个互补 PWM 信号之间的时间延迟,用于防止同时导通。18. EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;:将死区发生器设置为主动低电平。19. EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;:选择死区 A 和死区 B 输入。20. EPwm1Regs.DBRED.bit.DBRED = EPWM1_MIN_DB;:设置死区上升延迟。21. EPwm1Regs.DBFED.bit.DBFED = EPWM1_MIN_DB;:设置死区下降延迟。22. EPwm1_DB_Direction = DB_UP;:设置死区的方向。23. EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;:选择计数器为零时产生中断。24. EPwm1Regs.ETSEL.bit.INTEN = 1;:使能中断。25. EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;:设置中断的周期为第三个事件。这意味着每当定时器计数器第三次回到零时,就会产生中断。

总结:

这段代码配置了 C2000 MCU 中的 EPWM1 模块,使其能够输出 PWM 信号。通过修改代码中的参数,可以调整 PWM 信号的频率、占空比、死区时间等特性,以满足不同的应用需求。

C2000 EPWM 模块初始化及代码详解:以 EPWM1 为例

原文地址: https://www.cveoy.top/t/topic/Vmr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录