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.

[参考译文] TMS320F28379D:双脉冲测试的 PWM

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1321822/tms320f28379d-pwm-for-double-pulse-test

器件型号:TMS320F28379D

我正在尝试为双脉冲测试设置生成合适的双脉冲。 我正在尝试使用 CMPA 和 CMPB 在一个 TBCTR 周期内生成双脉冲、并在一个周期后冻结时基计数器(TBCTR)、以便不会重复双脉冲。 但我得到的示波器结果如下所示、  

DPT PWM 的代码如下所示、  

#include "F28x_Project.h"
void GPIO_select (void);
void Setup_EPWM (void);//PWM 设置函数
UINT16 TBPrd=224;
UINT16 DB = 5;
浮点 D1 = 0.8;
浮点 D2 = 0.1;
空 main (void)
{
InitSysCtrl();
Dint;
GPIO_select ();

//启用 PWM1、PWM2
CpuSysRegs.PCLKCR2.bit.EPWM4 = 1;

//初始化设备外设:
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;

Setup_ePWM ();//初始化 PWM

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1;
EDIS;

while (1)
{

void GPIO_select (void)
{
EALLOW;
InitEPwm4Gpio();
InitEPwm5Gpio();
GPIO_SetupPinOptions (31、GPIO_output、GPIO_ASYNC);
GPIO_SetupPinOptions (34、GPIO_output、GPIO_ASYNC);
EDIS;

void Setup_ePWM (void)
{
//初始化基于时间的子模块
EALLOW;

EPwm4Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1
EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm4Regs.TBCTL.bit.CTRMODE = 2;//向上向下计数-模式
EPwm4Regs.TBCTR = 0;//清除计数器
EPwm4Regs.TBCTL.bit.PRDLD = 1;// TBPRD 立即加载到 TBCTR 中
EPwm4Regs.TBPRD = TBPrd;
EPwm4Regs.TBCTL.bit.FREE_SOFT = 1;
//设置隐藏
EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm4Regs.CMPCTL.bit.LOADAMODE = 1;
EPwm4Regs.CMPA.bit.CMPA = D1*TBPrd;
EPwm4Regs.CMPB.bit.CMPB =(1 - D2)* TBPrd;
//初始化动作限定器模块
EPwm4Regs.AQCTLA.bit.ZRO = 2;//在 ZRO 处设置上行计数(U)为高电平(2)
EPwm4Regs.AQCTLA.bit.CAU = 1;//在 CMPA 处设置向上计数(U)为低电平(1)
EPwm4Regs.AQCTLA.bit.PRD = 2;//在 PRD 处设置向下计数(D)为高电平(2)
EPwm4Regs.AQCTLA.bit.CBD = 1;//在 PRD 处设置向下计数(D)为低电平(1)
//初始化一次性跳闸
EPwm4Regs.TZCLR.bit.OST = 1;

EPwm5Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1
EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm5Regs.TBCTL.bit.CTRMODE = 2;//向上向下计数-模式
EPwm5Regs.TBCTR = 0;//清除计数器
EPwm5Regs.TBCTL.bit.PRDLD = 1;// TBPRD 立即加载到 TBCTR 中
EPwm5Regs.TBPRD = TBPrd;
EPwm5Regs.TBCTL.bit.FREE_SOFT = 1;
//设置隐藏
EPwm5Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm5Regs.CMPCTL.bit.LOADAMODE = 1;
EPwm5Regs.CMPA.bit.CMPA = D1*TBPrd + DB;
EPwm5Regs.CMPB.bit.CMPB = TBPrd - DB;
//初始化动作限定器模块
EPwm5Regs.AQCTLA.bit.ZRO = 1;//在 ZRO 处设置上行计数(U)为低电平(1)
EPwm5Regs.AQCTLA.bit.CAU = 2;//在 CMPA 处设置向上计数(U)为高电平(2)
EPwm5Regs.AQCTLA.bit.CBU = 1;//在 CMPB 处设置上电计数(U)为低电平(1)
//初始化一次性跳闸
EPwm5Regs.TZCLR.bit.OST = 1;

EDIS;

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

    尊敬的 Satwik:

    为了澄清、您是否仅尝试生成一对脉冲、而不是一系列双脉冲? 我能不能问您为什么使用 ePWM 模块来实现这一点?

    或者、如果我存在误解、请更正我-或许可以用图表说明所需的 ePWM 信号输出有助于澄清。

    此致、

    艾里森