2015年、我报告了 EnergyTrace 在测量的功率水平突然下降时产生误导性电源跟踪的问题。 当时我认为这是一个 CCS 错误、因此在 CCS 论坛中报告了该错误[1]。
再次研究后、结果发现原因不在 CCS 本身中、而是它使用的仿真器驱动程序(MSPDS 和 XDS emupack)[2]。 这已通过直接使用独立于 CCS 的 MSPDS 驱动程序在独立 Energytrace 工具中重现问题得到确认。
在检查开源 MSPDS 驱动程序并发现导致误导性输出的错误后、我将在这里报告它。
本质上、使用的滤波算法会输出正确的电流值、但会将其与错误的时间戳相关联。 对于高功率情况、这表示为不可察觉的相移。 但是、当功率水平突然下降时、高读数会"保持"相当长的时间;可能长达1秒。
为了演示此问题、我根据开源包 v3.13.000.001定制了 MSPDS 驱动程序。 这包括额外的仪表代码、用于在同一输入数据上运行两个 Energytrace 数据处理器、并将每个处理器的结果保存为单独的 CSV 文件。 使用此功能、我捕获了原始处理算法的输出以及我修改过的版本、以生成更精确的输出。
下面的走线显示了一个 MSP430G2固件的捕捉、此固件在 LPM3中以0.5Hz 的频率使一个 LED 闪烁。 硬件和固件已配置为在 LED 熄灭时尽可能降低功耗。 这样做会使误差明显得多。
以下是原始 EnergyTrace 处理代码报告的跟踪:
此图表应显示0.5Hz 的方波、但当电流测量值下降到接近零时、电流测量值会"卡住"较高的水平。
所发生的情况是、滤波器算法等待从直流/直流转换器收集足够的脉冲、然后再对其求平均值。 因此、它会使用它计算的最后一个电流值保留输出记录。 当它最终计算一个新的当前值时、它应该应用的时间戳已经用之前的当前值报告。
如果平均值计算是在固定的时间长度内执行的、但它是在设定数量的直流/直流转换器脉冲上执行的、则这是不明显的。 在极低的功率水平下、平均周期可以覆盖多达1秒。 这就是为什么这些脉冲的后沿扩展到如此程度的原因。
另请注意、在处理足够的输入数据以计算实际值之前、初始电流报告为零。 因此、当测量以低功耗开始时、CCS 通常显示最小功率/电流为零。
以下是我的更新版本的输出:
该版本的算法会缓冲记录、直到计算出相关的电流值。 过滤算法与原始算法完全相同、但当前值通过实际用于计算它们的记录的时间戳进行报告。
您可以看到、由于使用了重滤波、仍然存在一些微小的误差、但修改后的版本更接近真正的电流测量。 它还正确报告初始记录的非零电流。
很明显、这表明问题不是 EnergyTrace 方法中的基本不准确性或所用滤波方法的限制。 相反、它是滤波方法实现中的一个错误。
理想情况下、TI 会在 MSPDS 和 XDS emupack 中修复此问题、因为前者仅为开源。
此外、我认为在驱动器中有一个"原始输出"选项会更好。 这将向应用报告直流/直流脉冲计数、并提供获取能量和电流所需的校准表。 这样、应用程序就能够根据使用情况尽可能多或少地进行滤波。
[1] CCS 论坛中的原始报告: https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/p/448872/1621699#1621699
[2]包含更新信息的最近主题: https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/717330

