Перейти к содержанию
    

STM32L152CB Режимы пониженного энергопотребления

Всем привет!

Ковыряю режимы пониженного энергопотребления. Как-то странно потребляет контроллер. В обычном режиме (Run) потребление примерно 8.5мА, что уже слишком много. Так как в даташите написано 1%20(10).jpg. Контроллер по умолчанию при старте работает на частоте 2.097 МГц, так что многовато получается.

 

Плата своя, не отладочная. Всё что подходило к контроллеру отпаял. То есть сейчас к нему подходит только питание, остальные ножки висят в воздухе. В итоге отпаял даже конденсаторы по питанию. Когда вхожу в режим пониженного энергопотребления, то потребление уменьшается, но не намного:

Режим Sleep 7.7 мА

Режимы Stop и Standby оба по 6.16 мА

 

С ножками производил разные манипуляции. Ну, в основном советуют перевести все на вход или на аналоговый вход и подтянуть к земле:

 

void Gpio_Disable()
{
    GPIO_InitTypeDef GpioStructure;

                                                //---PORTA---//

    // Clocks for GPIO
  RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH , ENABLE );


    //
    GpioStructure.GPIO_Pin = GPIO_Pin_All;
    GpioStructure.GPIO_Mode = GPIO_Mode_AIN;          //   GPIO_Mode_IN  GPIO_Mode_AN
    GpioStructure.GPIO_Speed = GPIO_Speed_400KHz;     //GPIO_Speed_400KHz
    GpioStructure.GPIO_OType = GPIO_OType_PP;
    GpioStructure.GPIO_PuPd = GPIO_PuPd_DOWN;    //GPIO_PuPd_DOWN  GPIO_PuPd_NOPULL
    
    GPIO_Init(GPIOA, &GpioStructure);
    GPIO_Init(GPIOB, &GpioStructure);
    GPIO_Init(GPIOC, &GpioStructure);
    GPIO_Init(GPIOD, &GpioStructure);
    GPIO_Init(GPIOE, &GpioStructure);
    GPIO_Init(GPIOH, &GpioStructure);

/*
    // PB7 - PVD_IN
    GpioStructure.GPIO_Pin = GPIO_Pin_7;
    GpioStructure.GPIO_Mode = GPIO_Mode_OUT;          //   GPIO_Mode_IN
    GpioStructure.GPIO_Speed = GPIO_Speed_40MHz; 
    GpioStructure.GPIO_PuPd = GPIO_PuPd_DOWN;

    GPIO_ResetBits(GPIOB, GPIO_Pin_7);
    GPIO_Init(GPIOB, &GpioStructure);
*/    

    // Disable clocks
  RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH , DISABLE );    
    
}

 

Вот кусочек закомменченный. Раньше просто вроде потребление как-то реагировало когда изменял настройку этой ножки PVD_IN детектора напряжения.

Основная программа. Ну тут особо нечего смотреть

 

int main()
{
    //Gpio_Disable();
    //PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
    //PWR_EnterSTANDBYMode();
    //PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI);
    while(1);
}

 

Ну, кусман схемы тоже вроде особо ничего интересного, тем более что я всё уже отпаял

2%20(5).jpg

 

