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.

[参考译文] UCD3138:有关 UCD3138全桥硬开关开发板固件中内联 void frequency (void)函数的问题

Guru**** 2460850 points
Other Parts Discussed in Thread: UCD3138

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/677104/ucd3138-questions-about-the-inline-void-frequency_switch-void-function-in-ucd3138-full-bridge-hard-switch-development-board-firmware

器件型号:UCD3138

你好
我最近学习了 UCD3138全桥硬开关开发板固件
我遇到了问题
我对函数内联 void frequency (void)感到困惑

内联 void frequency 开关(void)

if (perspoid_new > perspoid_old)//
//perspoid_old = PMBus_DCDC_CONFIG[0].period;
//perspoid_new = PMBus_DCDC_CONFIG[0].period;

PMBus_DCDC_CONFIG[0].PERIOD = PERARE_OLD + 1;//
perspoid_old ++;
CONFIG_VOUT_RAMP_RATE ();
CONFIG_TON_RISE ();
init_dpwm0();
init_dpwm1();
CONFIG_DPWM_时序();
LoopMuxRegs.PWMGLBPER.ALL = PMBus_DCDC_CONFIG[0].PERIOD;
Filter2Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= PMBus_DCDC_CONFIG[0]。period * 1;//最大容限为100%
Filter2Regs.FILTEROCLPLA.bit.output_clamp 低电平= PMBus_DCDC_CONFIG[0].PERIOD * 0.4;
Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平=(PMBus_DCDC_CONFIG[0].PERIOD >> 1)- 500;//钳位至50%占空比- 500 * 250ps
Filter1Regs.FILTEROCLPHI.bit.output_CLAMP 高电平=(PMBus_DCDC_CONFIG[0].PERIOD >> 1)- 500;//钳位至50%占空比- 500 * 250ps
LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(3 * PMBus_DCDC_CONFIG[0].PERIOD)>> 6;
LoopMuxRegs.FILTERKCOMPB.bit.KCOMP2 = PMBus_DCDC_CONFIG[0].PERIOD >> 4;//输入4ns

if (perspoid_new < perspoid_old)

PMBus_DCDC_CONFIG[0].PERIOD = PERARE_OLD - 1;//
perspoid_old --;
CONFIG_VOUT_RAMP_RATE ();
CONFIG_TON_RISE ();
init_dpwm0();
init_dpwm1();
CONFIG_DPWM_时序();
LoopMuxRegs.PWMGLBPER.ALL = PMBus_DCDC_CONFIG[0].PERIOD;
Filter2Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= PMBus_DCDC_CONFIG[0]。period * 1;//最大容限为100%
Filter2Regs.FILTEROCLPLA.bit.output_clamp 低电平= PMBus_DCDC_CONFIG[0].PERIOD * 0.4;
Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平=(PMBus_DCDC_CONFIG[0].PERIOD >> 1)- 500;//钳位至50%占空比- 500 * 250ps
Filter1Regs.FILTEROCLPHI.bit.output_CLAMP 高电平=(PMBus_DCDC_CONFIG[0].PERIOD >> 1)- 500;//钳位至50%占空比- 500 * 250ps
LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =(3 * PMBus_DCDC_CONFIG[0].PERIOD)>> 6;
LoopMuxRegs.FILTERKCOMPB.bit.KCOMP2 = PMBus_DCDC_CONFIG[0].PERIOD >> 4;//输入4ns

我认为该函数用于更改开关周期。

当上部计算机发出的新周期大于旧周期时,该周期将增加。

当上部计算机发出的新周期小于旧周期时、周期会减少。

周期的增加或减少是一个单位的增加或减少、而不是直接增加或减少到一个新值。 这种渐进的变化比突变好。

但是,我不理解为什么在函数中使用“if”语句,而不是“for”语句。 我认为,如果“if”语句的旧周期只能增加或减少1个单元,则不能增加或减少到新的周期。

不知道我的理解是正确的? 或者程序中是否有循环加法和减法的函数、但我不知道在哪里。


谢谢你

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

    请注意,函数 frequise_switch()是从 standard_interrupt 服务例程调用的。

    由于一个计时器每100微秒调用一次 standard_interrupt,因此 frequency _switch()也是如此;每100us 调用一次。

    因此,不需要 for (;)循环。

    此外、我们不希望以"忙等待"的方式执行此操作、这意味着我们不希望在该任务结束之前一直忙于更改开关频率。

    最好是一步一步地接近我们的目标、然后执行其他可能需要注意的重要任务、然后再次返回并朝着提高/降低开关频率的目标迈出另一步。

    我希望这是有道理的。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白了,谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于频率变化不是很紧急、因此每100us 增加或减少一个单位。 这意味着什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果更改频率、则必须按比例更改事件/边沿。

    为了避免在这个过程的中间发生任何击穿、每100uS 以小步执行此操作更安全。

    此致、

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

    我们主要是缓慢地更改频率、因为频率变化的阶跃函数的作用类似于瞬态、如果输出足够大、甚至会导致输出故障。  

    由于死区时间在频率 变化期间也会瞬间发生变化、因此对死区时间也会发生重大变化。  

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