低功耗板子测试功耗的方法

只测试了待机模式,待机模式实现系统的最低功耗。 
原理图如下,一开始全部焊接了,其中S2用来进入待机,S1用来唤醒 
这里写图片描述

测试程序为:

#include "stm32f10x.h"
#include "system_stm32f10x.h"v

oid Sys_Standby(void)
{  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟
    PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能
    PWR_EnterSTANDBYMode();   //进入待机(standby)模式          
}

//系统进入待机模式
void Sys_Enter_Standby(void)
{            
    RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //复位所有IO口,屏蔽这条语句也没有看到什么影响
    Sys_Standby();
}

void IO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PB6上拉输入,对应按键S2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);  
}

int main()
{
    IO_Init();
    while(1)
    {
        if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) == 0)
        {
            Sys_Enter_Standby();
        }
    }
}

电流的测量用的是万用表,串联在电源的输入端,也就是说,实际测量的电流值为电路板消耗电流。电机、喇叭、OLED-0.9寸屏这些外部器件均未接入。 
系统时钟选择外部8M晶振,电源为电脑USB口取电,上电后按下S2,进入待机模式,按下S1唤醒。 
上电, 正常运行电流7.9mA,待机电流205uA,待机电流比较大; 
取下DS1302芯片,正常运行电流7.9mA,待机电流10.5uA; 
再取下DS1302芯片的三个上拉电阻,和上面一样,没变化;(看来即便有外部上拉,在待机模式时也是不用管的,只是不知道这上拉电阻接到了外围芯片上对外围电路的功耗有怎样的影响。) 
再取下AT24C02芯片模块,正常电流7.7mA,待机电流10.5uA; 
再取下L9110S电机驱动芯片,正常电流7.7mA,待机电流10.5uA,没有变化; 
再取下SK040G语音芯片,就剩电源和按键部分了,正常电流7.6mA,待机7.4uA。 
修改程序,开RTC后(选外部32.768k晶振),待机时电流为8.6uA。 
装上OLED 0.9寸小128x64液晶屏测试了下,待机时120uA,此时若取下液晶屏,电流由120uA变到正常待机的7.4uA。

待机模式可实现 STM32的最低功耗。该模式是在 CM3 深睡眠模式时关闭电压调节器,整个 1.8V 供电区域被断电,PLL、HSI和 HSE振荡器也被断电,SRAM和寄存器内容丢失,仅备份的寄存器和待机电路维持供电。

从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚,读取复位向量等),电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。

待机模式下的输入/输出端口状态 
在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚: 
● 复位引脚(始终有效) 
● 当被设置为防侵入或校准输出时的TAMPER引脚 
● 被使能的唤醒引脚 
<既然进入待机模式后各IO处于高阻态,那么所谓的IO口进待机前需配置为AIN、或者弱上拉弱下拉模式的,其实都没必要了,但看其他的网络文章有说需配置的,我也是弱上拉、弱下拉、模拟输入、浮空输入都测试了下,对于最小系统,没看到待机电流有什么变化,也测试了下开串口、SPI口什么的,对待机电流都没有发现影响,文档上“进入待机模式后,只有备份的寄存器和待机电路维持供电,其他部分没有供电”,那自然不会产生功耗,进入待机模式前就没必要配置。对外围硬件电路进入待机前根据情况才看是否有设置外围芯片工作模式的必要。主芯片进入待机后,管脚都为高阻态,要看这种状态对外围芯片电路会带来怎样的影响,如果不合适就要考虑停止模式,在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。>

对于唤醒管脚PA0(WKUP),在寄存器PWR_CSR中的第8位EWUP位有说明: 
EWUP:使能WKUP引脚 
0: WKUP引脚为通用I/O。 WKUP引脚上的事件不能将CPU从待机模式唤醒 
1:WKUP引脚用于将CPU从待机模式唤醒,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模式唤醒) 
注:在系统复位时清除这一位。(即系统复位重启后该位为0) 
也就是说进待机模式后,WKUP自动被设置为下拉输入(下拉电阻典型值40K),无需额外配置端口A时钟及PA0管脚功能。