Так что пока вообще не понимаю почему у меня потребление в 1000 раз больше чем должно быть. Да и даже в обычном режиме слишком большое. Не пойму, куда-то утекает, а куда не пойму. Подскажите, кто что знает, пожалуйста. Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас точно не помню ,но что бы снизить потребление нужно генератор перевести на 32кгц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, реакция вроде какая-то есть при уменьшении частоты. Пока правда почему-то не получается на маленькие частоты перейти источника MSI. Ну и всё равно даже на частоте 2.097 МГц потребление должно быть как написано в даташите 0.214*2.097=0.45 мА. А у меня аж 8.5 мА. Правда когда начал изменять частоту MSI, потребление стало 3.5 мА. Это я поизменял-поизменял и вернул обратно, ну как всегда короче:). Может какую периферию подумал отключить надо. Да вроде всё проверил, ничего лишнего не включено. В общем, пока что потребление у меня примерно в 3500 раз больше, чем должно быть. Непонятно:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Висящие в воздухе ножки - это зло. Если пин настроен на ввод и никуда не подтянут, то, в результате "сквозняка", он сам по себе может потреблять миллиамперы. Так что, просматривайте эту часть еще раз, так как "поизменял-вернул-изменилось" недвусмысленно указывает именно на это. Ну и отключить всю периферию, имеющую аналоговые блоки, навроде АЦП, ЦАП, опорников, high speed трансиверов, и подобного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Непонятно:)

Попробуйте начать с такого кода (правда, не SPL)

        RCC->AHBLPENR = 0;
        RCC->APB1LPENR = 0;
        RCC->APB2LPENR = 0;

        while(PWR->CSR & (1 << PWR_CSR_VOSF));

        FLASH->ACR = (1 << FLASH_ACR_SLEEP_PD);

        PWR->CR =
              (3 << PWR_CR_VOS)
            | (1 << PWR_CR_PDDS)
            | (1 << PWR_CR_CWUF)
            | (1 << PWR_CR_ULP)
            | (0 << PWR_CR_LPSDSR)
            | (0 << PWR_CR_LPRUN);

        //PWR->CR |= (1 << PWR_CR_LPRUN);

        SCB->SCR =
              (1 << SCB_SCR_SLEEPONEXIT)
            | (1 << SCB_SCR_SLEEPDEEP);

        while(PWR->CSR & (1 << PWR_CSR_VOSF));

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую самые разные спящие режимы в STM32L . Собаку на них съел.

В начале разбираться действительно сложно.

 

Для начала, сделайте следующее, в указанном порядке. На каждом шаге измеряйте ток потребления.

 

1) Сразу после запуска на всех ногах процессора включается аналоговая функция. Висящие в воздухе ноги не мешают.

"сразу после запуска" означает, что Ваша программа ещё не успела навключать периферию .

2) Тактирование переводится на MSI , все остальные генераторы отключаются.

3) Включается режим Standby

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Висящие в воздухе ножки - это зло

 

Да, я читал про это. Я подтягиваю к земле ножки внутренними резисторами. Хотя, как и говорил, пробовал по-разному много вариантов

 

 

Попробуйте начать с такого кода (правда, не SPL)

 

Что с этим кодом что без в режиме StandBy потребление одинаковое :05:

 

 

Использую самые разные спящие режимы в STM32L . Собаку на них съел.

В начале разбираться действительно сложно.

 

Для начала, сделайте следующее, в указанном порядке. На каждом шаге измеряйте ток потребления.

 

1) Сразу после запуска на всех ногах процессора включается аналоговая функция. Висящие в воздухе ноги не мешают.

"сразу после запуска" означает, что Ваша программа ещё не успела навключать периферию .

2) Тактирование переводится на MSI , все остальные генераторы отключаются.

3) Включается режим Standby

 

 

Сначала запустил пустой код с одним зацикленным while(1). Потребление 6мА

Настроил все ножки на аналоговый вход. Потребление 5.3 мА

Перешёл на MSI и отключил все источники тактирования. Потребление 3.95 мА (Хотя по факту не перешёл на MSI, а остался в нём, он по умолчанию сразу врубается. Отключил только HSE, остальное было отключено)

Включил режим Standby. Потребление 3.3 мА

 

 

В общем, не понимаю, куда-то утекают миллиамперы. Всем спасибо за ответы! Будем думать! Ну и помощь опять же не помешает:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сначала запустил пустой код с одним зацикленным while(1). Потребление 6мА

Настроил все ножки на аналоговый вход. Потребление 5.3 мА

