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.

[参考译文] TMS320F280049:CMPSS 问题

Guru**** 2042910 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133944/tms320f280049-cmpss-issue

器件型号:TMS320F280049
Thread 中讨论的其他器件:SysConfigC2000WARE

各位专家、您好!

我的客户关闭 CMPSS3、CMPSS4、CMPSS7。

但它们会监控 三个 CMPSS 模块的 CTRIPH 和 CTRIPL 是否被触发1。 以下寄存器的值为 0011 1111 1011 0011 1101 1111 1011。

他们还进行了另一次测试。 它们禁用 TRIP4MUX4、TRIPMUX6,但结果与上述相同。 寄存器的值仍然为0011 1111 1011 0011 1101 1111 1011。

请在该问题上提供帮助。 提前感谢您。

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

    即使使用 CMPSS_disableModule(),也会触发跳闸。 以下是 CMPSS 的配置代码。


    空 InitCMPSS (空)

    InitCMPSS1();
    InitCMPSS2();
    InitCMPSS3();
    InitCMPSS4();
    InitCMPSS5();
    InitCMPSS6();

    EALLOW;

    TRIP4的//ePWM XBAR 多路复用器配置
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0;
    TRIP4的//ePWM XBAR 多路复用器使能
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 1;

    TRIP4的//ePWM XBAR 多路复用器配置
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX2 = 1;
    TRIP4的//ePWM XBAR 多路复用器使能
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1;

    TRIP4的//ePWM XBAR 多路复用器配置
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX4 = 0;
    TRIP4的//ePWM XBAR 多路复用器使能
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX4 = 1;

    TRIP4的//ePWM XBAR 多路复用器配置
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX6 = 0;
    TRIP4的//ePWM XBAR 多路复用器使能
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX6 = 1;


    TRIP4的//ePWM XBAR 多路复用器配置
    EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX8 = 0;
    TRIP4的//ePWM XBAR 多路复用器使能
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX8 = 1;

    XbarRegs.XBARCLR1.ALL = 0xFFFFFFFF;
    EPwm1Regs.TZCLR.ALL = 0xFFFF;
    EPwm2Regs.TZCLR.ALL = 0xFFFF;
    EPwm3Regs.TZCLR.ALL = 0xFFFF;
    EPwm5Regs.TZCLR.ALL = 0xFFFF;
    EPwm6Regs.TZCLR.ALL = 0xFFFF;
    EPwm1Regs.TZOSTCLR.ALL = 0xFFFF;
    EPwm2Regs.TZOSTCLR.ALL = 0xFFFF;
    EPwm3Regs.TZOSTCLR.ALL = 0xFFFF;
    EPwm5Regs.TZOSTCLR.ALL = 0xFFFF;
    EPwm6Regs.TZOSTCLR.ALL = 0xFFFF;

    EDIS;


    空 InitCMPSS1 (空)

    EALLOW;
    //CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPMXSEL.bit.CMP1HPMXSEL = CMPSS_CH_PV2_CURR;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss1Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss1Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss1Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_PV2_CURR;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    cmps1Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps1Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps1Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    //低滤波器初始化。
    cmps1Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss1Regs.COMPCTL.bit.CTRIPHSEL = 2;

    EDIS;

    空 InitCMPSS2 (空)

    EALLOW;
    //CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPLXSEL.bit.CMP2HPMXSEL = CMPSS_CH_INV_CURR;
    AnalogSubsysRegs.CMPLPLXSEL.bit.CMP2LPMXSEL = CMPSS_CH_INV_CURR;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss2Regs.COMPCTL.bit.COMPHSOURCE = 0;
    Cmpss2Regs.COMPCTL.bit.COMPLSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss2Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss2Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss2Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_INV_CURR;
    Cmpss2Regs.DACLVALS.bit.DACVAL = CMPSS_DACL_INV_CURR;

    //Cmpss2Regs.COMPHYSCTL.bit.COMPHYS = 2;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    Cmpss2Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 1;
    Cmpss2Regs.CTRIPLFILCLKCTL.bit.CLKPRESCALE = 1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps2Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    Cmpss2Regs.CTRIPLFILCTL.bit.SAMPWIN = filter_window - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps2Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    cmps2Regs.CTRIPLFILCTL.bit.THRESH = filter_threshold - 1;
    //低滤波器初始化。
    cmps2Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    cmps2Regs.CTRIPLFILCTL.bit.FILINIT = 1;

    //比较器输出反相。
    Cmpss2Regs.COMPCTL.bit.COMPHINV = 0;
    Cmpss2Regs.COMPCTL.bit.COMPLINV = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss2Regs.COMPCTL.bit.CTRIPHSEL = 2;
    Cmpss2Regs.COMPCTL.bit.CTRIPLSEL = 2;

    EDIS;

    空 InitCMPSS3 (空)

    EALLOW;
    // CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPLXSEL.bit.CMP3HPMXSEL = CMPSS_CH_PV1_CURR;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss3Regs.COMPCTL.bit.COMPHSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss3Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss3Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss3Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_PV1_CURR;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    Cmpss3Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps3Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps3Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    //低滤波器初始化。
    cmps3Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss3Regs.COMPCTL.bit.CTRIPHSEL = 2;

    EDIS;

    空 InitCMPSS4 (空)

    EALLOW;
    // CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPLXSEL.bit.CMP4HPMXSEL = CMPSS_CH_PV3_CURR;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss4Regs.COMPCTL.bit.COMPHSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss4Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss4Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss4Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_PV3_CURR;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    Cmpss4Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps4Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps4Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    //低滤波器初始化。
    Cmpss4Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss4Regs.COMPCTL.bit.CTRIPHSEL = 2;

    EDIS;

    空 InitCMPSS5 (空)

    EALLOW;
    // CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPLXSEL.bit.CMP5HPMXSEL = CMPSS_CH_BUS_VOLT;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss5Regs.COMPCTL.bit.COMPHSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss5Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss5Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss5Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_BUS_VOLT;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    Cmpss5Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps5Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps5Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    //低滤波器初始化。
    Cmpss5Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss5Regs.COMPCTL.bit.CTRIPHSEL = 2;

    EDIS;

    空 InitCMPSS6 (空)

    EALLOW;
    // CMPSS 输入多路复用选择。
    AnalogSubsysRegs.CMPHPLXSEL.bit.CMP6HPMXSEL = CMPSS_CH_GRGE_VOLT;

    //高比较器输入源。
    //0内部 DAC
    //1外部引脚
    Cmpss6Regs.COMPCTL.bit.COMPHSOURCE = 0;
    //Comparator/DAC 使能。
    Cmpss6Regs.COMPCTL.bit.COMPDACE = 1;
    //DAC 基准选择。
    //0 VDDA
    //1 VDAC
    Cmpss6Regs.COMPDACCTL.bit.SELREF = 1;
    //高 DAC 影子值。
    Cmpss6Regs.DACHVALS.bit.DACVAL = CMPSS_DACH_GRGE_VOLT;

    //低滤波器采样时钟预分频。 采样之间的系统时钟数量为 CLKPRESCALE+1。
    Cmpss6Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = CMPSS_CLK_GRGE_VOLT-1;
    //低滤波器采样窗口大小。 要监控的样本数为 SAMPWIN+1。
    cmps6Regs.CTRIPHFILCTL.bit.SAMPWIN = FILTER_WINDOW - 1;
    //低滤波器多数表决阈值。使用的阈值为 THRESH+1.THRESH 应大于 SAMPWIN 的一半
    cmps6Regs.CTRIPHFILCTL.bit.THRESH = FILTER_THRESHOLD - 1;
    //低滤波器初始化。
    Cmpss6Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //高比较器 CTRIPH 源选择。
    //0异步比较器输出驱动 CTRIPH
    //1同步比较器输出驱动 CTRIPH
    /2数字滤波器的输出驱动 CTRIPH
    数字滤波器的//3锁存输出驱动 CTRIPH
    Cmpss6Regs.COMPCTL.bit.CTRIPHSEL = 2;
    //Cmpss6Regs.COMPCTL.bit.CTRIPOUTHSEL = 2;

    EDIS;

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

    Angela、

    转到您的原始帖子、即使时钟已被 CMPSS 禁用、如果它已经设置好、它也将继续使用时钟被删除之前的任何静态值运行。  因此、我认为这种行为是可以预料的。

    现在、如果我们使用 COMPDACE 位禁用 CMPSS、我需要更深入地了解这一点。  

    对于 XBARFLT1寄存器、客户是否会看到该设置再次、即使在 COMPDACE 位设置为0后清除标志也是如此?  

    客户是否可以尝试更改 COMPTCTL[CTRIPOUTSEL/CTRIPOUTLSEL]以查看是否会删除 XBAR 的输出、即如果他们使用 SYNC/LATCH/COMPSTS、请更改为异步以查看是否会清除该条件?  这里的理论是、数字逻辑仍然保持旧的比较器输出、即使它被禁用。

    如果您认为我也正确理解了这个问题、请告诉我。

    最棒的

    Matthew

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

    您好、Matthew、

    即使 在 COMPDACE 位设置为0后清除标志、 XBARFLG1寄存器也会再次设置。

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

    您好、Matthew、

    我看到有人说、ADC 和 DAC 的引用将影响 XBARFLG。 对吗? 另一个问题是、更改迟滞宽度是否有用? 您能看到他们的配置有什么不寻常的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    客户是否可以尝试更改 COMPTCTL[CTRIPOUTSEL/CTRIPOUTLSEL]以查看是否会删除 XBAR 的输出、即如果他们使用 SYNC/LATCH/COMPSTS、请更改为异步以查看是否会清除该条件?

    他们尝试了这种方法、没有变化。 他们以前曾尝试过这些方法,但没有改进:

     1、更改 DAC 基准源
    2.更改是否选择了数字滤波输出
    3.将 COMPTTL[CTRIPOUTSEL/CTRIPOUTLLSEL]修改为异步
    4.增加了 CTRIPHFILCTL.bit.SAMPWIN 值和 CTRIPHFILCTL.bit.TEST 值
    5、关闭未使用比较器的模块时钟、比较器配置也不会初始化


    行为:未使用的比较器可能会跳闸、如果未达到设定值、所用的比较器也可能跳闸;
    它们仅使用高侧比较器进行电流检测、但低侧也会触发。

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

    Angela、

    ADC/DAC 有一个将影响其使用的基准选择、但是如果我们禁用比较器、我们不应该看到这些值传播。  我需要让其他一些人参与这次讨论、可能需要另外一天才能得到答案。

    最棒的

    Matthew

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

    Angela、

    我无法在办公室内的 LAUNCHXL-F280049上重现此问题。  当我清零 COMPDACE 位时、我看到本地 COMPSTS 位立即变为0、LATCH 位保持其值。  当 COMPDACE 被清零时、如果我查看与这些信号相对应的 XBARFLAG、如果我将它们清零、则它们不会再次被置位、直到我再次将 COMPDACE 位设置为1。

    因此、当 COMPDACE = 0时、我不会看到任何信号从 CMPSS 传播到 XBARFLAG 寄存器。  是否还有另一个信号我应该检查以查看 COMPDACE 位是否具有不同的影响?

    最棒的

    Matthew

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

    您好、Matthew、

    芯片中是否可能有某处损坏?

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

    您好、Matthew、

    我知道他们用一个好芯片更换了芯片、问题仍然存在。 他们怀疑自己的设计有问题。 您能帮您检查硬件和软件吗?

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

    Angela、

    我们可以请求在内部进行审核。  您能否通过论坛开始电子邮件对话、以便我们可以私下分享原理图/SW?

    最棒的

    Matthew

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

    您好、Matthew、

    您能不能与大家分享一下 您在 LAUNCHXL-F280049上重现此问题所使用的演示。 我的客户稍后将向我发送软件/硬件、我将通过电子邮件将其发送给您。 非常感谢您的帮助。

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

    Angela、

    我刚才使用了 C2000Ware 示例之一、SysConfig 来配置 CMPSS 和 BUFDAC (需要将 DACOUT 连接到 CMPSSIN 的跳线)、以使 CMPSS 发生跳闸事件。  然后、我将 XBARFLAG 添加到 CCS 中的观察窗口中、并在我设置/清除 COMPDACE 位时观察到行为。

    客户还可以使用输出 XBAR 将 CMPSS 输出到 GPIO 上。

    最棒的

    Matthew