реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> stm32l100 discovery, standby mode, не могу добиться заявленного токопотребления
dima311043
сообщение May 31 2017, 11:59
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 31-05-17
Пользователь №: 97 409



Всем привет.

Работаю с отладочной платой STM32L100 Discovery. Хочу добиться заявленного потребления ~0.3 uA в режиме standby. Делаю все как в примере для библиотеки Standard Peripheral Library с сайта ST, пример Current consumption из папки PWR для замера потребляемого тока. В итоге получаю потребление в этом режиме ~275uA. Ток меряю на выводах Idd на плате. Бьюсь уже довольно давно, много чего перепробовал, но меньшего значения, чем в том коде что идет ниже, добиться не удалось. Что я могу делать не так? Помогите, кто сталкивался. На всякий случай прилагаю еще принципиалку платы и библиотечный пример.
CODE

GPIO_InitTypeDef GPIO_InitStructure;

int main(void)
{
/* Enable PWR APB1 Clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);

/* Reset RTC Domain */
RCC_RTCResetCmd(ENABLE);
RCC_RTCResetCmd(DISABLE);

/* Configure Key Button*/
/* Enable the BUTTON Clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

/* Configure Button pin as input */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Wait Until Key button pressed */
while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) == RESET)
{
}
/* Wait Until Key button pressed */
while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) != RESET)
{
}

/* Enable Ultra low power mode */
PWR_UltraLowPowerCmd(ENABLE);

/* Clear PWR WakeUp flag */
PWR_ClearFlag(PWR_FLAG_WU);

/* Enable WKUP pin 1 */
PWR_WakeUpPinCmd(PWR_WakeUpPin_1, ENABLE);

/* Request to enter STANDBY mode */
PWR_EnterSTANDBYMode();
while(1){}
}

Прикрепленный файл  CurrentConsumption.rar ( 20.88 килобайт ) Кол-во скачиваний: 25

Прикрепленный файл  disco.pdf ( 793.14 килобайт ) Кол-во скачиваний: 47
Go to the top of the page
 
+Quote Post
Obam
сообщение May 31 2017, 12:58
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



http://olegart.ru/wordpress/2016/12/24/4965/ - не поможет?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 31 2017, 16:33
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Еще можно обратить внимание на неиспользуемые выводы. После включения питания они настроены на ввод без подтяжек, при этом под воздействием наводок и утечек потенциал на них стремится к половине питания, что приводит к протеканию сквозных токов во входных каскадах. Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку. Также стоит помнить о том, что в корпуса с разным количеством выводов пакуются одни и те же кристаллы и если в вашем корпусе нет, скажем, ноги PC7 - это не значит, что входных цепей этой ноги нет на кристалле. То есть требование перевести на выход и вывести ноль относится и к этой ноге тоже. Но бывают и обратные ситуации - если какого-то порта в данном корпусе нет целиком, то его может не быть и на кристалле. Тогда попытка записи в этот порт приведет к вылету в исключение и трогать этот порт не нужно.
Еще есть некоторые выводы, которые в режиме сна автоматически переводятся в аналоговый режим и при отсутствии внешних цепей начинают потреблять тот самый сквозной ток. Помогал коллеге выжать все возможное из STM32L151, последние микроамперы выжали принудительно заземлив снаружи неиспользуемый вход, если память не изменяет, низкочастотного кварца.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
dima311043
сообщение May 31 2017, 17:09
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 31-05-17
Пользователь №: 97 409



Цитата

Нет. На дискавери, правда, не JTAG, а SWD. Пробовал полностью отключать интерфейс программирования от целевого контроллера: на токопотребление это не оказывает влияния, либо оказывает незначительно.

Цитата
Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку.

В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал. Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны. Завтра попробую ваш вариант и отпишусь о результатах. Хорошо, что у вас есть опыт работы с этими камнями, я тоже хочу выжать из мк все возможноеsm.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 31 2017, 18:44
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (dima311043 @ May 31 2017, 20:09) *
В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал.
Нельзя верить всему, что пишут в интернете sm.gif
QUOTE (dima311043 @ May 31 2017, 20:09) *
Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны.
Да, в самом деле, у этого процессора так (но не для всех выводов, поэтому мы с входом кварца и боролись). Может мой совет когда-нибудь пригодится вам в режиме stop. У LPC11xx порты свое состояние сохраняли. Или я его тоже в stop ронял...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SSVA
сообщение May 31 2017, 18:45
Сообщение #6





Группа: Новичок
Сообщений: 2
Регистрация: 27-08-15
Пользователь №: 88 163



__WFI(); // Попробуйте добавить перед while();
Go to the top of the page
 
+Quote Post
dima311043
сообщение Jun 1 2017, 06:07
Сообщение #7





Группа: Новичок
Сообщений: 3
Регистрация: 31-05-17
Пользователь №: 97 409



Цитата
__WFI(); // Попробуйте добавить перед while();


Эта инструкция внутри функции PWR_EnterSTANDBYMode();

Проблема решена. Ток хавали резисторы в цепи BOOT0. Выпаял резисторы R26 и R27 (см. принципиалку), ногу BOOT0 завел на землю. Токопотребление в режиме Standby упало до 1 мкА, точнее померять нет возможности. Всем отписавшимся в теме спасибо.
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Jun 1 2017, 09:10
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Цитата(Сергей Борщ @ May 31 2017, 21:44) *
Нельзя верить всему, что пишут в интернете sm.gif

Это пишут не просто в интернете, а в документации на контроллеры - http://www.st.com/content/ccc/resource/tec....DM00033348.pdf
Цитата
To set the device in the lowest possible power mode, all pins should be configured as analog
input (AIN), because in analog configuration the Schmitt trigger input is deactivated,
providing zero consumption for each I/O pin

Дока на STM32F2, но предположу, что это актуально и для STM32L1, по крайней мере у меня в проекте сконфигурировано именно так и потребление соответствует заявленному.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016