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**** 2609955 points
Other Parts Discussed in Thread: DESIGNDRIVE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/689626/ccs-tms320f28379d-comparator-to-produce-trip-connect-with-digital-compare-to-epwm

器件型号:TMS320F28379D
主题中讨论的其他器件:DESIGNDRIVE

工具/软件:Code Composer Studio

你(们)好

我尝试使用比较器产生两个跳闸信号:一个来自比较器高电平、另一个来自比较器低电平。 我使用这两个信号连接到数字比较模块来产生 DCAEVT2和 DCBEVT2数字比较信号。 之后、我将 TZ1和 TZ2连接到这些数字比较信号。 TZ1和 TZ2使用 ePWM 动作限定器进行设置。 但是、我看不到正确的 PWM 输出。  

我将在这里上传代码片段。  

数字比较代码片段

//
//将 TRIP4配置为从比较器1跳闸的高电平
//将 TRIP5配置为比较器1的低跳闸
//
//首先清除所有内容
//

EPwmXbarRegs.TRIP4MUX0TO15CFG.ALL = 0x0000;
EPwmXbarRegs.TRIP4MUX16TO31CFG.ALL = 0x0000;
EPwmXbarRegs.TRIP5MUX0TO15CFG.ALL = 0x0000;
EPwmXbarRegs.TRIP5MUX16TO31CFG.ALL = 0x0000;

//
//为 CMPSS1H 和1L 的输入启用多路复用器
//
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0;//cmps1 CTRIPH
EPwmXbarRegs.TRIP5MUX0TO15CFG.bit.MUX1 = 0;//cmps1 CTRIPL

//首先禁用所有多路复用器
EPwmXbarRegs.TRIP4MUXENABLE.ALL = 0x0000;
EPwmXbarRegs.TRIP5MUXENABLE.ALL = 0x0000;
//启用 Mux4至 TRIP4
//启用 Mux0至 TRIP5

EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 1;
EPwmXbarRegs.TRIP5MUXENABLE.bit.MUX1 = 1;

// EPwm2 Trip 4 DC A low --> DCAEVT2
EPwm2Regs.DCTRIPSEL.bit.DCALCOMPSEL = 3;//跳闸4 DC A 低电平
EPwm2Regs.TZDCSEL.bit.DCAEVT2 = 4;// DCAL 高电平 DCAH 无关
EPwm2Regs.DCACTL.bit.EVT2SRCSEL = 0;//无滤波器
EPwm2Regs.DCACTL.bit.EVT2FRCSYNCSEL = 1;//异步

// EPwm2 Trip 5 DC B low --> DCBEVT2
EPwm2Regs.DCTRIPSEL.bit.DCBLCOMPSEL = 4;//跳闸5 DC B 低电平
EPwm2Regs.TZDCSEL.bit.DCBEVT2 = 4;// DCBL 高电平 DCBH 无关
EPwm2Regs.DCBCTL.bit.EVT2SRCSEL = 0;//无滤波器
EPwm2Regs.DCBCTL.bit.EVT2FRCSYNCSEL = 1;//异步

// EPwm3跳闸4 DC A low --> DCAEVT2
EPwm3Regs.DCTRIPSEL.bit.DCALCOMPSEL = 3;//跳闸4 DC A 低电平
EPwm3Regs.TZDCSEL.bit.DCAEVT2 = 4;// DCAL 高电平 DCAH 无关
EPwm3Regs.DCACTL.bit.EVT2SRCSEL = 0;//无滤波器
EPwm3Regs.DCACTL.bit.EVT2FRCSYNCSEL = 1;//异步

// EPwm3跳闸5 DC B low --> DCBEVT2
EPwm3Regs.DCTRIPSEL.bit.DCBLCOMPSEL = 4;//跳闸5 DC B 低电平
EPwm3Regs.TZDCSEL.bit.DCBEVT2 = 4;// DCBL 高电平 DCBH 无关
EPwm3Regs.DCBCTL.bit.EVT2SRCSEL = 0;//无滤波器
EPwm3Regs.DCBCTL.bit.EVT2FRCSYNCSEL = 1;//异步

//将数字比较连接到 PWM 操作
EPwm2Regs.AQTSRCSEL.bit.T1SEL=1;// DCAEVT2连接到 T1
EPwm2Regs.AQTSRCSEL.bit.T2SEL=3;// DCBEVT2连接到 T2
EPwm3Regs.AQTSRCSEL.bit.T1SEL=1;// DCAEVT2连接到 T1
EPwm3Regs.AQTSRCSEL.bit.T2SEL=3;// DCBEVT2连接到 T2

//清除任何杂散 OV 跳闸
EPwm2Regs.TZCLR.bit.DCAEVT2 = 1;
EPwm2Regs.TZCLR.bit.DCBEVT2 = 1;
EPwm3Regs.TZCLR.bit.DCAEVT2 = 1;
EPwm3Regs.TZCLR.bit.DCBEVT2 = 1;

EDIS;

