dsp 28335 epwm 中心对齐模式demo
时间: 2023-10-22 15:04:59 浏览: 211
以下是DSP 28335 EPWM中心对齐模式的Demo代码,可以用来生成中心对齐PWM波形:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void epwm_init(void);
void main()
{
InitSysCtrl(); // 初始化系统控制寄存器
InitPieCtrl(); // 初始化中断控制器
IER = 0x0000; // 禁用中断
IFR = 0x0000;
InitPieVectTable(); // 初始化 PIE 向量表
epwm_init(); // 初始化 EPWM 模块
EINT; // 使能全局中断
ERTM; // 使能全局中断响应
while(1);
}
void epwm_init(void)
{
EPwm1Regs.TBPRD = 15000; // 设置 PWM 周期为 15000
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置计数器为上升下降模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位补偿
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 开启周期寄存器的阴影寄存器功能
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁用同步
EPwm1Regs.CMPA.half.CMPA = 7500; // 设置占空比的一半为 50%
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 开启比较器寄存器 A 的阴影寄存器功能
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在计数器为 0 时加载比较器寄存器 A
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器向上计数到 CMPA 时,设置 EPWM1A 为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器向下计数到 CMPA 时,设置 EPWM1A 为低电平
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // 当计数器向上计数到 CMPB 时,设置 EPWM1B 为高电平
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // 当计数器向下计数到 CMPB 时,设置 EPWM1B 为低电平
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 在 A 端口上启用死区
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间为高电平
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 在 A 和 B 端口上启用死区
EPwm1Regs.DBRED = 50; // 设置死区时间为 50 个时钟周期
EPwm1Regs.DBFED = 50;
EPwm1Regs.TZSEL.bit.OSHT1 = 1; // 在允许的情况下禁用输出保护
EPwm1Regs.TZCTL.bit.TZA = TZ_NO_CHANGE;
EPwm1Regs.TZCTL.bit.TZB = TZ_NO_CHANGE;
EPwm1Regs.TBCTR = 0; // 将计数器清零
}
```
在这个Demo代码中,我们使用EPwm1模块来生成中心对齐PWM波形。我们将PWM周期设置为15000个时钟周期,并将计数器设置为上升下降模式。然后,我们将占空比的一半设置为7500,并在计数器为0时加载比较器寄存器A。最后,我们在AQCTLA和AQCTLB寄存器中设置了相应的动作,以使EPWM1A和EPWM1B输出中心对齐PWM波形。
阅读全文