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.
各位专家、您好!
我的客户关闭 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。 对吗? 另一个问题是、更改迟滞宽度是否有用? 您能看到他们的配置有什么不寻常的吗?
他们尝试了这种方法、没有变化。 他们以前曾尝试过这些方法,但没有改进:
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