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.

[参考译文] TMS320F28375D:如何在首次运行程序时限制 PWM 输出。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1017366/tms320f28375d-how-to-limit-pwm-output-when-first-time-running-a-program

器件型号:TMS320F28375D

早上好。


我先设置 PWM、然后将 GPIO 设置为 PWM 功能。
此时、将出现 PWM 输出。
PWM 模式如下所示。
频率:50kHz
模式:向上向下
TBPRD:100M/50k/2=1000
DBRD 和 FED:TBPRD x 2 = 2000

初始化顺序如下:

void device_init (void)

Dint;
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();

PWM_peripheral_clock_stop ();

PWM_init();
PWM_GPIO_init ();
grid_PWM_protection_init ();

PWM_PERFICE_CLOCK_START ();
interrupt_init();
interrupt_enable();

PWM 设置如下所示。

void PWM_init (void)

EALLOW;
EPwm7Regs.TBCTL.bit.PRDLD = 0;
EPwm7Regs.TBPRD =((uint16)(grid_PWM_PERIOD)>> 1);
EPwm7Regs.TBCTR = 0;
EPwm7Regs.TBPHS.bit.TBPHS = 0;
EPwm7Regs.TBCTL.bit.CTRMODE = 2;
EPwm7Regs.TBCTL.bit.CLKDIV = 0;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0;

EPwm7Regs.CMPA.bit.CMPA = 0;
EPwm7Regs.CMPCTL.bit.LOADASYS = 0;
EPwm7Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm7Regs.CMPCTL.bit.SHDWAMODE = 0;

EPwm7Regs.AQCTLA.ALL = 0;

EPwm7Regs.AQCTLA.bit.CAU = 1;
EPwm7Regs.AQCTLA.bit.CAD = 3;
EPwm7Regs.AQCTLA.bit.ZRO = 2;

EPwm7Regs.DBCTL2.bit.SHDWDBCTLMODE = 1;
EPwm7Regs.DBCTL2.bit.LOADDBCTLMODE = 0;
EPwm7Regs.DBCTL.bit.LOADREMODE = 1;
EPwm7Regs.DBCTL.bit.LOADFEDMODE = 0;

EPwm7Regs.DBCTL.bit.HALFCYCLE = 0;
EPwm7Regs.DBRED.bit.DBRED = GGE_PWM_PERIOD;
EPwm7Regs.DBFED.bit.DBFED = GRGE_PWM_PERIOD;
EPwm7Regs.DBCTL.bit.OUT_MODE = 3;
EPwm7Regs.DBCTL.bit.IN_MODE = 0;
EPwm7Regs.DBCTL.bit.DEDB_MODE = 0;
EPwm7Regs.DBCTL.bit.POLSEL = 2;

EPwm7Regs.TBCTL.bit.PHSEN = 0;
EPwm7Regs.TBCTL.bit.SYNCOSEL = 1;

EPwm7Regs.TZFRC.bit.OST = 1;

EPwm7Regs.AQSFRC.bit.RLDSF = CLR;

//EPwm7Regs.AQCSFRC.bit.CSFA = 1;
//EPwm7Regs.AQCSFRC.bit.CSFB = 1;

EDIS;

GPIO 设置如下。

void PWM_GPIO_init (void)

EALLOW;
GpioDataRegs.GPADAT.bit.GPIO12=0;
GpioDataRegs.GPADAT.bit.GPIO13 = 0;
GpioDataRegs.GPACLEAR.bit.GPIO12=1;
GpioDataRegs.GPACLEAR.bit.GPIO13=1;

GpioCtrlRegs.GPADIR.bit.GPIO12=1;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;

GpioCtrlRegs.GPAPUD.bit.GPIO12=0;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;

GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;//执行此部分时、PWM 输出发生。
GpioCtrlRegs.GPAMUX1.bit.GPIO13=1;//执行此部分时、PWM 输出发生。
EDIS;

PWM 跳闸设置如下所示。

void PWM_protection_init (void)

EALLOW;
///------------------ //
//---- ePWM7配置--- //
///------------------ //
//数字比较跳闸选择寄存器
EPwm7Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;
EPwm7Regs.DCTRIPSEL.bit.DCALCOMPSEL = 4;
EPwm7Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 6;

//Trip Zone 数字比较器选择寄存器
EPwm7Regs.TZDCSEL.bit.DCAEVT1 = 2;
EPwm7Regs.TZDCSEL.bit.DCAEVT2 = 4;
EPwm7Regs.TZDCSEL.bit.DCBEVT1 = 2;

//数字比较 A/B 控制寄存器
EPwm7Regs.DCACTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2SRCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT1FRCSYNCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2FRCSYNCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1FRCSYNCSEL = 0;

//TRIP 区域选择寄存器
EPwm7Regs.TZSEL.bit.DCAEVT1 = 1;
EPwm7Regs.TZSEL.bit.DCAEVT2 = 1;
EPwm7Regs.TZSEL.bit.DCBEVT1 = 1;
EPwm7Regs.TZSEL.bit.CBC6 = 1;

//TRIP 区域控制寄存器
EPwm7Regs.TZCTL.bit.TZA = 2;//执行此部件时、PWM 输出为低电平。
EPwm7Regs.TZCTL.bit.TSB = 2; //执行此部件时、PWM 输出为低电平。

//跳匣区域清除寄存器
EPwm7Regs.TZCLR.bit.OST = 1;
EPwm7Regs.TZCLR.bit.DCAEVT1 = 1;
EPwm7Regs.TZCLR.bit.DCAEVT2 = 1;
EPwm7Regs.TZCLR.bit.DCBEVT1 = 1;

//TRIP Znoe 强制寄存器
EPwm7Regs.TZFRC.bit.OST = 1;
EDIS;

黄色:PWM 输出 A (Vgs、高侧 FET)

蓝色:PWM 输出 B (Vgs、低侧 FET)

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

    我有一个 TIEVM-HV-PH-DCAC 板。
    导入网格连接反转器 LCLFltr_F2837x 后、观察到 Q1和 Q2的 Vgs 波形。
    Q1 Vgs 生成大约90uS 的高输出。
    这似乎是一个与我正在发展的症状相似的症状。
    如何实现低输出?

    黄色:Q1的 VGS (PWM 输出 A)

    蓝色:Q2的 VGS (PWM 输出 B)

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

    你好、Lewis、

    如果我理解正确、现在您正在尝试强制两个输出均为低电平?  

    我建议更改  PWM_GPIO_init ()和  grid_PWM_protection_init ()函数的顺序、以便在为 ePWM 配置引脚时、已经完全设置了跳闸软件强制。

    此致、

    Marlyn

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

    早上好。
    我通过更改您所说的顺序来解决这个问题。
    很容易:)
    谢谢你。