Хабрахабр

STM32. Практика похудания или диета для контроллера

Не ошибся ли автор ресурсом? Что за бред, наверняка подумают некоторые читатели, увидев заголовок публикации. И будут отчасти правы, но лишь отчасти… Под катом речь пойдет о методике снижения-оптимизации энергопотребления электронных устройств. Или разместить это планировалось в хабе «Здоровье гика»?

Некоторое время назад попала мне в руки плата X-NUCLEO-LPM01A, которая до поры до времени лежала без дела, пока я не решил заняться исследованием энергопотребления одного проектируемого устройства с автономным питанием.

Толкового русскоязычного описания в сети по работе с этим девкитом я не нашел и решил разобраться сам, а заодно поделиться информацией с уважаемым хабро-сообществом. Данная плата разработана STMicroelectronics и позиционируется как «Power shield, Nucleo expansion board for power consumption measurement».

8 до 3. Если выделить основное, то плата расширения является программируемым источником питания от 1. Устройство может работать как автономно, так и в составе программно-аппаратного комплекса. 3 вольт с возможностью в real-time измерять ток нагрузки (в динамическом режиме до
50 мА) с частотой дискретизации до 100 КГц. Данное ПО позволяет так-же задавать все необходимые параметры и осуществлять обработку по возникновению события (триггерный запуск). Для графического отображения измеряемых значений используется утилита STM32Cube MonitorPower. На фото ниже изображено подключение исследуемого нами устройства к одному из разъемов платы. X-NUCLEO-LPM01A заточена для работы с платами Nucleo-32 (64, 144), Arduino Nano (Uno), для этого на ней размещены соответствующие шилды, но есть возможность работы и c произвольными платами.

(Здесь я кажется несколько погорячился, HTerm завелся с пол-пинка, а вот с любимым мною ZOC пришлось немного пошаманить). Кроме прикладного ПО, X-NUCLEO-LPM01A поддерживает командный режим, для работы в котором должна подойти любая терминальная программа. Столь высокая скорость обеспечивается в частности передачей бинарного потока данных (для частот дискретизации свыше 50 КГц), для ASCII символов скорость несколько ниже. Причем, судя по описанию, за счет использования драйвера VCP, устройство может сыпать данные в COM порт со скоростью до 3686400 бод.

Более конкретно, задача, которую я попытаюсь решить с помощью X-NUCLEO-LPM01A, это:

  1. Получить информацию по динамическому энергопотреблению интересующих узлов проектируемого изделия, используя триггерный запуск X-NUCLEO-LPM01A в исследуемых местах программного кода.

  2. В процессе непрерывной работы устройства организовать накопление нужных фрагментов для последующего обобщенного анализа.

На скриншоте ниже показан лог потребления тока SD картой во время записи данных.

В нижней части картинки приводятся минимальное, максимальное, среднее значения потребляемого тока и интегрированное значение энергии. STM32Cube MonitorPower позволяет не только качественно, но и количественно оценить энергопотребление исследуемого устройства. Такие данные доступны как для всего замера так и для выделенного фрагмента.

Как оказалось, работает только однократный запуск процесса с последующей непрерывной записью. В User manual отмечается, что триггерный запуск измерения осуществляется импульсом на ноге D7 ардуино шилда. То есть единожды начав запись в нужном месте по нарастающему фронту, не получается тормознуть процесс спадающим фронтом импульса. Попытка-же организовать старт-стопный режим регистрации тока (по обоим фронтам импульса) не увенчалась успехом. И это не совсем то, что я ожидал получить от данного устройства.

Полностью управляемый старт-стопный режим можно задать, используя последовательность команд из терминальной программы

команда

описание

htc

захват управления хостом

volt 3300-03

напряжение питания по измеряемому каналу 3300 мВольт

acqtime 0

непрерывный замер без ограничения по времени

freq 10000

частота сэмплирования 10 КГц

start

начало замера

