0,0
рейтинг
23 января 2015 в 17:20

STM32L0538-DISCO: краткое описание + интересное применение из песочницы

image

Уже довольно давно в продаже появилась новая плата из серии discovery от STMicroelectronics. Думаю, хабрасообществу будет интересно познакомиться с ней поближе. Под катом вас ожидает краткий обзор новой демоплаты и интересный пример её применения.

Плата предназначена для демонстрации возможностей STM32L053C8, представителя серии ультранизкопотребляющих микроконтроллеров. Помимо него, на плате установлен ещё один чип от ST (STM32L152CCT6), который измеряет ток, потребляемый главным МК в различных режимах. Традиционно на плате реализован программатор/отладчик ST-Link (версии 2.1), позволяющий прошивать и отлаживать по интерфейсу SWD как целевой МК, так и внешние чипы. Ещё ST-Link 2.1 реализует преобразователь USB-COM, а также появляется в системе как съёмный диск, позволяя прошивать микроконтроллер простым копированием бинарного файла.

Бесполезное замечание
Так как ST-Link тоже реализован на чипе от ST (STM32F103CBT6), получается, что купив одну отладочную плату, получаешь целых 3 разных МК на ней!

Основной особенностью платы является дисплей, выполненный по технологии электронных чернил. Дисплей не большой (2.04 дюйма, 172x72) и до собратьев, установленных в электронных книжках ему далеко, но он вполне подходит для отображения разнообразной информации.

image

Плата поставляется с демонстрационной прошивкой, которая работает в двух режимах (впрочем, толковый из них только первый): измерение и отображение на e-ink экране потребляемого STM32L053C8 тока или в режиме USB мыши. Выбор режимов осуществляется сенсорным слайдером.

Концепция применения платы


Когда я получил плату и увидел на обесточенном экране логотип ST, то сразу захотел сделать автономное, практически не потребляющее энергии устройство, которое будет отображать какую-либо редко меняющуюся информацию. Про него можно вообще забыть, а оно всё равно будет что-то показывать спустя месяцы и даже годы. Например, сколько дней осталось до какого либо события. Так и родилась концепция устройства: электронно-бумажный счётчик дней обратного отсчета, который будет всё время напоминать о неумолимом приближении дедлайна, нового года, дня рождения (нужное подчеркнуть).

Сказано — сделано! Через некоторое время отладочная плата превратилась в устройство. Для питания используется батарейка малой ёмкости. Можно использовать любую с напряжение 3 В, у меня это «таблетка» CR2032 в держателе. Микроконтроллер находится в спящем режиме с включенным модулем часов реального времени (RTC). При наступлении очередного дня, RTC будит контроллер, который обновляет счётчик обратного отсчета дней на экране. Так как экран потребляет энергию только в процессе перерисовки, все основное время батарейка питает часы в контроллере и лишь изредка энергия уходит на обновление счётчика. Для настройки используется USB (точнее UART через USB-COM преобразователь предоставляемый отладчиком на плате). Плата вместе с батарейкой отлично умещается в родную пластиковую упаковку. В процессе реализации добавилась ещё одна функция – нарастающий счётчик дней, который обнуляется нажатием кнопки User. Это может быть полезным для мотивации, например: «не курю 38 дней», «не пропускал тренировки 15 дней» и т.д. Ну или что-то вроде: «56 дней без ининцидентов».

Реализация


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

Доработка в картинках
1. Выпаиваем перемычку SB13 и резисторы R44, R50:
image
2. Монтируем на плату кварц X2 (32.768 кГц), конденсаторы C47 и С50 (~10 пФ), резисторы R70 и R71 замыкаем каплями припоя. Также желательно выпаять резисторы-перемычки SB18, SB19 (их можно впаять на место R70 и R71).
image
3. Перерезаем дорожку на плате возле транзистора T6, добавляем резистор на 100 кОм, держатель для батарейки CR2032:
image
Должно получится вот так:
image
4. Замыкаем перемычки SB2, SB3:
image
5. Снимаем джампер с разъёма JP4:
image
Вот и всё!

Подробнее про аппаратные изменения (осторожно, много букв)
Нужно запитать только STM32L053C8 и дисплей. Штатного способа этого сделать не предусмотрено. Есть контакт 5V_in, но от него будет питаться ещё и ST-Link вместе с токоизмерительным МК. Всё это питается через стабилизаторы, на которых тоже будут потери. Нам же нужно добавить батарейку, при этом максимально возможно сохранить функционал платы (можно конечно выпаять все лишнее, но это не наш путь).

Перемычку SB13 нужно выпаять, чтобы отключить сигнал сброса T_NRST, который генерирует ST-Link. Без этого сигнала можно обойтись, STM32L053C8 будет прошиваться и без него (разве что придется нажимать на кнопку сброса, если он будет в спящем режиме).

