工具与软件:
大家好!
我正在测试单相和三相直流/交流电源。 尤其是单相逆变器、我运行代码并使用示波器进行检查、开关模式并不是我想要的。 有人能帮忙吗? 非常感谢。
下面是我编程到 PCB 中的代码。
#include "DSP2833x_Device.h"
#include "DSP2833x_examples.h"
#include "IQmathLib.h"
#include
//外部函数原型
extern void InitSysCtrl (void);
extern void InitPieCtrl (void);
extern void InitPieVectTable (void);
//找到该文件的函数的原型语句
void GPIO_select (void);
void Setup_EPWM (void);
中断 void ePWMA_COMPARE_ISR (void);
#define PI 3.14159265358979323846
unsigned int i=0、m=0;
浮点 A=0;
unsigned int b[101]={0};
#define EPWM1_TIMER_TBPRD 1000 //周期寄存器
void main (void)
{
InitSysCtrl ();//从 DSP2833x_sysctrl.c 中初始化基本内核
for (m=0;m<100;m++)
{
b[m]=2500*(1+sin (pi*0.02*m ));
}
B[100]=0;
GPIO_SELECT ();//选择所需的引脚作为输出
dint;//禁用所有中断
InitPieCtrl();// PIE 表的基本设置
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();// PIE 中的默认 ISR
EALLOW;
PieVectTable。 EPWM1_INT =&ePWMA_COMPARE_ISR;
EDIS;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
setup_ePWM ();//初始化 ePWM 引脚
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK=1;
EINT;//启用全局中断 INTM
erTM;//启用全局实时中断 DBGM
for (;;)
{
ASM (" NOP");
}
}
//结束 main ()
void GPIO_SELECT (void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;// GPIO15……GPIO0 =通用尸体 I/O
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// ePWM1A active
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;// ePWM1B active (正在激活)
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;// ePWM2A active
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;// ePWM2B active
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;// ePWM3A active
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;// ePWM3B active
GpioCtrlRegs.GPAMUX2.all = 0;// GPIO31……GPIO16 =通用 I/O
GpioCtrlRegs.GPBMUX1.all = 0;// GPIO47……GPIO32 =通用 I/O
GpioCtrlRegs.GPBMUX2.all = 0;// GPIO63……GPIO48 =通用 I/O
GpioCtrlRegs.GPCMUX1.all = 0;// GPIO79……GPIO64 =通用 I/O
GpioCtrlRegs.GPCMUX2.all = 0;// GPIO87……GPIO80 =通用 I/O
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF;
GpioCtrlRegs.GPCDIR.all = 0xFFFFFDFFF;
EDIS;
}
void Setup_EPWM (void)
{
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;// TBCTR = 0
EPwm1Regs.ETSEL.bit.INTEN = 1;// Enable INT (启用 INT)
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;//在发生第1个事件时生成 INT
EPwm1Regs.TBCTL.bit.CTRMODE = tb_count_updown;//向上计数和向下计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loading (禁用相位加载)
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMmediate;
EPwm1Regs.CMPA.half.CMPA =0000;
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;// Phase 为0
EPwm1Regs.TBCTR = 0x0000;//清除计数器//在发生第1个事件时生成脉冲
}
中断 void ePWMA_COMPARE_ISR (void)
{
a=sin (pi*0.02* i);
如果(A>=0)
{
EPwm1Regs.AQCTLA.bit.CAU = 1;//设置事件 A 上的 PWM2A、向上
EPwm1Regs.AQCTLA.bit.CAD = 2;//在事件 B 发生时清除 PWM2A、递减
EPwm1Regs.CMPA.half.CMPA =b[i];
}
设计
{
EPwm1Regs.AQCTLA.bit.CAU = 2;//设置事件 A 上的 PWM2A、向上
EPwm1Regs.AQCTLA.bit.CAD = 1;//在事件 B 发生时清除 PWM2A、递减
EPwm1Regs.CMPA.half.CMPA =b[i];
}
I++;
如果(I=101)
{
I=0;
}
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_Group3;
}