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.

[参考译文] UCD3138128:TIDA-00653、关于 CBC 设置

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1405789/ucd3138128-tida-00653-about-cbc-setting

器件型号:UCD3138128
主题中讨论的其他器件:TIDA-00653UCD3138FW-BIDI

工具与软件:

尊敬的  TI 专家:

参考项目:TIDA-00653、UCD3138FW-BIDI

我想问一下init_CBC函数中"positional_threshold"的计算公式。

1."0.0269"和"127"的参考资料是什么?

"1.25"是指 ADC 的中心值、而"2.5"是最大 ADC 读数电压吗?

3.如果将来最大电流值可能会发生变化、我是否需要修改 CURRENT_POSITION_SETPOINT 和 CURRENT_NEGATIVE_SETPOINT 值?

4.因为我打算用 ADC13来实现 iShare 功能、但是原来的引脚被占用了、所以我把它调整为改用 ADC06。 您能否检查此配置是否正确?

谢谢你。

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

    Parrish,

    127是 ACOMP_B_THRESH 寄存器的最大值。 2.5V 是最大 ADC 输入电压。 1.25V 是 REF1112AIDBZT 的钳位电压、这是运算放大器(U5A) IN+引脚电压。 换言之、就是电流偏移。  

    采样分流电阻器为1m Ω。 运算放大器放大因子为26.1、即26.1*0.001 ~=0.0269 (最后一个数字可能由于 元件值不理想而关闭)。  

    如果将来最大电流发生变化、您需要调整电流分流电阻器值、以确保读数仍在 ADC 范围内。

    您只能将 ADC2、3、4、6、7、13用于 CBC。 但 ADC6可用于检测48V 总线。 您将需要使用其他 ADC 来实现该功能。

    您的代码不正确。 您通过代码连接 AD -07。 您不需要更改代码、但需要更改原理图以重新分配引脚。

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

    尊敬的 Ning:

    抱歉、我没有清楚地解释。

    我们引用 TIDA-00653来设计48V 至48V 双向直流/直流转换器、因此我需要了解原始固件设计、以便相应地修改相应的内容。

    目前、为了在器件上使用 iShare 功能、我已将 ADC13更改为 ADC06、而原始的 ADC06已移至 ADC05。

    由于 iShare 使用 AD02、因此我还将原来的 ADC02更改为 ADC01。 请参考下图。

    根据此配置更改、我所做的手动调整是否正确?

    ACOMP_F_REF_SEL = 0 (这意味着默认 AD06? 或 AD07?)

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

    尊敬的 Ning:

    继续以上问题、如何对其进行修改以正确配置 AD06?

    下面是我的"init_cbc"代码、与原始代码相比、我只修改了"Phase 4 CBC"设置。

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

     TIDA-00653中的 CBC 配置如下。 您是否说 Phase4_CBC 现在由 AD06完成、而48Vsen_ADC 通过 AD05完成? 如果这样,我误解了你的上一篇文章,是的,你可以做到这一点。

    ACOMP_F_REF_SEL = 0 (这表示默认 AD06)

    您的代码正确。

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

    尊敬的 Ning:

    是的、这就是我的意思、谢谢。

    此外、我还有一个问题:

    由于"init_cbc ()"函数负责 CBC 的初始配置、我注意到在每个阶段的末尾设置了"CBC_MAX_COUNT"、"AB_MAX_COUNT"和"ALL_FAULT_EN"。

    为什么不设置"CBC_FAULT_EN"? 在什么情况下需要"CBC_FAULT_EN"?

    Dpwm0Regs.DPWMFLTCTRL.bit.CBC_MAX_COUNT = 15;
    Dpwm0Regs.DPWMFLTCTRL.bit.AB_MAX_COUNT = 1;
    Dpwm0Regs.DPWMFLTCTRL.bit.ALL_FAULT_EN = 1;

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

    问得好。 我不知道为什么  当前固件中未设置 CBC_MAX_COUNT = 15和 CBC_FAULT_EN。 它是8年前开发的。

    以下是  CBC_FAULT_EN 的工作方式:如果连续 CBC 事件数超过 CBC_MAX_COUNT、则会禁用 PWM 信号、直到复位。 通常、用户可以设置 CBC_FAULT_EN = 1、以防止 PWM 在多个周期内发生真正的过流情况后切换。

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

    尊敬的 Ning:

    您是否建议我添加CBC_FAULT_EN=1到代码中?

    如果它与同时设置ALL_FAULT_EN、是否会有任何冲突?

    此外、如果CBC_FAULT被触发并且 DPWMA 和 DPWMB 被禁用、需要哪些设置来重新启动 DPWM?

    谢谢你。

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

    Parrish,

    请阅读 TRM、如第6.8节、您将找到大量信息。

    例如、对于 CLIM/CBC、为 CBC_FAULT_EN;对于其他3、为 ALL_FAULT_EN。

    您可以决定是否因 CBC 计数超限而启用 PWM 禁用功能。 我建议  除了设置  CBC_FAULT_EN = 1之外、还实施故障处理程序。 换言之、您希望系统在插入故障后做出反应的内容。

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

    尊敬的 Ning:

    我简单地看了一下您提供的信息、并有一个想法:

    在下面的代码中、我计划定期或在主循环中检查"DPWMFLTSTAT.BIT.FLT_CBC"状态。 如果被触发、我将首先完全禁用该状态、然后继续重新启动"DPWM"。 这是正确的方法吗?

    void Check_flag(void)
    {
        if (Dpwm0Regs.DPWMFLTSTAT.bit.FLT_CBC)
        {
            //CBC FAULT Trigger
            global_disable();
        
            Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 0;
            Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 0;
            Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 0;
            Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 0;
        }
    }
    
    void resume_enable_dpwm(void)
    {
        //another enable dpwm
        global_enable();
        Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;
        Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 1;
        Dpwm2Regs.DPWMCTRL0.bit.PWM_EN = 1;
        Dpwm3Regs.DPWMCTRL0.bit.PWM_EN = 1;
    }

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

    Parrish,

    我强烈建议不要按照您提到的方式实施。 请使用中断模块来处理此 故障、因此不使用 MCU 资源。

    另外、请注意、故障位在读取时是清零的、因此无法持续进行检查。

    请检查文件"standard_interrupt.c"以了解使用中断处理程序的示例。

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

    尊敬的 Ning:

    理解、那么、如果我将一个类似的处理例程放置在"standard_interrupt"函数中、并在那里控制相应的行为、那么应该会起作用、对吗?

    根据我的理解、这个中断被设置为根据 DCDC 程序中的 PWM2触发、这意味着它是周期性触发的中断、对吧?

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

    是的

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

    尊敬的 Ning:

    非常感谢您的帮助。 如果我还有其他问题、我将创建一个新帖子。

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

    尊敬的 Ning:

    抱歉、最后一个问题:

    我注意到 DCDC 代码中的故障相关设置都被注释掉、因此该程序可能无法处理故障事件。 如果我删除了"init_CBC()"函数中的 FAULT EN 和 MAX_COUNT 设置、会发生什么情况?

    (这是在只设定了引脚配置和 CBC 激活标准的条件下。)

    就像这样:

    INIT_FAULT (直流/直流代码):

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

    Parrish,

    故障设置也可以在其他位置完成。  例如、init_cbc 函数已定义了下面的注释行。  如果您删除"init_CBC()" 函数中的 FAULT EN 和 MAX_COUNT 设置、则 DPM 模块将不会对故障做出反应。

    // Dpwm0Regs.DPWMFLTCTRL.bit.all_fault_EN=1;
    // Dpwm0Regs.DPWMFLTCTRL.bit.AB_MAX_COUNT=0;
    //
    // Dpwm1Regs.DPWMFLTCTRL.bit.all_fault_EN=1;
    // Dpwm1Regs.DPWMFLTCTRL.bit.AB_MAX_COUNT=0;
    //
    // Dpwm2Regs.DPWMFLTCTRL.bit.all_fault_EN=1;
    // Dpwm2Regs.DPWMFLTCTRL.bit.AB_MAX_COUNT=0;
    //
    // Dpwm3Regs.DPWMFLTCTRL.bit.all_fault_EN=1;
    // Dpwm3Regs.DPWMFLTCTRL.bit.AB_MAX_COUNT=0;

    数字比较器 未 用于故障检测 、因此无需对其进行定义。