//************************************************************************************************
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#define SYSCLK 60E6 // 60MHz system clock
#define PWMFREQ 100E3 // 100kHz PWM frequency
#define DUTY_CYCLE 0.4// duty cycle
#define DEAD_BAND 0.2 // dead band
//#define TB_PERIOD (SYSCLK / (2 * PWMFREQ)) // Calculate period for up-down count mode
//#define TB_PERIOD (SYSCLK / PWMFREQ) // Calculate period for up-down count mode
#define TB_PERIOD (SYSCLK / (4 * PWMFREQ)) // Calculate period for up-down count mode
#define DUTY_VALUE (TB_PERIOD * DUTY_CYCLE)
#define DB_VALUE (TB_PERIOD * DEAD_BAND)
// 函数声明
void SetGpio()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // Configure GPIO0 as EPWM1A
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; //Set as output
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // Configure GPIO1 as EPWM1B
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; //Set as output
EDIS;
}
void InitEPWM1(void)
{
EPwm1Regs.TBPRD = TB_PERIOD; // 设置周期
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置上下计数模式
EPwm1Regs.CMPA.half.CMPA = DUTY_VALUE; // 设置 ePWM1A 的占空比
EPwm1Regs.CMPB = DUTY_VALUE; // 设置 ePWM1B 的占空比
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // 设置 ePWM1A 在计数器向上计数时设置为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET; // 设置 ePWM1A 在计数器向下计数时设置为低电平
// EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // 设置 ePWM1B 在计数器向上计数时设置为低电平
// EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // 设置 ePWM1B 在计数器向下计数时设置为高电平
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // 设置 ePWM1B 在计数器向上计数时设置为低电平
EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // 设置 ePWM1B 在计数器向下计数时设置为高电平
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 设置死区输入模式
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 设置死区输出模式
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //=DB_ACTV_HIC(DB_ACTV_HI,DB_ACTV_LOC,DB_ACTV_HIC,DB_ACTV_LO)
EPwm1Regs.DBRED = DB_VALUE; // 设置死区上升沿延迟
EPwm1Regs.DBFED = DB_VALUE; // 设置死区下降沿延迟
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 启用相位加载
EPwm1Regs.TBPHS.half.TBPHS = EPwm1Regs.TBPRD / 2; // 设置 ePWM1B 的相位偏移
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1
}
void main(void)
{
InitSysCtrl(); // 初始化系统时钟和PLL
DINT; // 禁止所有中断
InitPieCtrl(); // 初始化和启用CPU PIE
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); // 初始化PIE向量表
SetGpio(); // Initialize GPIO
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止所有ePWM时钟
EDIS;
InitEPWM1(); // 初始化ePWM1
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // 启动所有ePWM时钟
EDIS;
for(;;)
{
// 主循环
}
}
*********************************************************************************************8
代码已经上传了。
我想让epwm1a和epwm1b生成占空比和死区时间都一样的波形,而且epwm1b的波形向右偏移半个周期。
我在代码里设置了相位偏移如下:
但是生成的波形没有任何偏移:

调了一周了实在没办法了,老板又一直催所以来这问一下,谢谢各位大神。