您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
只測試了待機(jī)模式,待機(jī)模式實現(xiàn)系統(tǒng)的最低功耗。
原理圖如下,一開始全部焊接了,其中S2用來進(jìn)入待機(jī),S1用來喚醒
測試程序為:
#include "stm32f10x.h"
#include "system_stm32f10x.h"v
oid Sys_Standby(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外設(shè)時鐘
PWR_WakeUpPinCmd(ENABLE); //使能喚醒管腳功能
PWR_EnterSTANDBYMode(); //進(jìn)入待機(jī)(standby)模式
}
//系統(tǒng)進(jìn)入待機(jī)模式
void Sys_Enter_Standby(void)
{
RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //復(fù)位所有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上拉輸入,對應(yīng)按鍵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();
}
}
}
電流的測量用的是萬用表,串聯(lián)在電源的輸入端,也就是說,實際測量的電流值為電路板消耗電流。電機(jī)、喇叭、OLED-0.9寸屏這些外部器件均未接入。
系統(tǒng)時鐘選擇外部8M晶振,電源為電腦USB口取電,上電后按下S2,進(jìn)入待機(jī)模式,按下S1喚醒。
上電, 正常運行電流7.9mA,待機(jī)電流205uA,待機(jī)電流比較大;
取下DS1302芯片,正常運行電流7.9mA,待機(jī)電流10.5uA;
再取下DS1302芯片的三個上拉電阻,和上面一樣,沒變化;(看來即便有外部上拉,在待機(jī)模式時也是不用管的,只是不知道這上拉電阻接到了外圍芯片上對外圍電路的功耗有怎樣的影響。)
再取下AT24C02芯片模塊,正常電流7.7mA,待機(jī)電流10.5uA;
再取下L9110S電機(jī)驅(qū)動芯片,正常電流7.7mA,待機(jī)電流10.5uA,沒有變化;
再取下SK040G語音芯片,就剩電源和按鍵部分了,正常電流7.6mA,待機(jī)7.4uA。
修改程序,開RTC后(選外部32.768k晶振),待機(jī)時電流為8.6uA。
裝上OLED 0.9寸小128x64液晶屏測試了下,待機(jī)時120uA,此時若取下液晶屏,電流由120uA變到正常待機(jī)的7.4uA。
待機(jī)模式可實現(xiàn) STM32的最低功耗。該模式是在 CM3 深睡眠模式時關(guān)閉電壓調(diào)節(jié)器,整個 1.8V 供電區(qū)域被斷電,PLL、HSI和 HSE振蕩器也被斷電,SRAM和寄存器內(nèi)容丟失,僅備份的寄存器和待機(jī)電路維持供電。
從待機(jī)模式喚醒后的代碼執(zhí)行等同于復(fù)位后的執(zhí)行(采樣啟動模式引腳,讀取復(fù)位向量等),電源控制/狀態(tài)寄存器(PWR_CSR)將會指示內(nèi)核由待機(jī)狀態(tài)退出。
待機(jī)模式下的輸入/輸出端口狀態(tài)
在待機(jī)模式下,所有的I/O引腳處于高阻態(tài),除了以下的引腳:
● 復(fù)位引腳(始終有效)
● 當(dāng)被設(shè)置為防侵入或校準(zhǔn)輸出時的TAMPER引腳
● 被使能的喚醒引腳
<既然進(jìn)入待機(jī)模式后各IO處于高阻態(tài),那么所謂的IO口進(jìn)待機(jī)前需配置為AIN、或者弱上拉弱下拉模式的,其實都沒必要了,但看其他的網(wǎng)絡(luò)文章有說需配置的,我也是弱上拉、弱下拉、模擬輸入、浮空輸入都測試了下,對于最小系統(tǒng),沒看到待機(jī)電流有什么變化,也測試了下開串口、SPI口什么的,對待機(jī)電流都沒有發(fā)現(xiàn)影響,文檔上“進(jìn)入待機(jī)模式后,只有備份的寄存器和待機(jī)電路維持供電,其他部分沒有供電”,那自然不會產(chǎn)生功耗,進(jìn)入待機(jī)模式前就沒必要配置。對外圍硬件電路進(jìn)入待機(jī)前根據(jù)情況才看是否有設(shè)置外圍芯片工作模式的必要。主芯片進(jìn)入待機(jī)后,管腳都為高阻態(tài),要看這種狀態(tài)對外圍芯片電路會帶來怎樣的影響,如果不合適就要考慮停止模式,在停止模式下,所有的I/O引腳都保持它們在運行模式時的狀態(tài)。>
對于喚醒管腳PA0(WKUP),在寄存器PWR_CSR中的第8位EWUP位有說明:
EWUP:使能WKUP引腳
0: WKUP引腳為通用I/O。 WKUP引腳上的事件不能將CPU從待機(jī)模式喚醒
1:WKUP引腳用于將CPU從待機(jī)模式喚醒,WKUP引腳被強(qiáng)置為輸入下拉的配置(WKUP引腳上的上升沿將系統(tǒng)從待機(jī)模式喚醒)
注:在系統(tǒng)復(fù)位時清除這一位。(即系統(tǒng)復(fù)位重啟后該位為0)
也就是說進(jìn)待機(jī)模式后,WKUP自動被設(shè)置為下拉輸入(下拉電阻典型值40K),無需額外配置端口A時鐘及PA0管腳功能。
正常運行時IO口的損耗及響應(yīng)配置:
以下為轉(zhuǎn)載http://blog.csdn.net/beep_/article/details/47975227
I/O模塊損耗:
靜態(tài)損耗:
內(nèi)部上下拉電阻損耗:這部分損耗主要取決于內(nèi)部電阻的大小,一般為了降低內(nèi)部電阻損耗常常需要降低電阻兩端電壓,若引腳為低電壓則采用下拉電阻,若引腳為高電壓則采用上拉電阻。
I/O額外損耗:當(dāng)引腳設(shè)為輸入I/O時,用來區(qū)分電壓高低的斯密特觸發(fā)器電路會產(chǎn)生一部分消耗,為此可將引腳設(shè)為模擬輸入模式。
動態(tài)損耗:對于懸浮的引腳,由于其電壓不穩(wěn)定會產(chǎn)生外部電磁干擾和損耗,因此必須把懸浮引腳設(shè)為模擬模式或輸出模式。
引腳電壓的切換會對外部和內(nèi)部電容負(fù)載產(chǎn)生動態(tài)損耗,其損耗與電壓切換頻率和負(fù)載電容有關(guān)。具體損耗值如下:
在藍(lán)牙、wifi、ZigBee等低功耗組網(wǎng)通信和智能電子設(shè)備開發(fā)過程中,功耗的調(diào)試是至關(guān)重要的一部分,
怎樣簡易的測試功耗以方便我們對功耗的調(diào)試呢,介紹一種萬用表測試整體功耗的方法。
如圖:
萬用表、供電設(shè)備電源、pcb板子串聯(lián)在一起之后,調(diào)整萬用表到測試電流檔,如圖:
這樣板子的整體功耗就顯示在萬用表上了。
低功耗是項目中非常重要的一部分,尤其是對于一些使用電池供電的設(shè)備。
N76E003支持兩種低功耗模式,一種是空閑模式,一種是掉電模式,從字面意思一看就知道如果要最求最低的功耗,一定是需要使用掉電模式。在掉電模式下,作者對當(dāng)前的項目應(yīng)用中測試出來的最低的功耗是5uA,這個值本人認(rèn)為已經(jīng)是非常不錯的。針對N76E003如何實現(xiàn)低功耗談?wù)剛人的經(jīng)驗。
首先肯定是配置掉電模式,一條set_PD語句都可以直接將MCU進(jìn)入到POWER DOWN(掉電模式),如果你準(zhǔn)備讓你的設(shè)備從此不再醒來,只有這一條語句還是可以滿足你的要求的,因為進(jìn)入到POWER DOWN模式之后所有的外設(shè)都關(guān)閉,定時器也不會再跑,如果你無法判斷你是否進(jìn)入到了低功耗模式,那么有一個很簡單的方法,本人使用的是KEIL FOR C51的開發(fā)工具,進(jìn)入到調(diào)試模式,如果成功進(jìn)入到POWER DOWN 模式,那么在調(diào)試窗口中就會不斷的刷新"MCU POWER DOWN"直到將MCU喚醒。
所以現(xiàn)在就該說說喚醒的事情。
N76E003提供了管腳觸發(fā)中斷,可以有管腳高電平中斷觸發(fā),低電平觸發(fā),上升沿觸發(fā),下降沿觸發(fā),但是在使用這個中斷的時候一定需要注意下面的一個問題,如果你需要有多個管腳觸發(fā)中斷,那么你的IO口就一定要選對,因為,N76E003的管腳觸發(fā)必須是在同一個PORT口下才能觸發(fā),這個可以去查看N76E003的管腳中斷的框圖以及PICON寄存器,換句話說,如果需要兩個管腳觸發(fā)中斷,假設(shè)一個是P0.1,一個是P1.0,那么你到底是使能哪一個PORT口呢?回到去看PICON寄存器的PIPS[1:0]兩位,你會發(fā)現(xiàn),怎么會有四種情況,所以,從這里就可以推出,假設(shè)你先使能P0.1再使能P1.0的管腳中斷,最后P0.1的配置就被P1.0覆蓋了。所以,這個地方是需要注意的,尤其是在畫PCB板的時候,需要用到管腳中斷的IO腳,都放在同一個PORT種,比如全部放在P0口。否則之后你只能使用飛線的辦法,并且需要重新改板。
當(dāng)然N76E003還支持其他的一些喚醒,但是作者的項目中一般都只要用到按鍵喚醒和USB充電喚醒,這些都是通過管腳中斷喚醒。
我的低功耗的處理方法;
(1)關(guān)閉BOD,一個是使用clr_BOD;另一個是在下載選項中,將欠壓檢測使能去掉,兩個都做吧。
(2)關(guān)閉ADC,將ADC的使能為關(guān)閉,并且關(guān)閉ADCS位
(3)尋找到功耗最低的IO口配置的方法,首先必須確保IO口的初始的配置能保證你的系統(tǒng)正常的運行,然后在進(jìn)入休眠之前該IO口的配置,并將其賦值為1或者0,這樣說的原因是為什么呢,因為有一些IO口是你需要正常操作的時候必須配置的模式,但是進(jìn)入休眠前可以選擇更加低功耗的方式,這些都是可以根據(jù)你的硬件來進(jìn)行判斷的。但是一定需要注意有上拉電阻的那個IO口嗎,優(yōu)先去設(shè)置這些IO口,然后看靜態(tài)電流的大小。
(4)在喚醒之后第一時間“恢復(fù)現(xiàn)場”,重新初始化最開始的配置。
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08