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.

[参考译文] TIDM-BUCKBOOST-BIDIR:对占空比计算存在疑问

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

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/1088071/tidm-buckboost-bidir-doubts-about-duty-cycle-calculations

部件号:TIDM-BUCKBOOST-BIDIR

你好。
我们正在开发锂离子电池充电器,我们将TIDM-BUCKBOOST-BIDIR参考设计作为起点,因为它满足了我们的大多数要求。
我想更好地了解与工作周期计算方式相关的一些事项。 以下是我的疑虑(假设它是闭环操作和正向模式):
-首先,为什么在计算占空比之前用_DPL_Func中的占空比变量乘以2 (它在汇编代码中作为一个班次实现:LSL ACC,#1)? 我知道在闭环操作下,它只是在环路中的增益,但它是否有特定的原因?
@是否真的需要在每个模式的开头执行MOVL ACC,n ü r XAR0?
-您能否解释一下为什么要将其与常量C1,C2和C3结合使用,而不是使用更简单的除法来实现预期增益(基于Vo/VI=dBu/(1-dbo))? 是否要避免因所涉及的CPU负载而产生的分区? 此外,如何获得这些系数? 我看到了电子表格,但我不理解流程。 我们是否应该尝试这些系数的不同值并查看每个情况的效率,或者是否有更有条理的方法来继续?
提前感谢您的参与。

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

    您好,Roman:

    我不确定您计划在您的项目中使用哪种C2000器件。 此参考设计是基于一个非常旧的C2000器件完成的,该器件没有浮点单元和有限的MIPS,因此我们使用了许多汇编代码来编写运行于高频下的主ISR。 如果您要进行任何新的设计,我建议您考虑我们的一款更新的设备(如F2.8002万x),它具有FPU,TMU和更高的时钟。 对于新设备,您无需再使用手写组件。 以C代码编写ISR,并进行编译(在上进行了优化),对于数字控制循环来说,速度应该足够快。  

    对于您的问题,我将尝试根据我从代码中记忆的内容进行回答:

    1.在发送至下一阶段之前,控制输出增益应调整为0-2 (如下表所述)。 我假设补偿器的组装版本默认情况下会将输出夹紧到1,因此需要LSL ACC,#1来将其缩放为0-2。

    2.这段代码正在实现IF ... ELSE IF ... ELSE ...逻辑类型,并且只执行其中一种模式。 这就是为什么在每个模式开始时需要将@XAR0的值提取到ACC中的原因。 请参阅下表了解所实施的逻辑。

    3.同样,请参阅下表中增益至占空比转换代码的逻辑。 此表位于设计指南的第5页。 C1,C2,C3基于功率级上的开环测量,以线性化功率级,从而使输出/输入接近增益(在大多数地区租赁)

    韩文

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

    你好,Han。
    感谢您提供有关使用较新设备的建议。 我们将予以考虑。
    关于您的答案:
    1.好的,我理解。
    2.是的,我明白逻辑。 但是,我的疑问是,如果ACC的内容没有修改(至少,明确地说,我可能缺少一些东西),而最后保留的是@XAR0的值,那么为什么要提取它。 是否真的有必要这样做? 它是否已经具有该值?
    3.很好。

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

    您好,Roman:

    代码将值记入ACC登记簿,对值进行一些计算,并将计算结果存储到其他存储位置。 请参阅以下示例:

    韩文

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

    很抱歉,我认为您不理解我的观点。  我想说的是,我的猜测是 第一行(MOVL ACC,@XAR0)可以删除,因为ACC的值以前没有修改过。   下面的代码显示了我的意思。 在那里可以看到ACC未被修改。 我弄错了吗?

    ...
            .ref _C2_value
    		.ref _ConstBuckModeDuty
    		.ref _C3_value
    		.ref _Buck100Count
    		.ref _Boost0Count
    		MOVW 	DP,#(_Duty)
    		MOVL	ACC,@_Duty
    		LSL		ACC,#1
    		MOVL	@XAR0,ACC
    		CMPL 	ACC,@_BuckModeMaxGain
    		B BUCK_MODE, LT
    		CMPL	ACC,@_BrAModeMaxGain
    		B BRIDGE_MODE_A,LT
    		CMPL	ACC,@_BrBModeMaxGain
    		B BRIDGE_MODE_B,LT
    		B BOOST_MODE, UNC
    
    BUCK_MODE:
    ...
    
    BRIDGE_MODE_A:
    		;MOVL	ACC,@XAR0                    ; COULD BE AVOIDED, RIGHT?
    		SUBL	ACC,@_C1_value
    		MOVL	@_DutyBuck,ACC
    		MOVL	ACC,@_ConstBoostModeDuty
    		MOVL	@_DutyBoost,ACC
    		B PWM_UPDATE_BUCK, UNC
    ...

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

    您的回答似乎正确。 我不能保证,因为我没有测试删除线。

    我再次建议您使用C语言编写软件,以便进行新的开发,除非您发现ISR无法在分配的时间内完成。  

    韩文