Перешёл на MSI и отключил все источники тактирования. Потребление 3.95 мА (Хотя по факту не перешёл на MSI, а остался в нём, он по умолчанию сразу врубается. Отключил только HSE, остальное было отключено)

Включил режим Standby. Потребление 3.3 мА

 

Далее :

 

1) Это всё делается с отключенным (физически от разъёма) отладчиком ? А если в момент перевода всех ног в аналоговое состояние идёт отладка отладка, она отключается, верно ?

2) Если во все ноги процессора потыкать вольтметром, что там будет ? 0 в, потому что включено 3е состояние, верно ?

3) Если отпаять от схемы процессор, потребление упадёт до единиц мка , т.е. потреблять будет только линейный стабилизатор, а он у Вас микропотребляющий, верно ?

4) Электролитических конденсаторов на питании нету ? У них большие утечки.

5) Показали бы схему .....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Далее :

 

1) Это всё делается с отключенным (физически от разъёма) отладчиком ? А если в момент перевода всех ног в аналоговое состояние идёт отладка отладка, она отключается, верно ?

2) Если во все ноги процессора потыкать вольтметром, что там будет ? 0 в, потому что включено 3е состояние, верно ?

3) Если отпаять от схемы процессор, потребление упадёт до единиц мка , т.е. потреблять будет только линейный стабилизатор, а он у Вас микропотребляющий, верно ?

4) Электролитических конденсаторов на питании нету ? У них большие утечки.

5) Показали бы схему .....

 

 

1) Да, естественно отключаем

2) Верно. Но потыкался. Оказалось, что на некоторых ножках висит от 0.5 до 0.8 В. Будем разбираться

3) Может и отпаяю в итоге процессор чтобы уж точно убедиться что это именно он жрёт. Стабилизатора на плате нет. Питание будет от батареек

4) Были, отпаял. Потребление не изменилось

5) gps_test_IZM2.sch

 

Спасибо, что курируете:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Ну во-первых надо подтянуть затворы полевых транзисторов к земле. Потому что когда Вы переводите соответствующие ноги процессора в 3е состояние, на затворах получается непойми что.

 

 

Если не хотите отпаивать процессор, отпаяйте всё остальное. Или хотя бы разомкните (отпаяв что-нибудь или перерезав дорожки) цепи, по которым всё остальное питается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну во-первых надо подтянуть затворы полевых транзисторов к земле. Потому что когда Вы переводите соответствующие ноги процессора в 3е состояние, на затворах получается непойми что.

 

 

Если не хотите отпаивать процессор, отпаяйте всё остальное. Или хотя бы разомкните (отпаяв что-нибудь или перерезав дорожки) цепи, по которым всё остальное питается.

 

 

Да, подтянуть затворы транзисторов забыл. Ну в любом случае пока что транзисторы отпаяны.

Ещё немного наврал что отпаял всё:). Одна ножка подведена к микросхеме. Но эта микросхема не запитана.

 

 

А сейчас вот что заметил. Когда ставлю ножку PB7 (вход детектора напряжения - PVD_IN) на аналоговый вход, На ней висит напряжение питания. Это сильно смущает. Откуда там может взяться какое-то напряжение, если это вход. Подумал сначала может Верхний транзистор сгорел в выходном каскаде. Да нет, когда настраиваешь ножку на выход и устанавливаешь в ноль, то напряжение там ноль. Если настраиваешь просто на вход, то тоже ноль. Не знаю, откуда-то из детектора напряжения берётся это всё дело видимо. Когда начал изменять настройку этой ножки, то заметно начало изменяться потребление: в обычном режиме примерно 1.6 мА, в режиме Standby 0.9 мА. Правда не пойму нихрена. Решил настроить всё как было, но потребление так и осталось таким. Пробовал разные варианты. При некоторых вообще потребление в энергосберегающем режиме больше, чем в обычных (в обычном опять же 1.6 мА, в Standby примерно 3 мА)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...