大家好、
我已经编写了使用 EPWM1、EPWM2和 EPWM3通道生成三个相移 PWM 信号的代码、如图所示。 但是、在运行代码后、我看不到任何来自通道的信号。
您能帮我找出我在代码方面遇到的问题吗?
此致、
Haque
main.c
#include "F28x_Project.h"
//#include "adc_new.h"
#include "pwm.h"
int main (空)
{
InitSysCtrl();
PWM_init();
// adc_init();
while (1){
ASM ("NOP");
}
返回(1);
}
PWM.c
#include "pwm.h"
//#include "torator_instance.h"
//#include "adc_new.h"
//#include "pll.h"
//#include "measurement.h"
//unsigned int comp;
浮点 Duty_P1;
浮点 Duty_P2;
浮点 Duty_P3;
void PWM_init()
{
//启用三个转换器的 PWM 模块+
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;
//为三个转换器配置输出引脚
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
//配置中断
Dint;
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&PWM_INTERRUPT;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
//设置 PWM 通道...
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;
configure_pwm1();
configure_pwm2();
CONFIG_pwm3 ();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
//启用 PIE 中断
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
//为中断使用配置引脚...
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
EDIS;
//启用中断,openloop 将启动...
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
}
void configure_pwm1()
{
EPwm1Regs.TBPRD = 1250;//设置定时器周期
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
EPwm1Regs.TBCTR = 0x0000;//清除计数器
//设置 TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
}
void configure_pwm2()
{
EPwm2Regs.TBPRD = 1250;//设置定时器周期
EPwm2Regs.TBPHS.bit.TBPHS = 0x009C;//相位为45度(TBPHS 156)
EPwm2Regs.TBCTR = 0x0000;//清除计数器
//设置 TBCLK
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//启用相位加载
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
}
void configure_pwm3 ()
{
EPwm3Regs.TBPRD = 1250;//设置定时器周期
EPwm3Regs.TBPHS.bit.TBPHS = 0x0138;//相位为90度(TBPHS 312)
EPwm3Regs.TBCTR = 0x0000;//清除计数器
//设置 TBCLK
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;//启用相位加载
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV2;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
}
_interrupt void PWM_interrupt (void)
{
GpioDataRegs.GPASET.bit.GPIO13 = 1;
//全部测量()
// PLL 节拍
//串联电压调节节拍
//并联 reg tick
//直流总线寄存器节拍
//设置串联转换器的占空比
Duty_P1 =(float) PWM_PERIOD / 2;
EPwm1Regs.CMPA.bit.CMPA =(int) Duty_P1;
EPwm1Regs.CMPB.bit.CMPB =(int) Duty_P1;
//设置操作
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//将 PWM1A 设置为零
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;//将 PWM1B 置为零
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
Duty_P2 =(float) PWM_PERIOD / 2;
EPwm2Regs.CMPA.bit.CMPA =(int) Duty_P2;
EPwm2Regs.CMPB.bit.CMPB =(int) Duty_P2;
//设置操作
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//将 PWM1A 设置为零
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR;//将 PWM1A 设置为零
EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;
Duty_P3 =(float) PWM_PERIOD / 2;
EPwm3Regs.CMPA.bit.CMPA =(int) Duty_P3;
EPwm3Regs.CMPB.bit.CMPB =(int) Duty_P3;
//设置操作
EPwm3Regs.AQCTLA.bit.CAU = AQ_SET;//将 PWM1A 设置为零
EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm3Regs.AQCTLB.bit.CAU = AQ_CLEAR;//将 PWM1B 置为零
EPwm3Regs.AQCTLB.bit.CAD = AQ_SET;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
GpioDataRegs.GPACLEAR.bit.GPIO13=1;
}
pwm.h
#ifndef PWM_H_
#define PWM_H_
#include "F28x_Project.h"
//#include "sine_tor.h"
#define PWM_PERIOD 1250
extern float Duty_P1;
extern float Duty_P2;
extern float Duty_P3;
void PWM_init();
三个转换器的// PWM 1~3
void configure_pwm1();
void configure_pwm2();
void configure_pwm3();
_interrupt void PWM_interrupt (void);
#endif /* PWM_H_*/
如果你们中的任何人能帮助我解决这个问题、我会很高兴。
此致
Haque