Резистор R50 нужно убрать, так как через него токоизмерительный МК паразитно питается от шины VDD, на которую мы подадим напряжение батарейки.

Для работы RTC необходим источник тактовой частоты. Внешний «часовой» кварц на 32.768 кГц, на плате отсутствует (но под него предусмотрено место) и чтобы избежать лишних переделок, я сначала попробовал использовать встроенный в МК RC генератор. Точность такого решения оказалась абсолютно неприемлемой (часы убегали на полчаса в день), поэтому нужно впаять кварц X2, два конденсатора C47 и С50 (~10 пФ 0603) для него и подключить его к МК. Подключать кварц предполагается запаяв два резистора R70 и R71, я же обошёлся просто каплями припоя. Также желательно выпаять перемычки SB18 и SB19 (их можно впаять на место R70 и R71), чтобы сигнальные дорожки кварца не выходили на разъёмы платы.
Ещё нужно перерезать одну дорожку (не люблю резать дорожки, но здесь это меньшее из зол). Дело в том, что STM32L053C8 через транзистор T6 управляет питанием дисплея и эту возможность необходимо сохранить, так как если запитать дисплей напрямую от батарейки и не выключать его на периоды бездействия, будет лишнее потребление. Транзистор T6 подаёт питание на дисплей с шины 3V3, которая подключена к токоизмерительному МК и его обвязке. Так как мы не хотим тратить на него энергию, мы вообще не будем питать шину 3V3 и подключим плюс батарейки на шину VDD. Значит и на исток транзистора T6 нужно подать шину VDD, а 3V3 убрать. Вот почему нужно отрезать эту линию от него и подать в эту точку напряжение батарейки.

Ещё придётся выпаять резистор R44. Его можно было бы и оставить, но тогда пришлось бы заниматься фигурным вырезанием меди, поэтому его проще выпаять и заменить выводным номиналом в 100 кОм. Этот резистор подтягивает затвор транзистора к питанию для предотвращения случайного открытия.

Батарейка припаивается плюсом к шине VDD, а минусом её нужно подключить к GND. Шина VDD это фактически пины питания STM32L053C8, так что напряжение от батарейки пойдет на него напрямую, без стабилизаторов напряжения и какой-либо защиты от переполюсовки. Нужно обязательно соблюдать полярность и подавать не больше 3.3 вольт (максимально допустимо 3.6).

И последняя доработка: замыкание перемычек SB2, SB3. Для установки времени и даты используется последовательный порт МК (USART1) подключенный к UART-USB преобразователю, реализованному на ST-LINK v2.1. Это подключение и осуществляется замыканием перемычек SB2, SB3.

После вышеописанных манипуляций, ток потребления платы в периода покоя (МК в режиме Standby with RTC), стал равен 0.7 мкА, что крайне немного и батарейки должно хватать надолго (годы). При этом сохраняется возможность использования встроенного ST-Link для прошивки STM32L053C8. Прошивать можно не отключая батарейку, главное чтобы джампер JP4 отсутствовал. Если же хочется работать с платой без батарейки, то нужно отсоединив батарейку, вернуть на место джампер JP4 (положение OFF), чтобы STM32L053C8 питался от платы. Но если подключена батарейка и одет джампер JP4, плату нельзя подключать к USB, потому что тогда напряжение с платы пойдет в батарейку!

Программа


Программа написана в EmBlocks 2.30 (компилятор ARM-GCC) и базируется на примерах работы с периферией из пакета STM32Cube_FW_L0_V1.1.0. Вообще хотелось использовать CoIDE, но он ещё не поддерживает этот МК.

Несколько слов про алгоритм работы программы и то как пользоваться устройством. После сброса, проверяется установлены ли дата и время. Если нет, то на экране появляется приглашение установить часы, используя терминал:

image

Для этого нужно подключить плату к компьютеру, используя USB разъём (центральный). В терминале задать скорость/чётность: 9600, 8n1, открыть соединение, и нажать на плате кнопку Reset. В терминале должно появится приглашение для установки даты и времени. Также нужно задать количество дней для обратного отсчета. После успешного конфигурирования на экране отображается 2 счётчика: увеличения и уменьшения количества дней. Затем микроконтроллер переходит в режим Standby (самый энергоэффективный). Пробудить его может наступление нового дня (в полночь), нажатие кнопки Reset или кнопки User. При наступлении нового дня, на экране обнавляются оба счётчика. Для сброса увеличивающегося счётчика нужно нажать кнопку User (категорически запрещено делать это в полночь!). Для просмотра текущей времени и даты нужно нажать кнопку сброс. Если нужно изменить время и дату (например для подстройки часов) или задать новое значение счётчика обратного отсчета, то это можно сделать, если после нажатия кнопки Reset, в течении 10 секунд, установить соединение по терминалу (нажать Enter). На экране при этом будет:

