TI MSPM0L1306 LaunchPad体验09:板载示波器?使用EnergyTrace观察动态功耗变化

x1816   2023-11-11 20:16 楼主

 

EnergyTrace介绍

EnergyTrace是TI用于分析功耗的工具,硬件部分已经集成在LaunchPad上搭载的XDS110调试器里,软件部分集成在CCS集成开发环境里。所以为了观察开发板的动态功耗情况,要求不高的话,就不需要外接万用表或者示波器了。
得由于MSP430等低功耗微控制器的多年发展,EnergyTrace技术也已经很成熟了,官方说明的测量范围和精度如下:
200900l67pyu4u6u6yswsw.png
这个精度用于大部分开发应用已经足够了。
另外EnergyTrace还有个高动态范围(High Dynamic Range)版本EnergyTrace HDR,相当于有2档量程:
200900bkuu7is5iaytyrnh.png
采样率方面,EnergyTrace和EnergyTrace HDR分别有2kSPS和256kSPS,对于一般用途的功耗跟踪完全够用。
200900k27gmj855jb3uzzg.png

EnergyTrace体验

LaunchPad上默认搭载了EnergyTrace的相关硬件,但新款CCS Theia 1.1.0还不支持这个功能(软件里和文档全文搜索都没有找到),需要安装传统版的CCS。
这里用一个pwm呼吸灯程序来测试EnergyTrace,由于LED亮度变化会产生显著的功耗变化,预期会看到和LED呼吸频率相同的功耗变化曲线。
效果视频:
呼吸灯效果演示out

 
(代码见文末)
EnergyTrace可以在CCS的Tools菜单或工具栏上找到:
200900tsxscds47ktsxhkc.png
主界面如下图:
200900siulchnfcbnujs3j.png
需要关注的是界面右上角的一排功能按钮。
第1个红色按钮是总开关;
第2个绿色的三角是启动开关;
第3个是采集时长;
采集时长支持开始和结束的高级触发,是捕获特殊情况的利器:
200900w9hclc4yp4cypdmk.png
200900qinol8b0s4zg05pp.png
采集视频:
EnergyTrace录屏out

 
采集结果:
200900ooh5uss0zkxb2sdb.png
除了功耗、电压、电流的统计值,还贴心的给出了电池供电时,电池的寿命。
电池的类型可在Window-Preferences里设定:
200900slhhfrfebr08blgg.png
瞬时功耗曲线:
200900nfeqfddblzbwgg07.png
能量消耗曲线:
200900ibbzuxppwbrqh8my.png
数据可以导出为CSV文件,便于进一步处理
200900rk42yes11rlrt1pp.png

小结

EnergyTrace配合LaunchPad上板载的XDS110,可以实现动态功耗的测量和统计,为电池供电的应用开发提供了完整的功耗观测方法和软件。期待这套软件系统能尽早移植到CCS Theia里。

完整代码

SysConfig参考代码

/**
 * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
 * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
 */
// @cliArgs --device "MSPM0L130X" --package "VQFN-32(RHB)" --part "Default"
// @cliArgs --board /ti/boards/LP_MSPM0L1306 --rtos nortos

/**
 * Import the modules used in this configuration.
 */
const PWM  = scripting.addModule("/ti/driverlib/PWM", {}, false);
const PWM1 = PWM.addInstance();

/**
 * Write custom configuration values to the imported modules.
 */
PWM1.$name                   = "PWM_0";
PWM1.clockPrescale           = 256;
PWM1.timerCount              = 2000;
PWM1.timerStartTimer         = true;
PWM1.interrupts              = ["CC0_DN_EVENT","LOAD_EVENT"];
PWM1.ccIndex                 = [1];
PWM1.peripheral.$assign      = "TIMG0";
PWM1.PWM_CHANNEL_1.$name     = "ti_driverlib_pwm_PWMTimerCC0";
PWM1.PWM_CHANNEL_1.dutyCycle = 10;

const Board = scripting.addModule("/ti/driverlib/Board", {}, false);

const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL", {}, false);

 

主程序代码

#include "ti_msp_dl_config.h"

int pwm_count = 1800; // initial ccr count based on 10% duty cycle
int dc = 10;          // initialized to 10 % duty cycle
int mode = 1; // 1 = up (will indicate you need to increase dc), 0 = down (will
              // decrease dc)

int main(void) {
  SYSCFG_DL_init();

  NVIC_EnableIRQ(PWM_0_INST_INT_IRQN);
  DL_TimerG_startCounter(PWM_0_INST);

  while (1) {
    __WFI();
  }
}

void PWM_0_INST_IRQHandler(void) {
  switch (DL_TimerG_getPendingInterrupt(PWM_0_INST)) {
  case DL_TIMER_IIDX_LOAD:
    if (dc <= 10) {
      mode = 1;
    } // if reached lowest dc (10%), increase dc
    else if (dc >= 90) {
      mode = 0;
    } // if reached highest dc (90%), decrease dc
    if (mode) {
      pwm_count -= 20;
      dc += 1;
    } // up
    if (!mode) {
      pwm_count += 20;
      dc -= 1;
    } // down
    DL_TimerG_setCaptureCompareValue(PWM_0_INST, pwm_count,
                                     DL_TIMER_CC_1_INDEX); // update ccr1 value
    break;
  default:
    break;
  }
}

 

回复评论 (5)

新款CCS Theia 1.1.0还不支持这个功能(软件里和文档全文搜索都没有找到),需要安装传统版的CCS。

 

比较蹊跷,还需要安装传统版的CCS?哪个传统版本

点赞  2023-11-12 08:22
引用: Jacktang 发表于 2023-11-12 08:22 新款CCS Theia 1.1.0还不支持这个功能(软件里和文档全文搜索都没有找到),需要安装传统版的CCS。 &nbs ...

就叫ccs,基于Eclipse的版本。Theia太新了,这个功能还没集成进去

点赞  2023-11-12 11:25
引用: x1816 发表于 2023-11-12 11:25 就叫ccs,基于Eclipse的版本。Theia太新了,这个功能还没集成进去

原来这样啊,这Theia还真不了解

点赞  2023-11-13 07:28

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

点赞  2023-11-21 15:07

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来


点赞  2023-11-30 18:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复