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.

[参考译文] CCS/TMS320F2.8379万D:PWM同步

Guru**** 2558250 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/634452/ccs-tms320f28379d-pwm-sync

部件号:TMS320F2.8379万D

工具/软件:Code Composer Studio

你好。

我得到了另一个例子用于sin_PWM。我流出它,我得到了1A,1B,但我不能得到带sync_mode的2A和2B。

任何不同的说明我必须用它来做这个..


#include "F28x_Project.h"
包含"math.h"
#define PWM_PRD 5000;
#define PHI 0;
#Define PI 3.14159265358979323846
void InitEPwm1示例(void);
void InitEPwm2示例(void);
__interrupt void epwm1_isr (void);
unsigned int i=0,m=0,k=0;
无符号int a=0;
无符号int b[401]={0};

Void主(void)

InitSysCtrl();
适用于(m=0;m<400;m++)

a=sin (pi*pi*m 0.02);
b[m]=2500*A + 2500;// 50 % 半正弦波周期。
}
B[100]=0;

伊尼特·格皮奥();
EALLOW;
Initepwm1gpio();
Initepwm2gpio();
EDIS;
色调;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectorTable();
EALLOW;
PieVectorTable.EPWM1_INT =&epwm1_ISR;
InitEPwm1Example();
InitEPwm2Example();
gpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
对于(;;)

ASM (" NOP");
}
}
__interrupt void epwm1_isr (void)

a=sin (PI * 0.02 * i);
GpioDataRegs.GPBDAT.bit.GPIO52 = 0;
如果(A>=0)

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件A上设置PWM1A,UP
EPwm1Regs.AQCTLA.bit.CAD =AQ_set;//清除事件B上的PWM1A,关闭
EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.AQCTLB.bit.CBU = AQ_Clear;//在事件A上设置PWM1B
EPwm1Regs.AQCTLB.bit.CBD =AQ_set;//清除事件B上的PWM1B,关闭
EPwm1Regs.CMPB.bit.CMPB =b[i];
}
否则

EPwm1Regs.AQCTLA.bit.CAU =AQ_set;//在事件A上设置PWM1A,向上
EPwm1Regs.AQCTLA.bit.CAD = AQ_Clear;//清除事件B上的PWM1A,关闭
EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.AQCTLB.bit.CBU =AQ_set;//在事件A上设置PWM1B,启动
EPwm1Regs.AQCTLB.bit.CBD = AQ_Clear;//在事件B上清除PWM1B,关闭
EPwm1Regs.CMPB.bit.CMPB =b[i];
}
I++;
如果(i=401)

i=0;
}
GpioDataRegs.GPBDAT.bit.GPIO52 = 0;
}
void InitEPwm1example()

EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//在零事件上选择INT
EPwm1Regs.ETSEL.bit.inten = 1;//启用INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;//在第三个事件上生成INT
////设置计数器模式//

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//向上和向下计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相加载
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//与SYSCLKOUT的时钟比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置阴影//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_Immediate;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_Immediate;
//设置比较值
EPwm1Regs.CMPB.bit.CMPB = 0;
EPwm1Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0;
}
void InitEPwm2Example()

EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//在零事件上选择INT
EPwm2Regs.ETSEL.bit.inten = 1;//启用INT
EPwm2Regs.ETPS.bit.INTPRD = ET_1ST;//在第三个事件上生成INT
//清除计数器

////设置计数器模式//
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//向上和向下计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相加载
EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//与SYSCLKOUT的时钟比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置阴影//
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_Immediate;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_Immediate;

////设置比较值0 //
EPwm2Regs.CMPA.bit.CMPA = 2500;// set比较值
EPwm2Regs.CMPB.bit.CMBB =5000;

EPwm2Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm2Regs.TBCTR = 0;
}

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

    对于PWM2,您正在配置SYNCO,但SYNCI已禁用。 查看TRM的时基子模块部分。 具体而言,请查看图中的PHSEN位。

    此致,
    克里斯