This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:CCS/TMS320F28335

Guru**** 2390755 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1439652/tms320f28335-ccs-tms320f28335

器件型号:TMS320F28335

工具与软件:

大家好!

我正在测试单相和三相直流/交流电源。 尤其是单相逆变器、我运行代码并使用示波器进行检查、开关模式并不是我想要的。 有人能帮忙吗? 非常感谢。

下面是我编程到 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;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Wunna

    您能告诉我们预期的输出是什么以及得到了什么吗? 虽然我无法向您逐一介绍代码、但我可以根据您的需求将您引导至已发布的代码。

    谢谢

    Amir