//
// v 相的 EPWM2
//
//
//设置 TBCLK
//
EPwm2Regs.TBCTL.bit.HSPCLKDIV=1;//除以2
EPwm2Regs.TBCTL.bit.CLKDIV=2;//除以4 12.5MHz EPWMCLOCK
EPwm2Regs.TBCTL.bit.CTRMODE=0;//向上计数模式
EPwm2Regs.TBCTL.bit.PHSEN=0;//禁用相位加载

//
//启用 PWM
//
EPwm2Regs.TBPRD = 62499;// 200Hz PWM
EPwm2Regs.TBPHS.bit.TBPHS= 0;//相位为零
EPwm2Regs.TBCTR = 0;//清除计数器

// EPWM2死区
//
EPwm2Regs.DBCTL.bit.out_mode=3;// DBM 已完全启用
EPwm2Regs.DBCTL.bit.POLSEL=2;//高电平有效互补
EPwm2Regs.DBCTL.bit.IN_MODE=0;// EPWMA 是下降沿和上升沿延迟的源
EPwm2Regs.DBRED.bit.DBRED=25;//死区时间2us
EPwm2Regs.DBFED.bit.DBFED=25;//死区时间2us

//
// EPWM3用于 w 相
//

//
//设置 TBCLK
//
EPwm3Regs.TBCTL.bit.HSPCLKDIV=1;//除以2
EPwm3Regs.TBCTL.bit.CLKDIV=2;//除以4 100MHz
EPwm3Regs.TBCTL.bit.CTRMODE=0;//向上计数模式
EPwm3Regs.TBCTL.bit.PHSEN=0;//可调相加载

//
//启用 PWM
//
EPwm3Regs.TBPRD = 62499;// 200Hz
EPwm3Regs.TBPHS.bit.TBPHS= 0;//相位为零
EPwm3Regs.TBCTR = 0;//清除计数器

//
// EPWM3死区
//
EPwm3Regs.DBCTL.bit.out_mode=3;// DBM 已完全启用
EPwm3Regs.DBCTL.bit.POLSEL=2;//高电平有效互补
EPwm3Regs.DBCTL.bit.IN_MODE=0;// EPWMA 是下降沿和上升沿延迟的源
EPwm3Regs.DBRED.bit.DBRED=25;//死区时间2us
EPwm3Regs.DBFED.bit.DBFED=25;//死区时间2us

// PWM 动作限定符
EPwm2Regs.AQCTLA2.bit.T1U = 2;// 2A 高电平
EPwm2Regs.AQCTLB2.bit.T1U = 1;// 2B 低
EPwm3Regs.AQCTLA2.bit.T1U = 1;// 3A 低电平
EPwm3Regs.AQCTLB2.bit.T1U = 2;// 3B 高电平

EPwm2Regs.AQCTLA2.bit.T2U = 1;// 2A 低电平
EPwm2Regs.AQCTLB2.bit.T2U = 2;// 2B 高电平
EPwm3Regs.AQCTLA2.bit.T2U = 2;// 3A 高电平
EPwm3Regs.AQCTLB2.bit.T2U = 1;// 3B 低电平

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

    您好、Ming、

    我没有浏览过您的代码、但您能提供更多详细信息吗? 您期望什么输出以及您看到什么输出?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只需将 LEM 输出默认连接到 ADCPIN A2、即比较器1为高电平正数。 ADC 结果的零状态为2048。 我在这里写2000是为了在 PWM 上有一个输出。 它应该是 PWM 2B 关闭 PWM 3A 关闭 PWM 3B 打开时的 PWM2A。 但是、我看到 PWM 2A 2B 3A 和 PWM 3B 6V 时的结果不正确。 这是不可思议的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它只是 PWM 和数字比较的代码管理、比较器和其他我没有放置它的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最小值、

    我没有按照您的解释进行操作。 不确定 ADC 与此相关的操作。 它是否测量比较器正输入端的电压? 您如何驱动比较器的负输入?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用的是具有28379D 内核的 DesignDRIVE 板。 板上有一个 LEM 电流传感器、默认连接到 ADCINA2引脚。 该引脚也连接到默认的比较器1P。 因此、我在比较器的高反相和低反相器件中使用 DAC 来产生两个跳闸信号。 这些跳闸信号被传输到多路复用器并连接到数字比较器。 使用 TZ1和 TZ2将数字比较连接到 PWM 动作限定器。 并使用操作限定符来设置操作。 在我的示例中、ADC 上的电流结果为零、默认值为2048 (LEM 传感器设置的偏移为1.65V 时的输出)。 我将比较器高侧 DAC 设置为等于2000。 因此、提供跳闸信号并将其传输到数字比较器。 PWM 配置应该为 PWM 2B 关闭时的 PWM2A、PWM 3A 关闭时的 PWM 3B 打开。 但是、我在 PWM 输出中看到错误的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、Min、我想我现在已经得到了图片。 看起来您是通过多个 PWM 模块发送信号。 如果不看到任何波形、就很难只查看配置代码并告诉您错误的地方。 您的问题很可能来自错误配置的 PWM 子模块。 但是、您至少可以将其缩小:CMPSS 可以直接驱动 GPIO、而无需通过 PWM。 直流子模块可以直接驱动 PWM 输出、而无需 AQ 子模块参与。 您能否单独查看 CMPSS 和直流子模块输出、看看它是否符合您的期望?