Режимы энергосбережения микроконтроллеров STM8Lх51: Low Power Run Mode и Low Power Wait Mode

разделы: STM8, дата: 06 ноября 2022г.

Данная статья посвящена ультраэкономичным режимам энергосбережения микроконтроллеров STM8L: "Low Power Run Mode" и "Low Power Wait Mode". Данные режимы характерны тем, что в них отключатся флеш-память, а весь код выполняется из оперативной памяти. Также отключается главный регулятор напряжения MVR, а тактирование осуществлется от низкочастотного генератора на 38 кГц или от часового кварца. За счет этого удается добится кардинального снижения энергопотребления микроконтроллера до 3-5 мкА.

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

В качестве примера для данных режимов энергосбережения я бы хотел рассмотреть создание часов на батарейном питании. Пусть будет две пальчиковые батареи с ресурсом работы в один год. В качестве индикатора будет использоваться шести-разрядный жидко-кристаллический индикатор (ЖКИ) на контроллере HT1621. Данный индикатор недорогой (около 200р), и он свободно продается на али.

На первый взгляд задача может показаться примитивной, но с учетом необходимости работы в режиме пониженного энергопотребления все становится не так просто. Отключая флеш-память, вы остаетесь без прерываний вообще, т.к. в stm8 таблица прерываний не может менять местоположение, она всегда располагается на флеш-памяти. В качестве альтернативы прерываниям существует механизм Event'ов, которого нет в S-линейке микроконтроллеров STM8. Кроме того, требуется рабочий цикл программы вместе с используемыми подпрограммами и функциями размещать в оперативной памяти, размер которой в микроконтроллере STM8L051F3 равен всего одному килобайту. А кроме кода программы, там еще располагаются глобальные переменные и стек. И вот так с ходу написать такой проект мало у кого получится, прежде придется порядочно посидеть над Reference Manual. А в проекте, еще используются недокументированные функции.

    В целом, статья делится условно на три части:
  1. Часть посвященна ЖКИ индикатору
  2. Часть посвященная режимам энергосбережения STM8L: "Low Power Run Mode" и "Low Power Wait Mode"
  3. Часть посвященная программированию часов
    Требуемая аппаратура:
  1. Для часов нам понадобится: а) ЖКИ индикатор, б) микроконтроллер STM8L051F3P6, в) энкодер с кнопкой, г) две батарейки АА или ААА с держателем, д) макетка.
  2. Т.к. микроконтроллер STM8L051F3P6 можно прошить не более чем 100 раз, для разработки нам понадобится микроконтроллер STM8L151xx или STM8L152xx. Сгодится так же STM8L-DISCOVERY. Ещё потребуется ST-Link и компьютер. Для оценки энергопотребления я буду пользоваться платой MSP430FR2433 с инструментом EnergyTrace, вы же можете пользоваться обычным мультиметром.

Из софта нам понадобится компилятор Cosmic и среда разработки STVD, т.к. у SDCC нет инструментов загрузки кода в оперативную память и компиляции кода без абсолютных адресов, т.е. строго с относительной адресацией.

Полезные материалы:

  1. Статья по компилятору Cosmic: "STM8S105 + COSMIC: Запись в EEPROM и FLASH память микроконтроллера"
  2. Даташит на HT1621: "https://www.radiokot.ru/artfiles/6611/01.pdf"
  3. Reference Manual STM8L: "RM0031"
  4. Даташит на микроконтроллер STM8L051F3: "https://www.st.com/resource/en/datasheet/stm8l051f3.pdf"
  5. Даташит на микроконтроллер STM8L151xx: "https://www.st.com/resource/en/datasheet/stm8l151c8.pdf"
  6. Топик на easyelectronics.ru: "STM8L encoder mode"

Содержание:

I. ЖК дисплей на контроллере HT1621

  1. Обзор ЖКИ на HT1621
  2. Пишем драйвер дисплея HT1621 для STM8S103F3

II. Работа с микроконтроллером STM8L151C8 в среде STVD+Cosmic

  1. Структура базового проекта с мигающим светодиодом
  2. Использование Wait режима энергосбережения
  3. Подключение дисплея HT1621 к микроконтроллеру STM8L151C8 и оценка энергопотребления
  4. Добавляем энкодер на таймере TIM2
  5. Программа часов

III. Энергосберегающие режимы "Low Power Run Mode" и "Low Power Wait Mode"

  1. Механизм Event'ов и режим энергосбережения флеш-памяти IDDQ
  2. Переходим в режим Low Power Wait Mode с тактированием от LSI
  3. Переключение на тактирование от LSE
  4. Часы на микроконтроллере STM8L151C8
  5. Адаптация кода на микроконтроллер STM8L051F3
  6. Вместо заключения
На портал GitLab я выложил workspace для STVD со всеми примерами: https://gitlab.com/flank1er/stm8l_ht1621_clock
Так же репозиторий включает драйвер дисплея ht1621 для stm8s103f3 написаный на SDCC

Читать дальше