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.

[参考译文] TMS320F28069:比较器的斜坡发生器不执行任何操作

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/947314/tms320f28069-ramp-generator-for-comparator-not-doing-anything

器件型号:TMS320F28069

你好。 我正在尝试使用比较器的斜坡发生器来实现斜坡补偿。 我已设置  Comp1Regs.RAMPMAXREF_Shdw = 0xFFFF 且  Comp1Regs.RAMPDECVAL_Shdw = 100。 当在调试中运行程序时、我观察寄存器 RAMPSTS 并看到它从0不变。 这很奇怪、因为我将"rampmaxref"设置为 max 这可能是由于缺少 PWMSYNC 而导致的  
信号? 我设置  DACCTL.bit.RAMPSOURCE = 0、这应该使我 的 EPWM1成为斜坡源。 并且我设置  EPwm1Regs.HRPCTL.bit.PWMSYNCSEL = 1、因此当 CTR = 0时应生成 PWMSYNC。 我还缺少什么?

下面是斜坡和 PWM1的初始化代码:

InitEPwm ();

EALLOW;
EPwm1Regs.TBPRD = 900;//(100KHz @ 60MHz 时钟)
EPwm1Regs.TBCTL.bit.PRDLD = 1; //立即加载
EPwm1Regs.TBPHS.Half.TBPHS = 0;//将相位寄存器设置为零
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//非对称模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DIV1;//相位加载
比率 TBIT.TBIT.TBIT.1TBIT.TBIT.TBIT.TBIT.1RCTL = TBIT.TBIT.TBIT.TBIT.TBIT.TBIT.TBIT.1TBIT.TBIT.TBIT.TBIT.1TBIT.TBIT.TBIT.TBIT.TBIT.TBIT.1TBIT.TBIT.TBIT.1

EPwm1Regs.TBPHS.ALL = 0; //时基相位寄存器
EPwm1Regs.TBCTR = 0; //时基计数器寄存器
EPwm1Regs.TBCTL.bit.FREE_SOFT = 2; //仿真挂起 EPwm1Regs.TBCTL.bit.PRDLD
= TB_SHADDow;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//将 PWM1A 设置为零
//根据
//比较器1输出 EPwm1Regs.DCASTL.DCMP= DCOEVT2;
//根据 DCASTL.DCOL = DCASTL.DCASTL.DCOL = DCMP1REGER.TCOL = DCASTL.DCOL = DCASTL.TCOL = DCASTON.TCAST_TCOL;TCORM1REGER.TCOL = DCAST_TCOL = TCORM1REGER.TCO
// DCAEVT2 = DCAH 高电平(将变为有效
//比较器输出变为高电平)
EPwm1Regs.DCACTL.bit.EVT2SRCEL = DC_EVT2;// DCAEVT2 = DCAEVT2 (未滤波) EPwm1Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT1RDSL.EPT.EEPwCMS1RP.EPT1




= EPWCL.EPT.EPT1RESL.T1R= EPwT1RP.EPT.EPT.EPT.EPT.EPT1RESL.T1RP.T1R= EPWCMS/ EPWCL.T1RP.T1RP.T1RP.TESL.N = EPWCMP= EPWCMS1RP.T1RP.T1RP.T1RP.TESL.T1RP.T1RP.EP. //PWMSYNC 为 CTR = 0;

EPwm1Regs.ETSEL.bit.SOCAEN = 1; //在组上启用 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 1; //从零匹配中选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1; //在发生第一个事件时生成脉冲
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; //启用影子模式
EPwm1Regs.CMPCTL.bit.LOADAMODE = 2; //在 CTR =零

EDIS 上重新加载;

SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1; //使能比较器的时钟1块
Comp1Regs.COMPCTL.bit.COMPDACEN = 1;//比较器加电
Comp1Regs.COMPCTL.bit.SYNCSEL = 0x1;//同步版本
Comp1Regs.COMPCTL.bit.QUALSEL = 0x2;// 3个时钟
Comp1Regs.COMPCTL.bit.CMPINV = 0x0;//通过
Comp1Regs.COMPCTL.bit.COMPSOURCE = 0x0;//反相输入是内部 DAC
Comp1Regs.CompCTL.bit.DACSOURCE = 1;//内部 DAC1.RACMP0 = 1;//内部 DAC.COMPRATE
= 1REGP.ADCC.COMPLE.COMPLE.COMPLE.T= 1;// //EPWM1是斜坡源
COMP1Regs.RAMPDECVAL_Shdw = 100;//初始斜率
COMP1Regs.RAMPMAXREF_Shdw = 0xFFFF; 

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

    可以关闭此帖子。 我尝试在没有 EALLOW 的情况下写入受保护的寄存器。 我移动了 EDIS:

      // EDIS;
        SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1;               // Enable clock to the Comparator 1 block
        Comp1Regs.COMPCTL.bit.COMPDACEN = 1; //The comparator is powered up
        Comp1Regs.COMPCTL.bit.SYNCSEL = 0x1; //Synchronous version
        Comp1Regs.COMPCTL.bit.QUALSEL = 0x2; //3 clocks
        Comp1Regs.COMPCTL.bit.CMPINV = 0x0; //pass through
        Comp1Regs.COMPCTL.bit.COMPSOURCE = 0x0; //The inverting input is internal DAC
        Comp1Regs.DACCTL.bit.DACSOURCE = 1; //Internal ramp
        Comp1Regs.DACCTL.bit.RAMPSOURCE = 0; //EPWM1 is the ramp source
        Comp1Regs.RAMPDECVAL_SHDW = 100; //Initial slope
            Comp1Regs.RAMPMAXREF_SHDW = 0xFFFF
     EDIS;