Sign in to follow this  
COKPOWEHEU

минимизация потребления stm32l151rct6

12 posts in this topic

COKPOWEHEU    273

Захотелось сделать устройство с минимальным потреблением. Первоначально хотел попробовать на f103, но глянул в даташит и ужаснулся: в любом режиме сна у него потребление больше, чем у AVR-ок. Ну хорошо, в standby сравнимо, но этот режим мне не подходит. Поискал аналоги, вроде бы серия L1 больше подходит для автономных устройств. Да еще там есть вкусности вроде сенсорных кнопок и управления ЖКИ (не то чтобы необходимо, но поиграться стоит).

Собрал макетную плату с высокочастотным (8 МГц) и низкочастотным (32768) кварцами, стабилизатором, кнопками и светодиодами (из кода понятно что где висит). Запускаю RTC с пробуждением раз в секунду (в финальном устройстве просыпаться будет еще чаще) и пытаюсь увести в режим stop. Но вместо потребления в единицы микроампер получаю пол-миллиампера. Либо я какую-то периферию не отключил (да я их и не включал вроде...), либо как-то неправильно увожу в сон (вроде все по даташиту...), либо лыжи не едут.

Вот ключевые моменты кода (остальное во вложении):

void enable_btn(){
  RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
  GPIO_config(JBTN); //настройка на вход с минимальной скоростью, без подтяжке
}

void disable_all(){
  GPIOA->MODER = 0xFFFFFFFF; //all to analog in
  GPIOB->MODER = 0xFFFFFFFF; //all to analog in
  GPIOC->MODER = 0xFFFFFFFF; //all to analog in
  GPIOD->MODER = 0xFFFFFFFF; //all to analog in
  
  GPIOA->OSPEEDR = 0; //all to low speed (наверное, неважно)
  GPIOB->OSPEEDR = 0; //all to low speed (наверное, неважно)
  GPIOC->OSPEEDR = 0; //all to low speed (наверное, неважно)
  GPIOD->OSPEEDR = 0; //all to low speed (наверное, неважно)
  
  GPIOA->OTYPER &=~ 0x0000FFFF;
  GPIOB->OTYPER &=~ 0x0000FFFF;
  GPIOC->OTYPER &=~ 0x0000FFFF;
  GPIOD->OTYPER &=~ 0x0000FFFF;
  
  RCC->AHBENR &=~ (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN);
  clock_MS();
}

void go_sleep(){
  RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR
  SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep
  PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep
  PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag
  PWR->CR |= PWR_CR_LPSDSR; //уменьшаем voltage regulator
  __WFI();
}
...
//когда нужно заснуть
disable_all();
go_sleep();
enable_btn();

Пробовал совсем не переключаться с MSI на HSE, это влияет только на рабочий режим, во сне как было 500 мкА так и остается.

L1_sleep.rar

Share this post


Link to post
Share on other sites
Yurkin2015    363
21 минуту назад, COKPOWEHEU сказал:

стабилизатором

Это стабилизатор жрёт 500мкА.

Share this post


Link to post
Share on other sites
COKPOWEHEU    273
56 минут назад, Yurkin2015 сказал:

Это стабилизатор жрёт 500мкА.

Если бы все было так просто. Ток-то я меряю после него

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments приглашают 26 июня принять участие в вебинаре, где инженер по применению беспроводных технологий компании TI расскажет, как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств. С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее. Вебинар проводит инженер по применению беспроводных технологий в TI Мари Хернес(будет дублированный перевод).

Подробнее...

COKPOWEHEU    273

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

Share this post


Link to post
Share on other sites

Видео вебинара «Уникальный подход MORNSUN к разработке DC/DC-преобразователей. Что на выходе?»

На сайте КОМПЭЛ доступны материалы вебинара, посвященные последнему поколению DC/DC преобразователей с фиксированным входом R3 от MORNSUN. Вы можете посмотреть видеозапись, ознакомиться с презентацией и ответами на вопросы.

Подробнее...

mail_robot    1503

F-ки никак не подходят для малопотребляющих устройств. В сторону L-ек мысль была совершенно правильная

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

