Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

15 марта 2024

Блок питания с функцией записи

Картинка из интернета

Характеристики

  • Входное напряжение 12 В
  • Выходное напряжение 1,5 - 5,5 В
  • Выходной ток до 250 мА*
  • Дискретность измерения выходного напряжения 5мВ
  • Дискретность измерения тока 1 мкА в диапазоне 0 - 1,1 мА, 0.1 мА в диапазоне выше 1,1 мА**
  • Количество измерений/сек - 1000/500/250
  • Буфер - 50 000 измерений
  • Отображение графика потребления на дисплее
  • 2 варианта масштаба графика - абсолютный (от 0 и до максимума) и с адаптивным нижним пределом.
  • 2 варианта отображения каждой экранной точки графика - среднее или минимальное+максимальное значение
  • Приостановка записи в буфер и просмотр сохраненных в буфере данных с возможностью увеличения масштаба и перемещения по графику
  • Сохранение измерений на SD(TF)-карту.
  • Усреднение данных при записи на SD(TF)-карту - 1, 10 или 50 измерений
  • Часы реального времени (для файловой системы)

*Программное ограничение, при превышении тока выход БП отключается в течении секунды. Долговременный выходной ток устройства определяется рассеиваемой мощностью микросхемы стабилизатора. При рассеиваемой мощности 500 мВт рекомендуемый средний ток не должен превышать 65мА при выходном напряжении 1.5 вольт, при напряжении 5 вольт - 125мА. 

**Данное устройство не является точным измерительным прибором и предназначено прежде всего для оценки потребляемого нагрузкой тока в динамике. Погрешность измерений может колебаться в пределах 1-2 дискретных единиц.

История создания и маленький кусочек теории

Иногда мне приходится разрабатывать и тестировать различные автономные устройства. А одно из основных требований к автономному устройству - низкое энергопотребление.

Соответственно, возникает необходимость как то померять потребляемый устройством ток. Если это какое то устройство, которое потребляет энергию постоянно - можно взять мультиметр и просто измерить потребляемый ток. 

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

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

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


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

Выглядит все очень красиво. но первые вопросы возникают при выборе сопротивления шунта. Ведь тестируемое устройство в режиме ожидания может потреблять 1-2-5 мкА, а в активном - до 50-100-200 мА. 
Если взять шунт с низким сопротивлением, то падение напряжения на нем при малых токах будет низкое. Это напряжение будет сложно усилить без влияния помех и шумов. Если взять шунт с высоким сопротивлением - то при больших токах на шунте будет достаточно большое напряжение. Что потребует достаточно высокого входного напряжения. Кроме того, на шунте будет выделяться достаточно большая мощность. А нагрев шунта может вызвать изменение его сопротивления, что негативно скажется на точности измерений.

12 января 2024

MicroMenu и его настройка


 Когда функционал устройства становится большим и разнообразным, и для взаимодействия устройства с пользователем уже не хватает светодиодов и 7-сегментных цифровых дисплеев, на помощь приходят более продвинутые текстовые или графические дисплеи.
И зачастую логика работы устройства требует организовать кучку интерфейсных элементов в какую то однотипную структуру типа меню. Это может быть какое то простое одноуровневое меню из нескольких пунктов, а может быть и достаточно сложной многоуровневой структурой.

И возникает вопрос - как это все организовать малой кровью с небольшими затратами ресурсов МК. Когда то на easyelectronics я встретил статейку Steel.ne про организацию древовидного меню. Steel.ne использовал MicroMenu, допилив его под себя.

Идея меню проста. Каждый элемент меню - это запись с четырьмя ссылками - на предыдущую и последующую запись, на своего родителя и на потомка. Если записи по ссылке нет (например, это первый или последний элемент), соответствующая ссылка оставляется пустая (точнее там вставляется ссылка на фиктивный пустой элемент).

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

Так же в каждом элементе меню, кроме ссылок на соседние элементы, есть еще текстовая строка - текст элемента меню и 1 байт данных. В этот байт сохраняется номер команды, которая должна выполниться при выборе данного пункта меню.

Элементы меню сохраняются во флеше, не используя оперативную память микроконтроллера.
Каждый элемент меню хранит 4 ссылки, 1 байт команды и нуль-терминированную строку. Минимальная строка - это один байт 0x00.
Итого для семейства AVR, где адрес умещается в 2 байта, элемент меню минимально занимает 4 * 2 + 1 + 1 = 10 байт. Для STM-ок, где адресация 32-битная - 4 * 4 + 1 + 1 = 18 байт. 

Идея меню мне понравилась и я взял проект Steel.ne и допилил, соответственно, уже под себя. 
Достаточно долгое время я просто таскал код меню из проекта в проект методом Ctrl+C - Ctrl+V... Но потом надоело. И в 2020 году я оформил наконец то это меню в виде отдельной библиотечки.
Стало легче подключать меню в свои проекты. Заодно библиотека обрела некоторую универсальность - для семейства AVR, например, там автоматически подставляется модификатор PROGMEM хранения во флеше, процедуры чтения данных из флеша (pgm_read_xxxx).