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.

[参考译文] BOOSTXL-BUCKCONV:表达式窗口未实时更新

Guru**** 2463330 points
Other Parts Discussed in Thread: SFRA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1497399/boostxl-buckconv-expressions-window-not-updating-real-time

器件型号:BOOSTXL-BUCKCONV
主题:SFRA 中讨论的其他器件

工具/软件:

您好:

我尝试使用 BUCKCONV 示例代码自行实现 TCM 功能。 在 ISR 中不使用 runtcm()方法进行调试时、我 可以看到表达式窗口获取更新的实时信息。

但只要我取消 runTcm()方法的注释并开始调试、表达式窗口就根本不会更新。 我认为它会更新一次、因为我可以看到其他表达式中的值、即使启用了连续更新选项、它也不是连续的。

有任何帮助吗?

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

    尊敬的 Mohan:

    您能否提供已添加的 runTCM 方法的源代码或指向从中获取它的链接?

    您能否通过添加 ISR 计数器还是 LED 闪烁来验证 ISR 正在执行? 听起来 runTCM 功能可能存在一些问题

    此致、

    彼得

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

    您好、Peter、

    下面是调用 runTCM 将数据加载到指针空间中的函数

    pragma FUNC_ALWAYS_INLINE (boost_runIsr)
    静态内联 void boost_runIsr (void)

       //
       //记录 ePWM TBCTR 值以供参考。
       //该值有助于测量 ADC ACQPS + ISR 延迟之和。
       //该值还有助于确认已有足够的时间
       //  Vout ADC 转换完成并到达 ADCxRESULT
       //
       boost_isrEnter_ticks = EPWM_getTimeBaseCounterValue (boost_DRV_EPWM_BASE);

       //
       //记录 Vout 的最近一次 ADC 转换
       //
       boost_vOutSensed_pu = boost_HAL_readVout_pu ();

       #if (BOOST_CTL_LOOP == BOOST_CTL_LOOP_OPEN || BOOST_CTL_LOOP_EXT_DUTY)
       #if (BOOST_CTL_MODE == BOOST_CTL_MODE_VMC)
           //
           //确定所需的占空比设置并更新 CMPA
           //
           boost_dutySet_pu = boost_dutySlewed_pu;//(float32_t) 0.1; 如果我们在用户设置中将 boost_DUTY_SET_MIN_PU 设置为0、则所需的一些 boost_DUTY_SET_MIN_PU 将被触发
           boost_HAL_updateSyncBOOSTDuty (boost_dutySet_pu);

           //
           //仅供参考、计算并记录的金额
           //执行 CMPA 影子加载之前的剩余时间。
           //
           boost_logDutyUpdateMargin ();//这正在产生问题、现在正在触发 ewpm、并停止正在读取样本的进一步执行--通过合并 DCL_writeLog 解决 MN 更新问题
       #endif
       #endif

    //   #if (BOOST_CTL_MODE == BOOST_CTL_MODE_VMC)
    //       boost_SFRA_collect (&boost_dutySet_pu、&boost_vOutSensed_pu);
    //   #endif

       boost_vIn[boost_adcSampleIndex] Samples_Volts = boost_HAL_readVin_V ();
       boost_vOut[boost_adcSampleIndex] Samples_Volts = boost_HAL_readVout_V ();
       boost_ill Samples_Amps [boost_adcSampleIndex]= boost_HAL_readFilteredIL_A ();
       boost_dutyInSamples_pu[boost_adcSampleIndex]= boost_HAL_readDuty_pu ();
       boost_adcSampleIndex++;
       IF (BOOST_adcSampleIndex >= BOOST_AVG_ADC_SAMPLES)
       {
           boost_adcSampleIndex = 0;
       }
       //DCL_writeLog (&boost_vOutLogFdlog、boost_HAL_readVout_V ());       这也会产生诸如将裕度设为负值之类的问题、某些事情会触发 EPWM
       DCL_runTCM (&boost_vOutLogTcm、boost_HAL_readVin_V ());
       boost_HAL_clearInterruptFlags();
       boost_isrExit_ticks = EPWM_getTimeBaseCounterValue (boost_DRV_EPWM_BASE);
    }

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

    我添加了基于 ADC 采样率200kHz 以1秒的速度使 LED4闪烁的方法、当我取消注释 DLC_runTCM (XXX、XX)行时、LED 完全不会闪烁。 这意味着 boost_runIsr 未运行到完成、因为此时不会发生外设采样、因为未清除在此行之后写入的 ADC 中断。

    为什么将 DLC_runTCM()保持为 BOOST_runIsr 会停止我的 ISR 执行、从而不会清除中断以在 ADC 上进行进一步采样?

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

    更新:我发现在 EINT 和 ERTM 行之前和之后、我的 main.c 文件中缺少 EALLOW 和 EDIS 行。 现在我可以看到 ISR 正在执行、不再被 DLC_runTcm()方法阻止。

    我能知道到底发生了什么事吗? 我觉得我不允许访问像 INT 和 RTM 这样的受保护的寄存器,我无法启用它们,所以出现了问题,我的 DLC_runTCM ()做了一些意外的事情。 如果我错了彼得,你能纠正我吗?

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

    尊敬的 Mohan:

    是的、因为您已经看到 EINT 是主配置循环的必需部分、有必要对其进行定义。 全局中断屏蔽(INTM)在复位时启用、因此此调用将清除 INTM 并启用 CPU 中断。 此外、还需要 ERTM、因为它使 CPU 能够接收中断、即使在暂停 CPU 以进行调试时也是如此。

    正确、这些是受保护的寄存器、您必须在定义 EINT/ERTM/IER 之前调用 EALLOW、否则这些调用将不起作用、并且不会启用中断。 之后调用 EDIS 会锁定这些受保护的寄存器

    此致、

    彼得