Читал и раньше.

Попробовал еще несколько комбинаций:

- переключение выводов в Digital input + pull-up вместо analog input: потребление растет

- запуск часов от LSI вместо LSE: потребление практически не меняется. Возможно, только на фоне общего потребления в пол-миллиампера, а в абсолютных величинах будет заметнее.

- бит PWR_CR_ULP (внутренняя опора для аналоговых блоков?) : потребление немного снижается.

Последняя надежда что недостаточно очистил плату и идут утечки по налипшей гадости. Я ее, конечно, отмывал в спирте, но мало ли. Попробую еще в керосине, ацетоне и прочих растворителях.

Кстати, кто-нибудь знает чем можно удалить остатки цианакрилата? В инете пишут что ацетоном, диметилсульфоксидом и теплой водой (wtf?). Пока лучше тонких проволочек и бритвенного лезвия лучшего способа не нашел.

Share this post


Link to post
Share on other sites
Guest Trespasser   
Guest Trespasser

Какие ресурсы и сколько нужны в проекте? Какая периферия будет в обвязке? Бюджет платы?

Потому как помимо устаревшей STM32L152 у того же STM есть и другие LP серии, включая STM32L0 и STM8L0, а есть еще и TI со своей MSP430.

На STM8 делал проект газового счётчика, на измерении вихрей Кармана, со средним потреблением 8мкА, по 3.3В. И это с измерительным обвесом и LCD индикатором.

 

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

Никаких чудес. В основном цель - потыкать режим сна в ARMах длинной палочкой. 5 мкА потребления бы вполне устроили. Внешняя периферия это отдельный вопрос, ее стоит рассматривать индивидуально.

Пока что удалось выжать 20-30 мкА, но это просыпаясь каждые 100 мс. В принципе, уже неплохо, хотя могло бы быть лучше. Оказалось, косяк в цикле main. Сейчас под рукой нет рабочего варианта чтобы выложить. Да вроде никому он тут и не нужен кроме меня.

В 11.05.2019 в 23:27, COKPOWEHEU сказал:

Кстати, кто-нибудь знает чем можно удалить остатки цианакрилата? В инете пишут что ацетоном

не врут! Ацетон полностью удалил следы клея, да еще и кнопку в придачу. Справедливости ради, все остальные компоненты уцелели, даже пластиковые разделители для гребенок.

Share this post


Link to post
Share on other sites
Trespasser    0

Ацетон это жёстко. Тогда уж и толуол можно было опробовать. Читал, что раствор димексида (есть в аптеках и в его составе диметилсульфоксид ) размягчает почти все цианакрилаты.

 

Share this post


Link to post
Share on other sites
COKPOWEHEU    273

димексид тоже пробовал, не так впечатлил. Даже нашел "удалитель клея", но уж больно густой оказался, для удаления клея из-под микросхемы бесполезно. А что "жестко"? Оно сработало, разве что кнопка пострадала, но не жалко. Не так много на плате нежных компонентов, которым ацетон повредит.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By IgnatiusF
      Не удается проинициализировать работу UART2 на скорость 19200 бод.
      Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 
      Кварц рабочий, и вообще все работает, при использовании библиотек HAL.
      SysTick выключил потому, что были подозрения на конлфикт приоритетов.
      Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.
      Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:
      USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.
      Где искать следует ошибку?
    • By small girl
      Привет, ребят! Кто возьмется написать на С протокол взаимодействия для сети микроконтроллеров. База: STM32 с bluetooth модулем HC-06,- slave. ПК - master?

      За вознаграждение
    • Guest Semen
      By Guest Semen
      Пользуюсь платой stm32f103vet6. Пытался запустить ацп и мерить напряжение на PA0 через потенциометр (10к) напряжение. Опорное = 3,3 волтта.  При подачи на  PA0 любого напряжения результат счета = 2000 +/-. И на ноге PA0 всегда висит 1.6 вольт если она никуда не подключена. Режим работы ацп - регулярный.  Помоги пожалуйста.
    • By IgnatiusF
      Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.
      То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?
      Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?
      Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен