12下一页
返回列表 发新帖我要提问本帖赏金: 60.00元(功能说明)

[活动专区] 【AT-START-L021测评】基于深度睡眠的低功耗测试

[复制链接]
 楼主| 小宏121 发表于 2024-12-27 16:40 | 显示全部楼层 |阅读模式
本帖最后由 小宏121 于 2024-12-30 09:42 编辑

雅特力的AT-START-L021开发板拿到手是这样的,打算测试一下这MCU的低功耗是否和手册描述的一样
image.png
板子上供电有两种电压,分别是1.8V和3.3V,通过排针JP2选择
测试时把功耗分析仪接到JP2的2号脚就可以了
image (1).png
image (2).png
根据MCU AT32L021手册描述,在1.71V的时候功耗能达到8.54uA,就选择1.8V来测试
image (3).png
下面就开始测试

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


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,恢复为外置时钟源后再打印字符串。
  1. int main(void)
  2. {
  3.   __IO uint32_t index = 0;
  4.   __IO uint32_t systick_index = 0;
  5.   
  6.   /* enable pwc clock */
  7.   crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);

  8.   /* congfig the system clock */
  9.   system_clock_config();

  10.   /* init at start board */
  11.   at32_board_init();

  12.   /* turn on the led light */
  13.   at32_led_on(LED2);
  14.   at32_led_on(LED3);
  15.   at32_led_on(LED4);
  16.   
  17.   delay_ms(300);

  18.   /* config usart1 */
  19.   usart1_config(2400);
  20.   usart1_wakeup_config();

  21.   printf("exit deepsleep mode by usart1 rdbf interrupt \r\n");
  22.   while(1)
  23.   {
  24.     at32_led_off(LED2);
  25.     printf("now enter deepsleep mode \r\n");

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

  33.     /* wait till hick is used as system clock source */
  34.     while(crm_sysclk_switch_status_get() != CRM_SCLK_HICK)
  35.     {
  36.     }
  37.    
  38.     /* reduce ldo before enter deepsleep mode */
  39.     pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V0);

  40.     while(usart_flag_get(USART1, USART_TDC_FLAG) == RESET)
  41.     {
  42.     }
  43.   
  44.   /* congfig the voltage regulator mode.only used with deep sleep mode */
  45.     pwc_voltage_regulate_set(PWC_REGULATOR_LOW_POWER);
  46.    
  47.     /* enter deep sleep mode */
  48.     pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);

  49.     /* turn on the led light */
  50.     at32_led_on(LED2);
  51.    
  52.     /* resume ldo before system clock source enhance */
  53.     pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V2);
  54.    
  55.     /* wake up from deep sleep mode, congfig the system clock */
  56.     system_clock_recover();
  57.    
  58.     /* wake up from sleep mode */
  59.     printf("\r\nnow exit deepsleep mode by usart1 rdbf interrupt \r\n");
  60.     printf("usart1_rdne_data = 0x%x\r\n", usart1_index);
  61.     delay_ms(300);
  62.   }
  63. }
该例程实测进入低功耗时的功耗如图,电流是258uA,远远大于手册中描述的8.54uA
image (5).png
于是我查看手册
MCU进入低功耗深度睡眠模式时,手册描述了LDO、PLL、内部和外部时钟源都会关闭,但是GPIO的模式保持进入深度睡眠模式之前不变,
而且258uA远小于运行模式时和睡眠模式PLL开启时的电流,所以可以确定MCU已经进入低功耗深度睡眠模式了,那么只剩下GPIO配置的原因导致功耗偏高。
image (6).png
image (7).png
image (8).png

运行模式时的电流
image (9).png

睡眠模式PLL开启时的电流
image (10).png

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

重新烧录,1.8V供电测试,测试功耗已经和手册描述的8.54uA十分接近
image (13).png
至此,测评结束。

打赏榜单

ArteryMCU 打赏了 50.00 元 2025-01-09
理由:[L021开发板评测活动]内容优质

ArterySW 打赏了 10.00 元 2025-01-07
理由:作品优秀

