写一个基于F28335的高电平有效互补输出的带死区的PWM程序
时间: 2023-12-10 16:37:57 浏览: 32
以下是一个基于F28335的高电平有效互补输出的带死区的PWM程序的示例代码:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define PWM_FREQ 10000 // PWM频率
#define PWM_DUTY_CYCLE 50 // PWM占空比
void Init_PWM(void);
int main(void)
{
InitSysCtrl(); // 初始化系统时钟
Init_PWM(); // 初始化PWM模块
while(1)
{
// 主循环
}
}
void Init_PWM(void)
{
EALLOW;
// 配置GPIO管脚用于PWM输出
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // 配置GPIO20为PWM1A
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // 配置GPIO21为PWM1B
// 配置PWM时钟
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; // 使能EPWM1时钟
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 设置计数器为上升计数模式
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 设置TBCLK为SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 设置分频系数为1
EPwm1Regs.TBPRD = 1500; // 设置计数器周期为1500
// 配置PWM信号
EPwm1Regs.AQCTLA.bit.CAU = 1; // 设置PWM1A为高电平有效
EPwm1Regs.AQCTLA.bit.ZRO = 2; // 设置PWM1A在计数器清零时输出低电平
EPwm1Regs.AQCTLB.bit.CBU = 1; // 设置PWM1B为高电平有效
EPwm1Regs.AQCTLB.bit.ZRO = 2; // 设置PWM1B在计数器清零时输出低电平
// 配置死区
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 设置PWM1A和PWM1B都带死区
EPwm1Regs.DBCTL.bit.POLSEL = 0; // 死区时间基准为EPWMxSYNCI信号
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // EPWMxSYNCI为异步
EPwm1Regs.DBRED = 50; // 设置上升沿死区时间为50个TBCLK
EPwm1Regs.DBFED = 50; // 设置下降沿死区时间为50个TBCLK
// 设置PWM占空比
EPwm1Regs.CMPA.bit.CMPA = PWM_DUTY_CYCLE * EPwm1Regs.TBPRD / 100; // 设置PWM1A占空比
EPwm1Regs.CMPB.bit.CMPB = PWM_DUTY_CYCLE * EPwm1Regs.TBPRD / 100; // 设置PWM1B占空比
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 禁用相位补偿
EPwm1Regs.TBCTL.bit.SYNCOSEL = 3; // 选择计数器清零时同步
EDIS;
}
```
这个示例代码中,我们配置了EPWM1模块为高电平有效互补输出,并且设置了50个TBCLK的死区。我们还设置了PWM频率为10kHz,占空比为50%。需要注意的是,这个代码只是一个示例,实际应用中需要根据具体的需求进行调整。