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.

[参考译文] TMS320F28075:连续生成比较器中断?

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/611492/tms320f28075-comparator-interrupt-continuously-generated

器件型号:TMS320F28075

您好!

我的系统如下所示:

系统1:
模拟输入->比较器子模块-> ePWM x-bar -> TRIP 5 -> EPWM1中的数字比较子模块-> DCAEVT1作为 OST 的源-> EPWM2_TZ 中断。 ------ 连续产生中断。

配置如下:

Cmpss3Regs.COMPCTL.bit.COMPDACE = 1;
Cmpss3Regs.COMPCTL.bit.COMPHSOURCE = INTERNAL_DAC;
Cmpss3Regs.COMPDACCTL.bit.SELREF = reference_VDDA;
Cmpss3Regs.DACHVALS.bit.DACVAL = 1118;
Cmpss3Regs.COMPHYSCTL.bit.COMPHYS= Typical_1x;
Cmpss3Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0;
Cmpss3Regs.CTRIPHFILCTL.bit.SAMPWIN = 5;
Cmpss3Regs.CTRIPHFILCTL.bit.THRESH = 3;
Cmpss3Regs.CTRIPHFILCTL.bit.FILINIT = 0;
Cmpss3Regs.COMPCTL.bit.CTRIPHSEL = CTRIP_FILTER;
Cmpss3Regs.COMPCTL.bit.CTRIPOUTHSEL = CTRIP_FILTER;

EPwmXbarRegs.TRIP5MUX0TO15CFG.bit.MUX4 = 0;
EPwmXbarRegs.TRIP5MUXENABLE.bit.MUX4 = 1;

EPwm2Regs.TZCTL.bit.TZA= TZ_FORCE_LO;EPwm2MUZDCRIT1.TCALE.TCAREG.TZT.TZL.TZTCAREG.TZL.TZEMP.TZEMP.TZL.TZEMP.T
= TZ_DCBH_HI;
EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL= 0x4;
EPwm2Regs.DCAHTRIPSEL.bit.TRIPINPUT5= 0;
EPwm2Regs.TZSEL.bit.DCAEVT1= 1;
EPwm2Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;
EPwm2Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_异 步;
EPwm2Regs.TZCLR.bit.DCAEVT1 = 1;
EPwm2Regs.TZCLR.bit.OST= 1;
EPwm2Regs.TZCLR.bit.INT= 1;
EPwm2Regs.TZEINT.BIT.DCAEVT1 = 1; 

系统2:

数字输入(GPIO)->输入 x-bar -> Trip1 (TZ1)-> ePWM 2 -> EPWM1_TZ --- 生成中断一次。

配置如下:

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_updown;
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.TBPRD = PWM_freqToTicks (switching_FREQ_Hz)/ 2;
EPwm1Regs.TBPHS.bit.TBPHS = 0xTBW0000;
EPwm1RCTR = 0xTBW0000;
EPwm1Regs.CMPA.bit.CMPA = 0;
EPwm1Regs.CMPB.bit.CMPB = PFC_B_PWM_ADC_START_COREM;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_FREEEPwm1Regs.TBCTL.bit.HSPIV1TBIN.TBIV1; EPwDIV_TBIV1TB.TBIT.TBIT.TBIV1RMODE
= TBDCTL.TBIT.TBIV1TBIV1TB.TBIT.TBIV1TB.TBIT.TBIT.TBIV1RMODE = TB

EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADD;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADDADE;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADDADDADM1Regs.CMPCTL.bit.LOTL.TCC_ZERO
;EPwmCTR = EPwCTR
= ADCMOCTL.ADDR_ZERO;EPwCTR = ADCMOCTR = ADCMOCTL.TL.ADDR_ZERO
EPwm1Regs.ETSEL.bit.SOCAEN= TB_ENABLE;
EPwm1Regs.ETSEL.bit.SOCASEL= ET_CTRL_CMPA;
EPwm1Regs.ETSEL.bit.SOCBEN= TB_DISABLE;
EPwm1Regs.ETSEL.bit.SOCBSEL= ET_1Regs.et_SOPs
;EPwm1RP.TOP.ST.TOPs = ET_0;EPwMRD = TL.TBIT.OPS_0;EPwm1RPM_0;EPwmRPM_
EPwm1Regs.ETCLR.bit.SOCA = 1;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm1Regs.AQCTLA.bit.CBU = AQ_NO_action;
EPwm1Regs.AQCTLA.bit.CBD = AQNO_action;
EPwm1Regs.TZCLR.bit.OST = 1;
EPwm1Regs.TZCLR.bit.INT = 1;
EPwm1Regs.TOSZ1;THTRegs.TOS1 

我已确认这两个 ISR 中的 PIE 中断。 我的问题是、为什么系统-1会在跳闸区域中断配置大致相同的情况下连续生成中断。  我在这里手动控制输入。 模拟输入不是连续的、因此会导致系统1发生跳闸。

有人可以指导我吗? 如果您想了解更多信息、请告诉我。

谢谢、

Sagar

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

    您好 Sagar、

    在执行 PIEACK 之前、您是否清除了 TZFLG 和任何 CMPSS 标志?

    此致、

    Kris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、在任何一个系统中均未完成。 如果这导致中断持续发生、系统2也应该有相同的问题、但没有任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    感谢您提供相关信息。 一件可能有用的事情是配置输出 X-Bar、将 CMPSS 信号输出到引脚、以查看它们的行为是否不同。 您是否能够发布每个系统的 ISR?

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

    当然。 我将通过输出 x 条输出信号、并查看正在发生的情况。 如果这样做对我没有帮助、我可能会分享 ISR。 感谢您的帮助:)

    编辑:

    我没有清除中断中设置的变量、这些变量导致系统在10ms 例程中以盲状态运行。 这看起来像是中断持续生成、并且这些变量是从中断中设置的。

    对于我的愚蠢错误、我深表歉意。

    感谢您的回答。