xhackerustc 发表于 2024-12-28 22:10 | 显示全部楼层
赞,我用万用表测deepsleep模式电流0.13mA,还没细查比官方数据差的原因,从你这里有启发
averyleigh 发表于 2025-1-3 20:52 | 显示全部楼层
详细介绍了AT-START-L021开发板及其OLED显示功能,涵盖了硬件规格、软件配置和实际操作等多个方面。
abotomson 发表于 2025-1-3 22:20 | 显示全部楼层
作者分享了具体的资源链接和所需下载的文件,如Keil MDK的pack和官方例程,这大大简化了其他开发者复现测试过程的工作。
jonas222 发表于 2025-1-3 23:52 | 显示全部楼层
依据 AT32L021 手册描述,对不同电压下的功耗进行了分析
linfelix 发表于 2025-1-4 02:58 | 显示全部楼层
详细说明了供电电压的选择和功耗分析仪的连接方式
yorkbarney 发表于 2025-1-4 07:38 | 显示全部楼层
内容涉及较多技术细节,但作者用通俗易懂的语言进行了讲解,使得即使是初学者也能轻松理解。
lzmm 发表于 2025-1-5 15:55 | 显示全部楼层
帖子为读者提供了详细的操作步骤和测试方法,无论是硬件连接还是软件调试,都能让读者快速上手。作者在介绍例程时,不仅描述了例程的功能,还分享了测试过程中的注意事项和经验,使读者能够更好地进行测试和开发工作。
alvpeg 发表于 2025-1-5 18:03 | 显示全部楼层
对官方例程的介绍详细且具体,如串口 1 低功耗唤醒例程,描述了其功能:上电后 LED 点亮,延时 300ms 熄灭 LED,发送字符串,切换到内置高速时钟源,降低内置 LDO 电压进入低功耗模式深度睡眠,当串口 1RX 有数据到来时触发唤醒,LED 亮起,提高内置 LDO 电压恢复为外置时钟源并打印字符串。这使得读者能够快速了解例程的功能和实现过程,对实际应用具有很大的帮助。
tifmill 发表于 2025-1-5 19:15 | 显示全部楼层
对于开发低功耗应用具有重要的指导意义。
backlugin 发表于 2025-1-7 15:49 | 显示全部楼层
介绍了板子上供电电压的情况,包括两种电压(1.8V 和 3.3V)以及通过排针 JP2 进行选择的方式,这对于读者了解硬件环境和进行相关测试至关重要。同时,明确指出测试时将功耗分析仪接到 JP2 的 2 号脚,为读者提供了实际操作的指导。
dspmana 发表于 2025-1-7 19:37 | 显示全部楼层
介绍了测试前的准备工作,包括下载必要的软件和例程,以及如何配置开发环境
earlmax 发表于 2025-1-7 22:41 | 显示全部楼层
涉及到从外置时钟源切换到内置高速时钟源、降低内置 LDO 电压等技术细节
sdlls 发表于 2025-1-8 01:47 | 显示全部楼层
选择了串口1低功耗唤醒的例程进行测试,这个实例不仅展示了AT32L021的低功耗特性,还体现了其在实际应用中的唤醒机制。
rosemoore 发表于 2025-1-8 08:27 | 显示全部楼层
如何选择供电电压、如何连接功耗分析仪以及如何下载和使用官方例程
药无尘 发表于 2025-1-8 15:57 | 显示全部楼层
xhackerustc 发表于 2024-12-28 22:10
赞,我用万用表测deepsleep模式电流0.13mA,还没细查比官方数据差的原因,从你这里有启发 ...

应该是有IO漏电,,没处理好
我喜欢打游戏 发表于 2025-1-8 15:59 | 显示全部楼层
烧录口会不会漏电,都屏蔽会不会没法烧录
xhackerustc 发表于 2025-1-8 19:28 | 显示全部楼层
我喜欢打游戏 发表于 2025-1-8 15:59
烧录口会不会漏电,都屏蔽会不会没法烧录

启动前加个2s~5s的延时
yeates333 发表于 2025-1-9 20:58 | 显示全部楼层
对于初学者来说,这样的详细介绍非常有帮助,能够快速了解和上手这款开发板。
pl202 发表于 2025-1-11 15:56 | 显示全部楼层
高质量的资源,对于那些对AT32L021微控制器感兴趣或者正在寻找相关测试指导的读者来说,是非常有价值的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝

6

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部