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:使用 TBPRDHR ->抖动

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/609010/tms320f28379d-using-tbprdhr---jitter

器件型号:TMS320F28379D

我希望在使用向上计数模式时生成具有高分辨率占空比和周期数的 PWM。 我编写了一个简短的测试程序、代码如下。

在向上计数模式下(ZRO = OUT 高电平;CAU = OUT 低电平)、我可以使用 CMPAHR、它在占空比下工作正常。 但是、如果我在 TBPRDHR 寄存器中写入一些内容、我会得到一个周期的抖动、而不是高分辨率的类比。

在向上向下计数模式下(CAU = OUT 高电平、CAD = OUT 低电平)、我可以使用 CMPAHR 或(!) TBPRDHR 用于改变占空比和周期、一切正常。 但是、如果我使用任何其他 AQ 来更改输出、那么我也会得到抖动。 例如、我将 AQ 配置为类似(ZRO =高电平、CAU =低电平)、如(CAU =高电平、CBD =低电平)等。 只有当仅使用 CMPA 将输出更改为高/低时、我才可以使用 TBPRDHR 而不会获得抖动。

现在我的问题是、是否甚至可以将 TBPRD 与上面写的其他配置一起使用、如果是、我的错误是什么?

感谢您的帮助!

我的代码:

#include "F28x_Project.h"
#include "SFO_v8.h"

int MEP_ScaleFactor;
volatile struct ePWM_regs * ePWM[PWM_CH]={&EPwm1Regs、&EPwm1Regs、&EPwm2Regs、&EPwm3Regs、&EPwm4Regs、&EPwm4Regs、 EPwm5Regs、&EPwm6Regs、&EPwm7Regs、&EPwm8Regs};

uint16 PRD = 9、PRDHR = 0、CMPA = 5、CMPAHR = 0、CMPB = 5、 CMPBHR = 0;

void PWM_Cnfg (void);

void main (void)
{
DINT;
InitSysCtrl ();
InitPieCtrl ();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EINT;
ERTM;

while (SFO ()=0);

InitEPwmGpio();
PWM_Cnfg ();

while (1)
{
EPwm1Regs.TBPRD = PRD;
EPwm1Regs.TBPRDHR = PRDHR << 8;
EPwm1Regs.CMPA.bit.CMPA = CMPA;
EPwm1Regs.CMPA.bit.EPWCLPADHR =(CMPADRP.8







);EPwCMPADCMPb = EPwCMPADRP.TBR = EPwCMPb = EPwCMPADCMPb = EPwCMPb;EPwCMPADCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb;EPwCMPADCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb;EPwCMPb = EPwCMPb = EPwCMPb = EPwCMPb = EP







EPwm1Regs.CMPA.bit.CMPA = CMPA;
EPwm1Regs.CMPA.bit.CMPAHR =(CMPAHR << 8);
EPwm1Regs.CMPB.BIPB.CMPB = CMPB;
EPwm1Regs.CMPBHR =



(EPwTBRCR.CTS=8)
;EPwmRtb.CTS=EPwTBR0.TBR0.Tb.Tb.Tb.Tb.Tb.Tb.TbRtb = EPwTb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tb.Tbrs =
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;EPwm1Regs.TBCTL.TBIT.CLKDIV
= 0xWCTL.TCC_FREE

= TAM_TON.TL.TL.TBIT.TL.BIT.TL.TCMTL.TL.BIT.TL.BIT_TL.TCMTL.TL.BIT.TL.BIT.TL.BIT_TR_TL.
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;
EPwm1Regs.CMPCTL.bit.SHADCMODE = CC_AQ;

EPwm1Regs.AQCTLA.bit.EPWM1RC.EPCTLA.SET
= EPwBAD.CHOQMODE;EPw_CARO.OQW1Regs.AM.BIT.OQ_SET
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
EPwm1Regs.AQCTLB.BIT.PRD = AQ_CLEAR;

EPwm1Regs.HRCNFG.ALL = 0x0;
EPwm1Regs.HRCNFG.bit.EDGMODE=HR_RPM1.RPM_RPM_RPM_RPM_RPRD;EP_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPRD.E=RPM_RPM_RPM_RPM_RPM_RPM_RUN.HR.HR_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RPM_RUN.PRD




= 0_RPM_RPM_RPM_HR.HR.HR.PRD;EP_HR_RPM_RPM_HR
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1;
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 1;
EPwm1Regs.HRPCTL.bit.HRPE = 1;

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;EPwm1Regs.TBSW1NC.TBIN.TBIN.THRCLKSYNC=
1;EPw0.TBIN.THRFCR.TBIN.TBIN.TBIN.THRCMOSR = 1;
EDIS;
} 

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

    您好 Terrence、

    我将处理您的帖子。 我目前不在办公室、但将在本周晚些时候回来。 这个问题听起来很熟悉-在我的评价中、您可能能够在另一个 E2E 帖子中找到解决方案。

    此致、

    Kris

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

    我直到现在还没有找到解决方案。 您(或其他人)是否找到了可能的原因?

    此致、
    Terence