打印
[活动专区]

【AT-START-L021测评】基于深度睡眠的低功耗测试

[复制链接]
115|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小宏121|  楼主 | 2024-12-27 16:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小宏121 于 2024-12-27 16:46 编辑

雅特力的AT-START-L021开发板拿到手是这样的,打算测试一下这MCU的低功耗是否和手册描述的一样

板子上供电有两种电压,分别是1.8V和3.3V,通过排针JP2选择
测试时把功耗分析仪接到JP2的2号脚就可以了


根据MCU AT32L021手册描述,在1.71V的时候功耗能达到8.54uA,就选择1.8V来测试

下面就开始测试

1、从雅特力官网下载资料
AT32L021的资料网址:https://www.arterytek.com/cn/product/AT32L021.jsp#Resource
我选择用Keil MDK来调试代码,所以下载好pack和官方例程就够了



2、测试官方的例程
这里我选择串口1低功耗唤醒的例程,路径如下
AT32L021_Firmware_Library_V2.0.6_ZH\project\at_start_l021\examples\pwc\deepsleep_usart1
deepsleep_usart1例程的内容:上电后LED会点亮,延时300ms熄灭LED再给串口1发送字符串、从外置时钟源切换到内置高速时钟源、减少内置LDO电压为1.0V后就进入低功耗模式的深度睡眠模式,之后如果串口1的RX有数据到来就触发唤醒,然后LED亮起、提高内置LDO电压为1.2V,恢复为外置时钟源后再打印字符串。
int main(void)
{
  __IO uint32_t index = 0;
  __IO uint32_t systick_index = 0;
  
  /* enable pwc clock */
  crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);

  /* congfig the system clock */
  system_clock_config();

  /* init at start board */
  at32_board_init();

  /* turn on the led light */
  at32_led_on(LED2);
  at32_led_on(LED3);
  at32_led_on(LED4);
  
  delay_ms(300);

  /* config usart1 */
  usart1_config(2400);
  usart1_wakeup_config();

  printf("exit deepsleep mode by usart1 rdbf interrupt \r\n");
  while(1)
  {
    at32_led_off(LED2);
    printf("now enter deepsleep mode \r\n");

    /* make sure that no usart receiver is ongoing */
    while(usart_flag_get(USART1, USART_OCCUPY_FLAG) == SET)
    {
    }
   
    /* select system clock source as hick before ldo set */
    crm_sysclk_switch(CRM_SCLK_HICK);

    /* wait till hick is used as system clock source */
    while(crm_sysclk_switch_status_get() != CRM_SCLK_HICK)
    {
    }
   
    /* reduce ldo before enter deepsleep mode */
    pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V0);

    while(usart_flag_get(USART1, USART_TDC_FLAG) == RESET)
    {
    }
  
  /* congfig the voltage regulator mode.only used with deep sleep mode */
    pwc_voltage_regulate_set(PWC_REGULATOR_LOW_POWER);
   
    /* enter deep sleep mode */
    pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);

    /* turn on the led light */
    at32_led_on(LED2);
   
    /* resume ldo before system clock source enhance */
    pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V2);
   
    /* wake up from deep sleep mode, congfig the system clock */
    system_clock_recover();
   
    /* wake up from sleep mode */
    printf("\r\nnow exit deepsleep mode by usart1 rdbf interrupt \r\n");
    printf("usart1_rdne_data = 0x%x\r\n", usart1_index);
    delay_ms(300);
  }
}
该例程实测进入低功耗时的功耗如图,电流是258uA,远远大于手册中描述的8.54uA

于是我查看手册
MCU进入低功耗深度睡眠模式时,手册描述了LDO、PLL、内部和外部时钟源都会关闭,但是GPIO的模式保持进入深度睡眠模式之前不变,
而且258uA远大于运行模式时和睡眠模式PLL开启时的电流,所以可以确定MCU已经进入低功耗深度睡眠模式了,那么只剩下GPIO配置的原因导致功耗偏高。




运行模式时的电流


睡眠模式PLL开启时的电流


3、修改官方例程
在进入深度睡眠模式之前,把GPIO配置为模拟输入可以最省电,这里我直接把GPIO和串口配置的代码都屏蔽了



重新烧录,1.8V供电测试,测试功耗已经和手册描述的8.54uA十分接近

至此,测评结束。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

18

帖子

0

粉丝