image

Исходники и готовый hex файл доступны на github.

Возможные усовершенствования:
  • поддержка кириллицы, чтобы можно было на самом экране описать событие, например: «До нового года осталось 365 дней»;
  • отказаться от конфигурирования через терминал в пользу эмуляции съёмного диска. Тогда для настройки нужно будет отредактировать текстовый файл в котором задавать дату/время, новое значение счётчика и отображаемую фразу.
Станислав Омельницкий @stml
карма
2,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (24)

  • +4
    А где такой индикатор можно достать ОТДЕЛЬНО?
    • +1
      • +6
        Ценник что-то очень адский.
        • 0
          Какой курс, такой и ценник)
          • +2
            Да и вдвое дешевле, все равно было бы невменяемо, имхо.
            • +3
              6 дюймовый elink дисплей (как запчасть к ридеру) и то стоит дешевле. Недавно покупал для своих поделок 7-дюймовый TFT дисплей вместе с контроллером (входы VGA, HDMI, RCA), опять же — дешевле ((
              • +1
                Осталось найти на этот шестидюймовый экранчик спецификацию и в удовольствие в своих поделках юзать его. Для шести дюймов у него вполне терпимая цена.
                • 0
                  Там оно вместе с контроллером. Если нет спеков на контроллер, в теории можно конечно еще в драйверах ридера покопаться.
                  • +8
                    Примерно год назад появилась статья как подключить 6" E-INK экран к STM32.

                    Экран от Amazone Kindle 2 6" (ED060SC4V2) на aliexpress стоит около $15.
                    Для подключения потребуется много нестандартных уровней напряжения (+22 V, +15 V, -15 V and -20 V) и FPC-коннектор.

                    Схема подключения — essentialscrap.com/eink/schematics.png

    • 0
      Здесь например:
      www.seeedstudio.com/depot/27-ePaper-Panel-p-1596.html

      Цены на них действительно негуманные
      • 0
        Купил примерно такой же 2.7". Но моей ардуине памяти не хватает весь кадр хранить. Теперь вот сижу думаю.
        • 0
          Слышал, выходят из ситуации, подгружая графику с внешней памяти (например, с SD) или с сети (нужен сервер, отдающий информацию). Применимо для «чистых» AVR, наверняка на ардуино тоже реализуемо.
          • 0
            Для готовой графики, хранящейся во флеше, памяти таки хватит, даже не на один кадр — он весит 6 килобайт. А если сжимать методом а-ля RLE, то многие несложные картинки будут превращаться в несколько сотен байт. Если в оперативке нужно хранить, тогда да…
            • 0
              Если надо рисовать что-то динамически, то в оперативке.
              Я думал сначала дополнительную SPI ОЗУ подключить, но проще будет SD действительно.
              • 0
                В итоге решил эту проблему софтово — обновляя экран в четыре приема. Сэкономили память, но естественно в 4 раза медленнее.
  • +1
    Интересное применение, говорите? Я ожидал большего. Часы/напоминатель есть в любом смартфоне.
    • +7
      В принципе вы правы, но дьявол кроется в деталях. Смартфон нужно как минимум включить, чтобы что-то увидеть (за исключением разве что yotaphone). А здесь всё таки отдельное устройство. А ещё, если захочется поставить счётчик года так на 2-3, то проживет ли с вами столько этот смартфон?
      Вообще прошу рассматривать это применение как proof of concept. Захотелось — сделал — поделился. Уверен что можно придумать что-нибудь поинтереснее и полезнее.
  • +2
    Ещё ST-Link 2.1 реализует преобразователь USB-COM, а также появляется в системе как съёмный диск, позволяя прошивать микроконтроллер простым копированием бинарного файла.

    Что, действительно можно прошивать просто копируя файл?
    • 0
      В некоторых микроконтроллерах можно использовать бутлоадер, который эмулирует съемный накопитель. На накопитель можно скопировать файл, который прошьется. Возможно, здесь так же.
      • +1
        Просто у ST-Link'а такого раньше не было, мне конкретно про него интересно.
    • 0
      Есть такое у некоторых STM. Но как по мне — несекурно. Только для домашних поделок…
      • 0
        Разве нельзя модифицировать бутлоадер чтобы принимал только подписанные прошивки?
    • +2
      Да, можно. Сам этим не пользуюсь, как-то из среды разработки удобнее. Но специально проверил: BIN файл прошился на ура.
      • 0
        Здорово, спасибо.

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