正常运行时IO口的损耗及响应配置: 
以下为转载http://blog.csdn.net/beep_/article/details/47975227 
I/O模块损耗: 
静态损耗: 
内部上下拉电阻损耗:这部分损耗主要取决于内部电阻的大小,一般为了降低内部电阻损耗常常需要降低电阻两端电压,若引脚为低电压则采用下拉电阻,若引脚为高电压则采用上拉电阻。 
I/O额外损耗:当引脚设为输入I/O时,用来区分电压高低的斯密特触发器电路会产生一部分消耗,为此可将引脚设为模拟输入模式。 
动态损耗:对于悬浮的引脚,由于其电压不稳定会产生外部电磁干扰和损耗,因此必须把悬浮引脚设为模拟模式或输出模式。 
引脚电压的切换会对外部和内部电容负载产生动态损耗,其损耗与电压切换频率和负载电容有关。具体损耗值如下: 
这里写图片描述

在蓝牙、wifi、ZigBee等低功耗组网通信和智能电子设备开发过程中,功耗的调试是至关重要的一部分,

怎样简易的测试功耗以方便我们对功耗的调试呢,介绍一种万用表测试整体功耗的方法。

 

如图:

 

万用表、供电设备电源、pcb板子串联在一起之后,调整万用表到测试电流档,如图:

 

这样板子的整体功耗就显示在万用表上了。

 

 低功耗是项目中非常重要的一部分,尤其是对于一些使用电池供电的设备。

    N76E003支持两种低功耗模式,一种是空闲模式,一种是掉电模式,从字面意思一看就知道如果要最求最低的功耗,一定是需要使用掉电模式。在掉电模式下,作者对当前的项目应用中测试出来的最低的功耗是5uA,这个值本人认为已经是非常不错的。针对N76E003如何实现低功耗谈谈个人的经验。

    首先肯定是配置掉电模式,一条set_PD语句都可以直接将MCU进入到POWER DOWN(掉电模式),如果你准备让你的设备从此不再醒来,只有这一条语句还是可以满足你的要求的,因为进入到POWER DOWN模式之后所有的外设都关闭,定时器也不会再跑,如果你无法判断你是否进入到了低功耗模式,那么有一个很简单的方法,本人使用的是KEIL FOR C51的开发工具,进入到调试模式,如果成功进入到POWER DOWN 模式,那么在调试窗口中就会不断的刷新"MCU POWER DOWN"直到将MCU唤醒。

    所以现在就该说说唤醒的事情。

    N76E003提供了管脚触发中断,可以有管脚高电平中断触发,低电平触发,上升沿触发,下降沿触发,但是在使用这个中断的时候一定需要注意下面的一个问题,如果你需要有多个管脚触发中断,那么你的IO口就一定要选对,因为,N76E003的管脚触发必须是在同一个PORT口下才能触发,这个可以去查看N76E003的管脚中断的框图以及PICON寄存器,换句话说,如果需要两个管脚触发中断,假设一个是P0.1,一个是P1.0,那么你到底是使能哪一个PORT口呢?回到去看PICON寄存器的PIPS[1:0]两位,你会发现,怎么会有四种情况,所以,从这里就可以推出,假设你先使能P0.1再使能P1.0的管脚中断,最后P0.1的配置就被P1.0覆盖了。所以,这个地方是需要注意的,尤其是在画PCB板的时候,需要用到管脚中断的IO脚,都放在同一个PORT种,比如全部放在P0口。否则之后你只能使用飞线的办法,并且需要重新改板。

    当然N76E003还支持其他的一些唤醒,但是作者的项目中一般都只要用到按键唤醒和USB充电唤醒,这些都是通过管脚中断唤醒。

我的低功耗的处理方法;

(1)关闭BOD,一个是使用clr_BOD;另一个是在下载选项中,将欠压检测使能去掉,两个都做吧。

(2)关闭ADC,将ADC的使能为关闭,并且关闭ADCS位

(3)寻找到功耗最低的IO口配置的方法,首先必须确保IO口的初始的配置能保证你的系统正常的运行,然后在进入休眠之前该IO口的配置,并将其赋值为1或者0,这样说的原因是为什么呢,因为有一些IO口是你需要正常操作的时候必须配置的模式,但是进入休眠前可以选择更加低功耗的方式,这些都是可以根据你的硬件来进行判断的。但是一定需要注意有上拉电阻的那个IO口吗,优先去设置这些IO口,然后看静态电流的大小。

(4)在唤醒之后第一时间“恢复现场”,重新初始化最开始的配置。

posted on 2018-08-19 10:55  张凌001  阅读(12006)  评论(4编辑  收藏  举报

导航