Контроллер STM32 позволяет на его основе делать довольно компактные устройства с низким потреблением энергии. Воспользуемся микроконтроллером начального уровня STM32F030F4P6 для изготовления на его основе компактного многофункионального таймера. Устройство действительно многофункционо, поскольку планируется сделать церых пять режимов работы. Устройство будет отображать информацию посредством трехцифрового индикатора (семь сегментов на цифру и один на точку) и трех цветных светодиодов.
Функции будут следующими:
1. Таймер. Нужен для засекания времени и оповещения о том, что время вышло.
2. Секундомер.
3. Термометр, кстати, практика использования шины I2C
4. Эмулятор броска двух кубиков.
5. Режим релаксации, медленного включения и выключения светодиодов разных цветов. (вот здесь нужен программный ШИМ)
Начнем с проектирования "железа".
Все устройство будет управляться контроллером STM32F030F4P6 и для этих функций возможностей STM32 более чем достаточно, даже с небольшим количеством выводов в корпусе TSSOP20
Контроллер позволяет включить его практически без обвязки, подав только питание. Поскольку устройство переносное, а контроллер питается напряжением 2.4 - 3.6 вольта, то для питания используется 2 пальчиковых батарейки AA напряжением 1.5 вольта без дополнительных стабилизаторов. Контроллер работает от двух батареек, даже слегка подсевших.Единственное, что нужно внимательно соблюдать полярность. Защиты по питанию нет, если неправильно вставить батарею, то контроллер сгорит.
Согласно даташиту необходимы конденсаторы для уменьшения помех. Хотя при батарейном питании помех будет несколько меньше, чем при питании от сети, но все-таки включим в схему все указанные конденсаторы
Отображение будет осуществляться при помощи индикатора BA56-11GWA с общим анодом. В каждом Общий анод позволит использовать для управления светодиодами специализированный драйвер светодиодов STP16CP05MTR у которого есть 16 выходов. Поскольку у индикатора BA56-11GWA есть выходы на каждый светодиод, то мы можем использовать статическую индикацию.
Схема с общим анодом позволяет управлять индикатором с бОльшим, чем у контроллера напряжением питания, но в данном устройстве будет одно напряжение питания на всю схему. Поскольку при статической индикации для управления каждым отдельным светодиодом потребуется 24 линии управления, то будем использовать два драйвера светодиодов STP16CP05MTR, который представляет собой два стандартных сдвиговый регистра в одном корпусе, управляемых по протоколу SPI, то соединив в каскад две микросхемы, мы могли бы управлять четырьмя цифрами. У нас есть три, а остальные выходы задействуем для управления цветными светодиодами индикации режимов.
Получаем 8 светодиодов на одну цифру, т.е. нам понадобится каскад из двух драйверов светодиодов. Кроме того, что одна микросхема драйвера фактически включает в себя два сдвиговых регистра, что неплохо экономит меcто на плате, у этого драйвера есть очень интересное свойсво, нам не нужны будут нагрузочные резисторы для каждого светодиода, поскольку используется один нагрузочный резистор один на микросхему, который подключается к выводу R-EXT
Расчитывается номинал по схеме из даташита.
Если поставить переменный резистор, то можно даже управлять яркостью светодиодов. В нашем случае был использован резистор 2 КОм для 10 милиампер тока на каждый резистор.
Информацию от пользователя будем получать при помощи двух кнопок без фиксации. Этого достаточно для создания двухуровнего меню, а если использовать отслеживание одновременного нажатия кнопок, то получим фактически три кнопки, чего будет достаточно для настройки и управления.
Для получения значения окружающей температуры воспользуемся датчиком
Датчик работает по линии I2C, и требует для подключения двух нагрузочных резисторов на эту линию.
Для более точной работы (хотя это и не обязательно) будет использоваться кварц 8 мегагерц.
У контроллера в корпусе TSSOP20 всего 20 выводов. Для нашего приложения они будут распределены следующим образом
- boot0 - на землю
- PF0 OSC_IN - подключение кварца
- PF1 OSC_OUT - подключение кварца
- NRST - резет не задействуе
- VDDA - 3.3V
- PA0 - не используется
- PA1 - кнопка 1
- PA2 - кнопка 2
- PA3 - не используется
- PA4 spi nssLE - импульс защелки
- PA5 - SPI1_SCK - импульсы
- PA6 - SPI1_MISO не используем, будет управление ШИМ на светодиоды
- PA7 - SPI1_MOSI выход данных
- PB1 - простая пищалка
- VSS - 3.3 v
- VDD - земля
- PA9 - I2C1_SCL(2)(5) -- для опроса температуры
- PA10 - I2C1_SDA(2)(5) -- для опроса температуры
- SWDIO_PA13 - отладчик
- SWCLK_PA14 - отладчик
При проектировании не забываем о том, что нужно будет программировать контроллер, поэтому для просторы оставляем контакты отладчика свободными, к тому же у нас нет большой необходимости в задействовании всех портов ввода-вывода. Схема:
Схема таймера на STM32, нажмите для увеличения.
Печатная плата делалась под конкретную коробочку, поэтому пришлось расположить детали довольно компактно. Хотя плата двусторонняя, но выполнить ее вполне можно в домашних условиях методом ЛУТ.
Разводка платы при помощи программы Eagle вручную. Автомат не смог сделать, слишком много переходов с одной стороны на другую. Плата и схема в формате Eagle доступна для бесплатного скачивания здесь>>