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/TMS320F28379D:ePWM、

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/636976/ccs-tms320f28379d-epwm

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

你好

我希望 Three_H_bridges...bridge 2和3的 PWM 以桥1为基准

这意味着 PWM2和3 w.r.t PWM_1 I 正在使用 UP_MODE。

但我不想让腿超前相移。

#include "F28x_Project.h"
#include "math.h"
#define PWM_PRD 10000;
#define Phi1 500;//(625) 45度相位
#define Phi2 1300;//(625) 45度相位
#define PI 3.14159265358979323846
void InitEPwm1Examples(void);
void InitEPwm2Examples(void);
void InitEPwm3Examples(void);
void InitEPwm4Examples(void);
void InitEPwm5Examples(void);
void InitEPwm6Examples(void);
_interrupt void epwm1_ISR (void);
unsigned int i=0、m=0、k=0;
unsigned int a=0;
unsigned int b[101]={0};
void main (void)

InitSysCtrl();
对于(m=0;m<100;m++)

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

B[100]=0;
InitGpio();
EALLOW;
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
InitEPwm4Gpio();
InitEPwm5Gpio();
InitEPwm6Gpio();
EDIS;
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&epwm1_ISR;
InitEPwm1Examples();
InitEPwm2Examples();
InitEPwm3Examples();
InitEPwm4Examples();
InitEPwm5Examples();
InitEPwm6Examples();
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
for (;;)

ASM (" NOP");


_interrupt void epwm1_ISR (void)

GpioDataRegs.GPBDAT.bit.GPIO52=1;
a=sin (pi*0.02*i);

如果(A>=0)

EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];
EPwm2Regs.CMPB.bit.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];
EPwm3Regs.CMPB.bit.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];
EPwm4Regs.CMPB.bit.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];
EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];
EPwm6Regs.CMPB.bit.CMPB =b[i];


其他

EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];
EPwm2Regs.CMPB.bit.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];
EPwm3Regs.CMPB.bit.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];
EPwm4Regs.CMPB.bit.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];
EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];
EPwm6Regs.CMPB.bit.CMPB =b[i];


GpioDataRegs.GPBDAT.bit.GPIO52=0;
i++;

如果(i=101)


I=0;


EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;


空 InitEPwm1Examples()

////设置计数器模式//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
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_IMMETERM;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
//设置比较 A 值
EPwm1Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
//PWM 设置
EPwm1Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0;

//启用 INT 设置
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT

空 InitEPwm2Examples()

////设置计数器模式//
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
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_IMMETERM;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm2Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm2Regs.TBCTR = 0;

////中断,其中我们将更改比较值//
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm2Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm2Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT

空 InitEPwm3Examples()

////设置计数器模式//
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm3Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
//.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
//EPwm3Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm3Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm3Regs.TBPHS.bit.TBPHS = Phi1;//相位为 PHI_1
EPwm3Regs.TBCTR = 0;
////中断,我们将在其中更改比较值//
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm3Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm3Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT

空 InitEPwm5Examples()

////设置计数器模式//
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm5Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm5Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm5Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
EPwm5Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm5Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm5Regs.TBPHS.bit.TBPHS = Phi2;//相位为0
EPwm5Regs.TBCTR = 0;
////中断,我们将在其中更改比较值//
EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm5Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm5Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT

这是我的输出

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

    如果您更改 TBPHS 值、例如尝试 PWM_PRD - PHI、该怎么办?

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

    谢谢 Elizabeth

    主动地、我希望像这样得到相移...但我得到了反向  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Elizabeth、
    我明白了
    但我必须为 PWM_PRD 提供值...这意味着10000-PHI...
    现在、我必须为 TRIP_ZONE 工作。
    请让我在 TZ 中进行指导...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、如果您目前有另一个问题、请在这个主题上随意回答。 如果稍后出现问题、最好启动新主题、以便正确跟踪您的问题。

    此致、
    Elizabeth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Elizabeth
    如果我使用 TRIP_Zone instrActions
    我应该链接任何文件
    因为我会得到误差
    :说明资源路径位置类型
    链接期间遇到错误;链接期间遇到"ECAP_CAPTURE_PWM_cpu01.out"错误;"ECAP_CAPTURE_PWM_cpu01.out"ECAP_CAPTURE_PWM_cpu01C/C++问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    跳闸区域是 ePWM 的子模块、因此、如果您已包含 ePWM 头文件、则可以访问 TZ 寄存器。 如果您还没有、可以参考示例 ePWM_TRIP_ZONE。

    错误描述应该有更多有关导致它的原因的信息、即如果有未定义的符号。

    此致、
    Elizabeth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你
    描述如下:
    说明资源路径位置类型
    未解析的符号_InitTzGpio、首先在./main.objECAP_CAPTURE_PWM_cpu01C/C++问题中引用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何包含 ePWM 头文件?
    我可以在项目中的哪个位置添加此项目?
    我添加了项目、但没有更改...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好

    现在、我要在该 TZ_SETTINGS 中包含该内容、

    但当我使用开始初始化 TZ 时

    InitGpio();

    EALLOW;
    InitEPwm1Gpio();InitEPwm2Gpio();InitEPwm3Gpio();InitEPwm4Gpio();InitEPwm5Gpio();InitEPwm6Gpio();
    InitTzGpio();//TZ1 = GPIO12、TZ2 = GPIO13
    GpioCtrlRegs.GPBDIR.bit.GPIO52=1;
    EDIS;

    由于发生错误、因此我欺骗了 ePWM.C 文件、此应用不包含 TZ 初始化(F2837XD_examples)

    我在程序中进行了初始化、如下所示:void InitTzGpio (void);

    但它不支持...

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

    您好、Nageswara、

    我已回答了您在新发布的文章 中的最新问题:https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/638865/2356825#2356825


    让我们结束本主题、如果您认为合适、继续进行讨论。

    此致、
    Elizabeth