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.

[参考译文] CCS/UCD3138A:ACOMP 问题

Guru**** 2554570 points
Other Parts Discussed in Thread: UCD3138A

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/777067/ccs-ucd3138a-question-of-acomp

器件型号:UCD3138A

工具/软件:Code Composer Studio

为了快速响应过流保护、请使用模拟比较器。 当输出电压低于 某个值或输出电流高于某个值时、定义为发生过流保护。 输出电压使用 C 的模拟比较器、输出电流使用 D 的模拟比较器。初始代码如下:

FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_D_THRESH = OCP_CMP_REF;

FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_D_SEL = 0;  
FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_D_POL = 1;   

FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_THRESH = UVP_CMP_REF;

FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_SEL = 0;    
FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_POL = 0;    

如果故障发生、将在快速中断中完成。 它将看到 CimRegs.FIQIVEC.ALL 和 FaultMuxRegs.FAULTMUXINTSTAT.ALL 的标志。

1. 我找不到 CimRegs.FIQIVEC.ALL 的列表。从哪里可以得到它?

2.当过流发生两次并恢复时,模块无法启动。 我通过 PMBus 查看一些信息。 FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_INT_EN、Dpwm2Regs.DPWMIP.bit.PRD_INT_EN、Dpwm0Regs.DPWMCTRL1.bit.GPIO_A_EN 的寄存器都是正确的。

如果禁用 C (Vout UVP)的模拟比较 器、则模块可以在过流多次发生后启动。 为什么? 如果始终发生故障、我使用调试 I/O 来查看故障。 但调试 I/O 只会在某个时间发生变化。 波形如下:(CH2:调试 I/o ch3:电流)如果调试 I/O 发生变化、则表示检测到了上拉电阻。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于您的第一个问题、每个器件的数据表中都有中断编号、而不是技术参考手册中的中断编号。 随着功能的添加或删除、它们会在不同器件之间发生变化。 在当前的 UCD3138A 数据表中,它们位于第7.4.4节“中央中断模块”中。 这是数据表: www.ti.com/.../ucd3138a.pdf

    对于您的另一个问题、一旦故障发生、您需要采取措施重新启动 DPWM。 在任何器件上、您都可以使用 GLBEN 位或每个 DPWM 中的 PWM_EN 位启用和禁用 DPWM。 在 A 器件上、FLT_RESTART 位被添加到 DPWMFLTCTRL 寄存器中。 设置此位将在发生故障后重新启动 DPWM B、而不会停止 DPWM A。它还可用于在不停止 DPWM B 的情况下重新启动 DPWM A。请注意、FLT_RESTART 不会自行复位。 使用时、每次使用后都需要将其返回为零、以便有一个上升沿触发下一次重新启动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的响应。

    关于问题2、我无法描述 claerly。 故障发生后 、我将 LoopMuxRegs.GLBEN.all 的寄存器设置为0、并设置 OCP 标志、禁用 anlong compator。 然后使用 statemachine 执行故障。 在 statemachine 中、我将禁用 DPWMA 和 DPWMB、再次初始化 PWM 函数。 OCP 标志清除后、模块将重新启动过程。

    该过程可以重新启动两次。 在两次中,模块成功地重新启动。 但第三次,它是不成功的。 如果禁用 C (Vout UVP)的模拟比较器、则模块始终可以成功地重新启动。 我不知道原因。 我通过 PMBus 获取一些调试信息、并查看 LoopMuxRegs.GLBEN.ALL、Dpwm0Regs.DPWMCTRL1.bit.GPIO_B_EN、Dpwm1Regs.DPWMCTRL1.bit.GPIO_B_EN、Dpwm0Regs.DPWMCTL1.bit_A、GPIO
     Dpwm1Regs.DPWMCTRL1.bit.GPIO_A_ENFaultMuxRegs.ACOMPCTRL1.bit.ACOMP_D_INT_EN、FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_INT_EN、FaultMuxRegs.ACOMTRL1.ACOMP_THRES1.ACOH、ACOMP_THRES1.ACOL1.THRES1.ACOH

    FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_D_THRESH。 没错。

    当模块未成功重新启动时、FaultMuxRegs.FAULTMUXINTSTAT.ALL 为0x08。 但是、我已经通过将值指定为 temp 来读取和清除中断标志。 这是原因吗?

    我使用调试 I/O 来查看故障是否发生。 您可以看到图片。 为什么调试 I/O 不会每次更改?

    所以我需要你的建议。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这里有很多位和复杂的问题、我无法从这里对其进行真正的调试。 您只需在运行时查看所有位、看看是什么问题。 它有点像跟踪模拟电路、以查看信号发生在哪里。 如果 FAULTMUXINTSTAT 保持为8、则意味着 ACOMP-C 不断被触发-信号持续高于和低于阈值。 它是边沿敏感的、因此如果它保持高电平或低电平、您将获得最多1个中断。 该位通过读操作清零、因此如果您保持读操作、则只有在再次触发时才会看到1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 谢谢! 我将看到它并进行调试。
    但另一个问题如下:
    我使用调试 I/O 来查看故障是否发生。 您可以看到图片。 为什么调试 I/O 不会每次更改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同样、答案是相同的-从这个链到那个点的东西都是坏的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我禁用 CMP_D (OCP)并启用 CMP_C (VOUT_UVP)。 在 ACOMP_C 中断发生一次后、模块将被锁存。 然后、我看到 FaultMuxRegs.FAULTMUXINTSTAT.ALL (0)、FaultMuxRegs.DPWMXFLTABDET.bit.ACOMP_C_EN (1)、FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_INT_EN (1)的寄存器。 没错。 此外、我还读取 FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_THRESH (40)的寄存器。 值为40。 Vout 的 ADC 为0x0B。 ADC 的值低于 ACOMP_C_THRESH。 但不会发生中断。 为什么? 我需要看到哪个寄存器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我禁用 CMP_D (OCP)并启用 CMP_C (VOUT_UVP)。 在 ACOMP_C 中断发生一次后、模块将被锁存。 然后、我看到 FaultMuxRegs.FAULTMUXINTSTAT.ALL (0)、FaultMuxRegs.DPWMXFLTABDET.bit.ACOMP_C_EN (1)、FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_INT_EN (1)的寄存器。 没错。 此外、我还读取 FaultMuxRegs.ACOMPCTRL1.bit.ACOMP_C_THRESH (40)的寄存器。 值为40。 Vout 的 ADC 为0x0B。 ADC 的值低于 ACOMP_C_THRESH。 但不会发生中断。 为什么? 我需要看到哪个寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很难说。 您需要确保不会在其他地方读取代码中的 faultmuxintstat 寄存器并将其清除。 我想我已经提到过、如果时序完美、有时我们会看到 DPWM 在没有故障中断的情况下关闭、但通常情况下、脉冲非常短、在这里似乎不是这样。 我们建议改用 DPWM 故障寄存器、以避免所有这些问题。