Разработка таймера на STM32 Часть 1 - физика устройства

21.01.2016 15:25 Администратор
Печать
2.0/5 (285 голоса)

Контроллер STM32 позволяет на его основе делать довольно компактные устройства с низким потреблением энергии. Воспользуемся микроконтроллером начального уровня STM32F030F4P6 для изготовления на его основе компактного многофункионального таймера. Устройство действительно многофункционо, поскольку планируется сделать церых пять режимов работы. Устройство будет отображать информацию посредством трехцифрового индикатора (семь сегментов на цифру и один на точку) и трех цветных светодиодов.

Функции будут следующими:
1. Таймер. Нужен для засекания времени и оповещения о том, что время вышло.
2. Секундомер. 
3. Термометр, кстати, практика использования шины I2C
4. Эмулятор броска двух кубиков.
5. Режим релаксации, медленного включения и выключения светодиодов разных цветов. (вот здесь нужен программный ШИМ)

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

STM32 распиновка STM32F030F4P6

Контроллер позволяет включить его практически без обвязки, подав только питание. Поскольку устройство переносное, а контроллер питается напряжением 2.4 - 3.6 вольта, то для питания используется 2 пальчиковых батарейки AA напряжением 1.5 вольта без дополнительных стабилизаторов. Контроллер работает от двух батареек, даже слегка подсевших.Единственное, что нужно внимательно соблюдать полярность. Защиты по питанию нет, если неправильно вставить батарею, то контроллер сгорит.

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

power supply STM32

Отображение будет осуществляться при помощи индикатора BA56-11GWA с общим анодом. В каждом  Общий анод позволит использовать для управления светодиодами специализированный драйвер светодиодов STP16CP05MTR у которого есть 16 выходов. Поскольку у индикатора BA56-11GWA есть выходы на каждый светодиод, то мы можем использовать статическую индикацию.

зеленый индикатор BA56-11GWA

Схема с общим анодом позволяет управлять индикатором с бОльшим, чем  у контроллера  напряжением питания, но в данном устройстве будет одно напряжение питания на всю схему. Поскольку при статической индикации для управления каждым отдельным светодиодом потребуется 24 линии управления, то будем использовать два драйвера светодиодов STP16CP05MTR, который представляет собой два стандартных сдвиговый регистра в одном корпусе, управляемых по протоколу SPI, то соединив в каскад две микросхемы, мы могли бы  управлять четырьмя цифрами.  У нас есть три, а остальные выходы задействуем для управления цветными светодиодами индикации режимов.
STP16CP05MTR 

Получаем 8 светодиодов на одну цифру, т.е. нам понадобится каскад из двух драйверов светодиодов. Кроме того, что одна микросхема драйвера фактически включает в себя два сдвиговых регистра, что неплохо экономит меcто на плате, у этого драйвера есть очень интересное свойсво, нам не нужны будут нагрузочные резисторы для каждого светодиода, поскольку используется один нагрузочный резистор один на микросхему, который подключается к выводу R-EXT
Расчитывается номинал по схеме из даташита.
расчет резисторов
Если поставить переменный резистор, то можно даже управлять яркостью светодиодов. В нашем случае был использован резистор 2 КОм для 10 милиампер тока на каждый резистор.
Информацию от пользователя будем получать при помощи двух кнопок без фиксации. Этого достаточно для создания двухуровнего меню, а если использовать отслеживание одновременного нажатия кнопок, то получим фактически три кнопки, чего будет достаточно для настройки и управления. 
Для получения значения окружающей температуры воспользуемся датчиком  
LM75ad
Датчик работает по линии I2C, и требует для подключения двух нагрузочных резисторов на эту линию.

lm75ad  подключение

Для более точной работы (хотя это и не обязательно) будет использоваться кварц 8 мегагерц.

У контроллера в корпусе TSSOP20 всего 20 выводов. Для нашего приложения они будут распределены следующим образом

 

  1. boot0  - на землю
  2. PF0    OSC_IN   - подключение кварца
  3. PF1    OSC_OUT  - подключение кварца
  4. NRST  - резет   не задействуе
  5. VDDA  -    3.3V
  6. PA0 -   не используется
  7. PA1 -       кнопка 1
  8. PA2 -       кнопка 2
  9. PA3 -   не используется 
  1. PA4    spi nssLE   - импульс защелки
  2. PA5   - SPI1_SCK    - импульсы
  3. PA6   - SPI1_MISO  не используем, будет управление ШИМ на светодиоды 
  1. PA7  -  SPI1_MOSI выход данных
  2. PB1   - простая пищалка
  1. VSS   -  3.3 v
  2. VDD   - земля
  3.  PA9   -  I2C1_SCL(2)(5)       -- для опроса температуры
  4. PA10 -  I2C1_SDA(2)(5)      -- для опроса температуры
  5. SWDIO_PA13    - отладчик
  6. SWCLK_PA14     - отладчик


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


Таймер на STM32


Схема таймера на STM32, нажмите для увеличения.

Печатная плата делалась под конкретную коробочку, поэтому пришлось расположить детали довольно компактно. Хотя плата двусторонняя, но выполнить ее вполне можно в домашних условиях методом ЛУТ.

плата таймера под STM32

Разводка платы при помощи программы Eagle вручную. Автомат не смог сделать, слишком много переходов с одной стороны на другую. Плата и схема в формате Eagle доступна для бесплатного скачивания здесь>>

Обновлено 21.01.2016 17:35 Теги: Stm32, таймер, сдвиговый регистр,

Еще по теме

Полезно? Поделитесь ссылкой! E-mail Сохраните на будущее!