...

замер (данные сыпятся в терминалку)

stop

окончание замера

Можно конечно попытаться формировать указанную последовательность команд на стороне исследуемого устройства, а не хоста, но тогда и поток вывода данных с X-NUCLEO-LPM01A тоже посыпется в контроллер и что с ними делать непонятно, а перенаправление вывода "куда_нибудь_в_другое_место" тоже не доступно, (хотя на плате есть пины UART Tx, Rx, но в мануале значатся как "reserved" и, вероятно, в текущей версии прошивки никак не задействованы). Проблема в том, что это ручное управление, не синхронизированное с событиями в целевом контроллере. Выкрутился я из этой ситуации следующим образом:

На стороне хоста (компьютера) формируется следующая последовательность команд

команда

описание

htc

захват управления хостом

volt 3300-03

напряжение питания по измеряемому каналу 3300 мВольт

acqtime 1

длительность замера
(можно использовать диапазон от 10 мксек до 10 сек )

trigsrc d7

синхронизация начала замера с нарастающим фронтом
импульса на pin D7

freq 10000

частота сэмплирования 10 КГц

start

начало замера

...

замер (данные стартуют по фронту импульса и прекращают
сыпаться по истечению времени, указанному в acqtime)

Указанный подход позволяет исследовать потребление схемы в разных местах программы и в различные промежутки времени, которые находятся достаточно далеко друг от друга. Теперь данные будут фиксироваться "пачками", а не непрерывным потоком. А если терминальная программа будет писать time markers в свой лог, как изображено на картинке ниже, то распарсить хронологию событий по такому файлу будет совсем просто. То есть, если есть необходимость собрать инфу по энергопотреблению девайса, работающего час (день, неделю) не нужно писать непрерывный поток, да еще с максимальной частотой дискретизации и потом разбираться в этой каше, а достаточно лишь обеспечить вышеописанный алгоритм работы.

Это как видеорегистратор с записью по детектору движения и временными отметками.

На первом — энергопотребление контроллером во время считывания данных со встроенного ADC. Приведу еще пару скриншотов, полученных с помощью X-NUCLEO-LPM01A. 32 значения считываются по таймерному прерыванию с частотой 4 КГц и складываются в память.

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

Эти два примера не претендуют на оптимизацию энергопотребления low-power устройств, а лишь демонстрируют возможности X-NUCLEO-LPM01A, которая способна измерять токи от 1 нА. Сразу-же заметна существенная дельта в потреблении тока во время замера, ~6 мА.

А использование описанного подхода позволит не только "умерить аппетиты контроллера" при разработке критичных по питанию девайсов, но и лучше понять динамику процессов, в многообразных режимах энергосбережения, активно используемых разработчиками современных электронных устройств. В заключение скажу, что, по моему скромному мнению, этот девкит представляется вполне годным инструментом, который может занять достойное место рядом с осциллографом и логическим анализатором сигналов на столе эмбеддера.

Несколько омрачает радужность картинки стоимость платы — более 7000 руб, но разве такая, ничтожная по нынешним временам, сумма сможет остановить настоящего гика от возможности обладания этим чудесным девкитом?

S. P. Минусом такого подхода будет являться обязательное наличие свободного UART на стороне исследуемого контроллера, не говоря уже о том, что 921600 бод зачастую невозможно при низких тактовых частотах. Несмотря на указание в UM, что UART зарезервирован для будущих применений, я все-же сунулся на него и обнаружил, что он живет как второй интерфейс (ввод-вывод дублируется с VCP) на скорости 921600 8N1 и его можно использовать как командный, формируя start и stop для начала — окончания замера.

P. P. Уже после написания статьи заметил разницу на последних картинках ~2 мА при входе в измерение и по его окончанию. S. Вероятно я не отключил тактирование ADC, или оставил работать таймер, но это уже, как любит говорить Леонид Каневский: "совсем другая история"...

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть