25 простых аналоговых и цифровых функций по 25 центов каждая. Таймеры

30 апреля

телекоммуникациисистемы безопасностиучёт ресурсовмедицинапотребительская электроникаответственные применениялабораторные приборыинтернет вещейTexas Instrumentsстатьяинтегральные микросхемысредства разработки и материалы

Предлагаемый цикл состоит из 25 кратких заметок о том, как на основе микроконтроллеров MSP430FR2xxx производства Texas Instruments реализовать 25 наиболее популярных узлов, присутствующих на многих системных платах. В каждой заметке рассказано об основных особенностях той или иной функции, а также приведены ссылки на информационные ресурсы, содержащие примеры кода и базовые версии проектов, что позволяет начать работу практически за считанные минуты.

Часы реального времени
(External RTC With Backup Memory Using a Low Memory MSP430™ MCU)

Количество приложений, в которых необходима привязка происходящих в системе событий к абсолютному (реальному) времени, очень велико. В первую очередь к ним относятся системы управления и мониторинга, которые не должны терять связь с окружающим миром даже при отключении основного источника питания. В базовом варианте предлагаемого проекта, исходные коды которого можно скачать с официального сайта Texas Instruments, показан пример реализации часов реального времени (Real Time Clock, RTC) на основе специализированного модуля недорогого микроконтроллера MSP430FR2000. Кроме этого, в предлагаемом устройстве реализована функция резервного хранения до 16 байт пользовательских данных, размещаемых в энергонезависимой сегнетоэлектрической оперативной памяти FRAM, что позволяет использовать данный узел, например, для восстановления настроек системы при ее аварии. Обмен данными с узлом осуществляется с помощью интерфейса UART по протоколу POSIX. Используя этот протокол, можно как получить информацию о текущем времени, так и установить его необходимое значение.

Реализация

Базовый вариант проекта реализован на основе отладочной платы MSP-TS430PW20, содержащей микроконтроллер MSP430FR2000. Для работы необходимы внешний кварцевый резонатор с частотой 32768 Гц и соответствующие блокировочные конденсаторы. Для проверки узла его можно подключить к компьютеру с помощью обратных каналов программаторов-отладчиков MSP-FET или eZ-FET, которые должны быть настроены в режиме UART со скоростью передачи данных 9600 бод. Отладочная плата MSP-TS430PW20 поставляется с завода в уже предустановленной нужной конфигурации, однако перед первым запуском проекта все же необходимо проверить правильность установки перемычек JP13…JP15: JP14 и JP15 должны быть установлены, а JP13 – удалена. Такая комбинация обеспечит правильную коммутацию сигналов TXD и RXD интегрированного программатора-отладчика MSP-FET и микроконтроллера, что даст надежную связь последнего с персональным компьютером.

Обмен данными между центральным процессором и микроконтроллером MSP430FR2000 осуществляется пакетами, структура которых показана на рисунке 54, где:

Рис. 54. Структура пакета данных

Рис. 54. Структура пакета данных

  • READ = 00h – признак чтения;
  • WRITE = 01h – признак записи;
  • ADDRESS = FFh – для доступа к часам реального времени, 00h…0Fh – для доступа к хранилищу пользовательских данных;
  • D0…D3 – данные.

Примеры команд для доступа к часам реального времени и энергонезависимой памяти показаны на рисунке 55.

Рис. 55. Примеры команд обмена данными с микроконтроллером

Рис. 55. Примеры команд обмена данными с микроконтроллером

При передаче времени младший байт (LSB) передается первым, поэтому при обработке полученных значений временная метка должна интерпретироваться в зеркальном отражении – D3D2D1D0h.

Модуль часов реального времени микроконтроллера работает от источника тактового сигнала с частотой 32768 Гц и настроен на генерацию прерываний один раз секунду. В обработчике прерывания происходит обновление значения временной метки и сохранение ее в энергонезависимой памяти FRAM. Таким образом, текущее значение временной метки будет сохраняться даже при отключении питания микроконтроллера, что может быть полезно, например, для подсчета общего времени наработки устройства. В любом случае центральному процессору достаточно один раз установить начальное значение временной метки с помощью команды WRITE TIME, после чего его обновление и сохранение будут осуществляться автоматически программным обеспечением микроконтроллера MSP430™.

Результаты тестирования

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

Во время работы микроконтроллера обновление временной метки происходит каждую секунду, при этом центральный процессор может запросить ее текущее значение с помощью команды READ TIME когда угодно. Так, например, при тестировании проекта микроконтроллеров 12:49:12 была передана команда WRITE TIME, с помощью которой значение временной метки было установлено равным 78563412h. Через 7 секунд центральный процессор с помощью команды READ TIME запросил значение временной метки и получил в ответ 78563419h, которое ровно на 7 больше установленного ранее значения (рисунок 56).

Рис. 56. Результаты тестирования проекта

Рис. 56. Результаты тестирования проекта

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

И последней особенностью данного проекта, на которую следует обратить внимание, является минимальный размер исходного кода программного обеспечения, позволяющий реализовать этот узел на микроконтроллерах с объемом памяти программ, не превышающим 0,5 кбайт.

Программируемый системный будильник
(Programmable System Wake-up Controller Using MSP430™ MCUs)

Многие устройства с автономным питанием большую часть времени должны находиться в спящем режиме с пониженным энергопотреблением, переходя в активное состояние через определенные промежутки времени. Именно для таких приложений и разработан системный будильник на основе модуля часов реального времени (Real Time Clock, RTC) микроконтроллеров семейства MSP430. В базовом варианте предлагаемого проекта, исходные коды которого можно скачать с официального сайта Texas Instruments, показан пример реализации малопотребляющего системного будильника с фиксированным временем срабатывания, который, при необходимости, можно легко адаптировать под конкретную задачу.

Реализация

В базовом варианте проекта модуль часов реального времени микроконтроллера MSP430FR2000 работает от генератора с частотой 32,768 кГц, стабилизированного внешним кварцевым резонатором. Однако при необходимости для уменьшения стоимости устройства в качестве источника тактового сигнала может быть использован внутренний опорный генератор (Internal Trimmed Low-Frequency Reference Oscillator, REFO), сконфигурированный для работы без внешних компонентов (подробная информация о работе этого узла содержится в технической документации на микроконтроллер). Управление модулем осуществляется через интерфейс SPI трехбайтным пакетом, в котором первый байт содержит информацию о максимальных значениях программного, а второй и третий – аппаратного счетчиков микроконтроллера (таблица 22). Настройки интерфейса SPI приведены в таблице 23. После передачи последнего байта по SPI центральный процессор может перейти в спящий режим с пониженным энергопотреблением, в котором будет находиться на протяжении предустановленного времени. Следующая активизация центрального процессора произойдет при изменении состояния на выводе Р1.0, который используется для пробуждения системы (рисунок 57).

Рис. 57. Схема подключения будильника к центральному процессору

Рис. 57. Схема подключения будильника к центральному процессору

Таблица 22. Структура управляющего пакета

Байт 1 Байт 2 Байт 3
Максимальное значение программного счетчика INCREMENT Старший байт максимального значения аппаратного счетчика RTCMOD Младший байт максимального значения аппаратного счетчика RTCMOD

Таблица 23. Настройки интерфейса SPI

Режим работы Фаза тактового сигнала (CLKPhase) Полярность тактового сигнала (CLKPolarity) Полярность сигнала выбора кристалла (CSPolarity)
Ведомый (Slave) Изменение данных – по фронту, фиксация – по спаду Активный уровень – высокий Активный уровень – высокий

Интервал срабатывания будильника зависит от настроек модуля часов реального времени и значений, передаваемых по интерфейсу SPI. В базовом варианте проекта модуль RTC тактируется с частотой приблизительно 32,768 кГц, которая уменьшается с помощью аппаратного делителя в 1024 раза. При таких значениях тактовой частоты и коэффициента деления увеличение значения счетчика RTCCNT происходит 32 раза в секунду. Срабатывание модуля часов реального времени (генерация прерывания) происходит при совпадении значений счетчика RTCCNT и регистра RTCMOD, причем значение последнего устанавливается через SPI. Таким образом, при максимальном значении RTCMOD = 0xFFFF первое прерывание от модуля RTC будет сгенерировано приблизительно через 34 минуты. Если же по SPI передать меньшее значение RTCMOD, например, 0xE0FF, то срабатывание модуля RTC будет происходить чаще, в данном случае – каждые 30 минут. Однако сигнал для пробуждения системы будет сгенерирован только после того как количество срабатываний модуля RTC станет равным максимальному значению программного счетчика срабатываний, определяемого первым байтом INCREMENT, передаваемым по интерфейсу SPI. Таким образом, подбирая необходимые значения переменных INCREMENT и RTCMOD можно устанавливать время пробуждения системы в диапазоне от 1/32 секунды (INCREMENT = 0х01, RTCMOD = 0x0001) до 6 суток (INCREMENT = 0хFF, RTCMOD = 0xFFFF). Для определения времени пробуждения системы WAKE_UP_TIME (в секундах) можно воспользоваться формулой 1:

$$WAKE\_UP\_TIME=\frac{RTCMOD}{\frac{Тактовая\:частота}{Коэффициент\:деления\:делителя}}\times INCREMENT\\WAKE\_UP\_TIME=\frac{RTCMOD}{32}\times INCREMENT\qquad{\mathrm{(}}{1}{\mathrm{)}}$$

Алгоритм работы программного обеспечения показан на рисунке 58. Для уменьшения энергопотребления основную часть времени микроконтроллер проводит в спящем энергосберегающем режиме LPM3, из которого выходит в момент активизации передачи данных (установке на линии CS высокого логического уровня). После передачи последнего байта по интерфейсу SPI начинает работать модуль RTC, генерируя прерывания с интервалом, установленным в соответствии со значением RTCMOD. В обработчике прерываний модуля RTC происходит анализ текущего значения программного счетчика с возможным последующим увеличением. После того как значение программного счетчика станет равным величине INCREMENT или превысит ее, будет сгенерирован импульс пробуждения центрального процессора и микроконтроллер перейдет в исходное состояние. В базовом варианте проекта, пока активен модуль RTC, интерфейс SPI блокируется, поэтому до момента генерации импульса пробуждения центральный процессор не имеет возможности управления будильником. При необходимости это можно изменить, модифицируя соответствующим образом программное обеспечение. После генерации импульса пробуждения работа интерфейса SPI восстанавливается, и микроконтроллер готов к приему следующих команд.

Рис. 58. Алгоритм работы программного обеспечения

Рис. 58. Алгоритм работы программного обеспечения

Размер исходного кода откомпилированного программного обеспечения настолько мал, что позволяет использовать для реализации этого проекта микроконтроллеры с объемом памяти программ, не превышающим 500 байт, например, MSP430FR2000. Поскольку большую часть времени микроконтроллер находится в спящем режиме, то среднее значение его потребляемого тока ничтожно мало и уменьшается по мере увеличения длительности интервала пробуждения (за счет уменьшения количества выходов из режима LPM3 по прерываниям от RTC). Приблизительные значения величин потребляемого тока приведены в таблице 24.

Таблица 24. Ток потребления микроконтроллера при различных значениях интервала пробуждения системы

Время пробуждения 1 секунда 10 секунд 1 минута 1 час 1 сутки
Средний ток потребления, мкА 1,36 1,33 1,32* 1,32* 1,32*
* – расчетное значение.

Программируемый сторожевой таймер
(External Programmable Watchdog Timer Using MSP430™ MCUs)

Основной задачей сторожевых таймеров (Watchdogtimer, WDT), является обнаружение сбоев в работе программного обеспечения, вызванных либо ошибками, допущенными при написании программного кода, либо действием электромагнитных помех, приводящих, например, к изменению содержимого оперативной памяти. В нормальном режиме работы программное обеспечение центрального процессора периодически сбрасывает сторожевой таймер, тем самым не допуская его срабатывания. В случае нарушений в работе программы команда сброса не поступает, и сторожевой таймер автоматически перезапускает систему, пытаясь восстановить ее нормальную работу.

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

В базовом варианте предлагаемого проекта, исходные коды которого можно скачать с официального сайта Texas Instruments, показан пример реализации автономного сторожевого таймера, способного перезапускать центральный процессор с интервалом, находящемся в диапазоне 1…2 с, который можно настроить с шагом 200 мс. При необходимости интервал перезапуска можно дополнительно уменьшить путем изменения соответствующих констант в исходных файлах. Программное обеспечение оптимизировано по критерию минимального размера исполняемого кода, что позволяет реализовать данный проект на микроконтроллерах с размером памяти программ, не превышающим 500 кбайт, например, MSP430FR2000. Кроме этого, за счет активного использования энергосберегающих режимов, являющихся отличительной особенностью всего семейства MSP430™, данный проект отличается сверхмалым энергопотреблением, что особенно актуально для приложений с батарейным питанием.

Реализация

Базовая версия проекта реализована на микроконтроллере MSP430FR2000, сконфигурированном для управления центральным процессором, имеющим отдельный вывод сброса, как минимум один порт ввода-вывода общего назначения (GPIO) и интерфейс UART.

Длительность импульса сброса установлена равной 1 мс, однако при необходимости она может быть настроена пользователем путем изменения константы Reset_Cycles в исходном коде программного обеспечения. Контролируемым индикатором нормальной работы центрального процессора является периодическое изменение состояния на одном из его выводов, который подключается к входу P2.1 микроконтроллера сторожевого таймера (рисунок 59). Сброс таймера происходит при положительном перепаде напряжения на входе P2.1, поэтому центральный процессор должен генерировать такой перепад каждые n секунд, иначе сторожевой таймер, сформирует импульс сброса на выводе RESET и система будет перезапущена. Типовое значение n равно 1,6 с, хотя при необходимости оно может быть изменено по интерфейсу UART.

Рис. 59. Схема подключения сторожевого таймера к центральному процессору

Рис. 59. Схема подключения сторожевого таймера к центральному процессору

Для доработки и тестирования базового варианта проекта может быть задействован практически весь отладочный инструментарий Texas Instruments, в том числе и любая плата из серии MSP430 LaunchPad™. В этом случае настройку сторожевого таймера можно выполнить с помощью персонального компьютера, подключив его к интерфейсу UART через обратные каналы программаторов-отладчиков MSP-FET или eZ-FET.

Большую часть времени микроконтроллер находится в энергосберегающем режиме LPM3, выходя из него только для обработки внешних или внутренних событий (рисунок 60). Это позволяет сконцентрировать большую часть кода в обработчиках прерываний и, благодаря отсутствию постоянно исполняемых инструкций, максимально уменьшить энергопотребление.

Рис. 60. Алгоритм работы программного обеспечения

Рис. 60. Алгоритм работы программного обеспечения

Для проверки работоспособности базовой версии проекта, которая реализована на основе отладочной платы MSP-TS430PW20, достаточно просто подключить ее к персональному компьютеру с помощью обратных каналов встроенного программатора-отладчика MSP-FET. Обратите внимание, что отладочная плата MSP-TS430PW20 обычно поставляется с завода в уже предустановленной нужной конфигурации, однако перед запуском проекта все равно необходимо проверить правильность установки перемычек JP13…JP15: JP14 и JP15 должны быть установлены, а JP13 – удалена. Для управления сторожевым таймером можно использовать любую терминальную программу, подключенную к соответствующему последовательному порту компьютера, настроенного на передачу данных со скоростью 9600 бод с одним стоповым битом и без использования бита четности.

После подачи питания на отладочную плату на выходе MCU RST (вывод P1.3) микроконтроллера сторожевого таймера устанавливается высокий логический уровень, который будет удерживаться без изменений при наличии колебаний уровня сигнала на входе WDI (вывод P1.2). Но как только сигнал на входе WDI перестанет изменяться, через заданный интервал времени будет сформирован отрицательный импульс сброса на выходе MCU RST, с помощью которого можно перезапустить систему. Так, например, на верхнем наборе осциллограмм (рисунок 61) видно, что изменение уровня сигнала на входе WDI каждые 500 мс не приводит к формированию импульса сброса. В то время как на нижнем наборе четко видно, что удержание только низкого уровня сигнала на входе WDI приведет к установке низкого уровня сигнала на выходе MCU RST в течение 1 мс.

Рис. 61. Диаграммы работы сторожевого таймера при наличии и отсутствии колебаний уровня сигнала на входе WDI

Рис. 61. Диаграммы работы сторожевого таймера при наличии и отсутствии колебаний уровня сигнала на входе WDI

В базовом варианте проекта реализовано шесть фиксированных задержек формирования импульса сброса, которые можно установить, передав по UART соответствующее число от 0 до 5 (таблица 25). Передача байта, содержащего другое значение, не приведет к изменению настроек.

Таблица 25. Соответствие длительностей задержки командам, передаваемым по UART

Значение байта, передаваемого по UART Длительность задержки формирования
импульса сброса, с
0 1,0
1 1,2
2 1,4
3 1,6
4 1,8
5 2,0

Варианты модификации 

Функциональность базового варианта сторожевого таймера ограничена объемом памяти программ микроконтроллера MSP430FR2000. Однако при использовании более мощных микроконтроллеров из линейки MSP430™ появляется возможность расширить список функций предлагаемого решения, например, увеличив количество допустимых длительностей задержек или реализовав функцию сброса по команде, передаваемой через интерфейс UART. Кроме этого, в качестве источника тактового сигнала с частотой 32768 Гц можно использовать генератор, стабилизированный внешним кварцевым резонатором, что позволит не только повысить точность измерения и формирования временных интервалов, но и дополнительно уменьшит энергопотребление за счет использования более экономичных энергосберегающих режимов. Однако даже без каких-либо изменений базовый вариант проекта позволяет реализовать на базе недорогого микроконтроллера MSP430FR2000 простой и надежный сторожевой таймер для широкого круга практических приложений, с помощью которого можно эффективно защитить систему от сбоев в работе программного обеспечения.

Простейший системный будильник
(Simple RTC-Based System Wake-up Controller Using MSP430™ MCUs)

Множество практических задач не требует постоянного нахождения системы в активном режиме. Так, например, для мониторинга параметров окружающей среды (температуры, влажности и прочего), который осуществляется с помощью автономных датчиков, передающих информацию по беспроводным интерфейсам, достаточно проводить измерения не чаще чем раз в несколько минут. Таким образом, для экономного расхода заряда батареи датчик большую часть времени может находиться в спящем режиме с пониженным энергопотреблением, выходя из него только для проведения измерений и передачи результатов на центральный сервер. В базовом варианте предлагаемого проекта, исходные коды которого можно скачать с официального сайта Texas Instruments, показан пример реализации простейшего системного будильника, позволяющего выводить основной процессор из спящего режима через определенные фиксированные интервалы времени. Данный проект во многом аналогичен проекту программируемого системного будильника (Programmable System Wake-up Controller Using MSP430™ MCUs), однако, в отличие от него, он проще в управлении и реализации, а также имеет меньший уровень энергопотребления.

Реализация

В базовом варианте проекта модуль часов реального времени (Real Time Clock, RTC) микроконтроллера MSP430FR2000 работает от генератора с частотой 32,768 кГц, стабилизированного внешним кварцевым резонатором. Однако при необходимости для уменьшения стоимости устройства в качестве источника тактового сигнала может быть использован внутренний опорный генератор (Internal Trimmed Low-Frequency Reference Oscillator, REFO), сконфигурированный для работы без внешних компонентов (подробная информация о работе этого узла содержится в технической документации на микроконтроллер). Длительность интервала пробуждения жестко устанавливается при компиляции программного обеспечения и не может быть изменена после прошивки микроконтроллера. Интерфейс управления будильником является максимально простым и сводится к двум цифровым линиям, связанным с портами ввода-вывода общего назначения (GPIO), по одной из которых осуществляется запуск будильника, а по другой – пробуждение центрального процессора (рисунок 62). После установки активного уровня сигнала на выводе RTC_Start центральный процессор может перейти в спящий режим, из которого будет выведен будильником через некоторое время путем изменения уровня сигнала на выводе Wakeup (при условии, что центральный процессор имеет соответствующую функцию).

Рис. 62. Схема подключения будильника к центральному процессору

Рис. 62. Схема подключения будильника к центральному процессору

Интервал срабатывания будильника зависит от значения регистра RTCMOD модуля RTC и максимального значения программного счетчика прерываний, определяемых в исходном коде программного обеспечения. В базовом варианте проекта модуль RTC тактируется с частотой 32,768 кГц, которая уменьшается с помощью аппаратного делителя в 1024 раза. При таких значениях тактовой частоты и коэффициента деления увеличение значения счетчика RTCCNT модуля RTC происходит 32 раза в секунду. Срабатывание модуля часов реального времени (генерация прерывания) происходит при совпадении значений счетчика RTCCNT и регистра RTCMOD. Поскольку все регистры модуля RTC 16-разрядные, то при максимальном значении RTCMOD = 0xFFFF первое переполнение счетчика после сброса (первое прерывание) произойдет приблизительно через 34 минуты. В базовом варианте проекта значение RTCMOD = 0xE0FF, что обеспечивает генерацию прерываний каждые 30 минут. Однако сигнал для пробуждения системы будет сгенерирован только после того как количество срабатываний модуля RTC станет равным максимальному значению программного счетчика срабатываний, определяемого переменной INCREMENT. В базовом варианте проекта значение данной переменной равно 1, поэтому сигнал для пробуждения системы будет сгенерирован через 30 секунд. Если же значение этой переменной установить равным 2, изменив в исходном коде соответствующую директиву #define, то пробуждение системы произойдет через 1 час. Таким образом, подбирая необходимые значения переменных INCREMENT и RTCMOD, можно устанавливать время пробуждения системы в диапазоне от 1/32 секунды (INCREMENT = 0х01, RTCMOD = 0x0001) до 6 суток (INCREMENT = 0хFF, RTCMOD = 0xFFFF). Для определения времени пробуждения системы WAKE_UP_TIME (в секундах) можно также воспользоваться приведенной ранее формулой:

$$WAKE\_UP\_TIME=\frac{RTCMOD}{\frac{Тактовая\:частота}{Коэффициент\:деления\:делителя}}\times INCREMENT\\WAKE\_UP\_TIME=\frac{RTCMOD}{32}\times INCREMENT$$

Алгоритм работы программного обеспечения показан на рисунке 63. После включения питания и настройки узлов микроконтроллер переходит в спящий режим с пониженным энергопотреблением LPM3, из которого выходит по прерыванию, возникающему при переходе уровня сигнала на входе RTC_Start с низкого на высокий. После этого начинает работать модуль часов реального времени, генерируя прерывания с интервалом, определяемым настройками модуля и значением регистра RTCMOD. Когда количество прерываний станет равно значению переменной INCREMENT, на выводе Wakeup будет сформирован импульс пробуждения системы, микроконтроллер перейдет в исходное состояние и будет готов к очередному запуску. На время работы модуля RTC контроль состояния вывода RTC_Start, в том числе и прерывания, отключается, поэтому после запуска будильника центральный процессор уже не имеет возможности его ни отключить, ни перезапустить.

Рис. 63. Алгоритм работы программного обеспечения

Рис. 63. Алгоритм работы программного обеспечения

Результаты тестирования

Размер исходного кода откомпилированного программного обеспечения не превышает 200 байт, что позволяет использовать для реализации этого проекта микроконтроллеры с объемом памяти программ, не превышающим 500 байт, например, MSP430FR2000. Поскольку большую часть времени микроконтроллер находится в спящем режиме, то среднее значение его потребляемого тока ничтожно мало и уменьшается по мере увеличения длительности интервала пробуждения (за счет уменьшения количества выходов из режима LPM3 по прерываниям от RTC). Приблизительные значения измеренных и рассчитанных величин потребляемого тока приведены в таблице 26.

Таблица 26. Ток потребления микроконтроллера при различных значениях интервала пробуждения системы

Время пробуждения 1 секунда 10 секунд 1 минута 1 час 1 сутки
Средний ток потребления, мкА 1,5 1,06 1,00* < 1* < 1*
* – расчетное значение

Секундомер с семисегментными индикаторами
(7-Segment LED Stopwatch Using Low-Memory MSP430™ MCUs)

Светодиодные индикаторы используются во многих приложениях, обеспечивая пользователей самой разнообразной информацией. В данном проекте, исходные коды которого можно скачать с официального сайта Texas Instruments, три светодиодных семисегментных индикатора используются для отображения времени, измеряемого секундомером, реализованным на микроконтроллере MSP430FR2000. Основной причиной выбора именно этой модели для данного проекта является ее минимальная стоимость, обусловленная, в первую очередь, наименьшим среди представителей линейки MSP430™ размером памяти программ, равным всего 512 байт.

Реализация

Основным элементом секундомера является микроконтроллер MSP430FR2000, к которому подключены две кнопки – «Старт/Стоп» и «Сброс», – и четырехразрядный семисегментный индикатор (рисунок 64). Измерение времени производится модулем часов реального времени (Real Time Clock, RTC), настроенным соответствующим образом. Все задействованные выводы микроконтроллера работают в режиме портов ввода/вывода общего назначения (GPIO).

Рис. 64. Структурная схема секундомера

Рис. 64. Структурная схема секундомера

Высокий уровень логических сигналов на выводах P1.0…P1.6 обеспечивает засветку необходимых сегментов активного разряда индикатора, светодиоды которого должны быть включены по схеме с общим катодом, а вот выбор активного сегмента осуществляется установкой уровня логической единицы на выводах P1.7, P2.0 и P2.1. Поскольку суммарный ток одновременно засвеченных семи светодиодов значительно превышает максимально допустимый ток для вывода GPIO, то общие выводы сегментов индикатора подключаются к микроконтроллеру через транзисторные ключи, обеспечивающие как усиление тока, так и необходимую инверсию сигнала управления.

В базовом варианте проекта используются три из четырех разрядов индикатора, включаемые поочередно путем формирования соответствующих сигналов на выводах P1.7, P2.0 и P2.1. Для предотвращения появления видимых мерцаний частота обновления разрядов должна быть выше 10 Гц. В базовом варианте проекта она равна приблизительно 3,3 кГц (рисунок 65).

Рис. 65. Диаграммы сигналов на выводах P1.7, P2.0 и P2.1

Рис. 65. Диаграммы сигналов на выводах P1.7, P2.0 и P2.1

Поскольку в проекте используются всего три разряда индикатора, то с помощью предлагаемого секундомера можно измерять время либо в диапазоне 1…999 секунд с минимальным интервалом, равным 1 секунде, либо при дополнительной засветке точки во втором разряде – в диапазоне 0,1…99,9 секунд с точностью 0,1 секунда.

Кнопка, подключенная к выводу P2.6, предназначена для управления процессом измерения времени. Если секундомер остановлен, то нажатие на эту кнопку приведет к его запуску, а если находится в режиме счета – то к его остановке.

Кнопка, подключенная к выводу P2.7, используется для обнуления секундомера. При обнаружении положительного перепада напряжения на этом выводе произойдет сброс результатов и остановка секундомера, если до этого он находился в режиме счета.

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

Измерение времени осуществляется с помощью модуля RTC, тактируемого сигналом, полученным путем деления на 64 вспомогательной тактовой частоты (Auxiliary Clock, ACLK) 32,768 кГц, получаемой от низкочастотного опорного генератора (Low-Frequency Reference Oscillator, REFO). Если при этом установить максимальное значение счетчика RTC равным 51, то можно получить прерывания, генерируемые каждые 0,1 секунды (формула 2):

$$\frac{64}{32768}\times 51\approx 0.1\:с\qquad{\mathrm{(}}{2}{\mathrm{)}}$$

Примеры работы секундомера показаны на рисунке 66.

Рис. 66. Примеры работы секундомера: а) после нажатия на кнопку «Сброс»; б) во время измерений

Рис. 66. Примеры работы секундомера: а) после нажатия на кнопку «Сброс»; б) во время измерений

Варианты модификации

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

Точность измерения времени определяется стабильностью тактового генератора. В базовом варианте проекта использовался опорный генератор REFO, работающий без внешних компонентов. Максимальное отклонение частоты при использовании его в таком режиме составляет ±3,5% в диапазоне рабочих температур -40…85°C и напряжений питания 1,8…3,6 В. Таким образом, максимальная ошибка данного секундомера не превышает ±35 мкс/с. Если требуется измерять время с большей точностью, то следует использовать генератор на основе внешних кварцевых резонаторов, а также принять дополнительные меры для стабилизации частоты при колебаниях температуры окружающей среды и напряжения питания.

Наиболее простой модификацией данного проекта является внесение незначительных изменений в исходный код программного обеспечения, которые превратят секундомер в таймер обратного отсчета.

Монитор напряжения с привязкой к реальному времени
(Voltage Monitor with a Timestamp Using a Low-Memory MSP430™ MCU)

Контроль напряжения питающих шин крайне важен для приложений с батарейным питанием, поскольку позволяет не только своевременно сохранить необходимые данные, но и предотвратить аварию в случае, например, потери емкости батареи. Однако при таком подходе системе чаще всего приходится оперировать данными о величинах напряжения, привязанных к конкретным моментам времени. Эту задачу можно с успехом решить с помощью предлагаемого монитора напряжения, исходные коды которого можно скачать с официального сайта Texas Instruments. Базовый вариант проекта реализован на микроконтроллере MSP430FR2000, в котором для решения данной задачи задействованы модули компаратора (eCOMP) и часов реального времени (RTC). Обмен данным с центральным процессором осуществляется через интерфейс UART. Особенностью данного проекта является сохранение временной метки в энергонезависимой сегнетоэлектрической памяти микроконтроллера (FRAM), поэтому привязка событий в системе сохраняется даже при отключении питания микроконтроллера монитора. При необходимости текущее значение времени можно прочитать или установить в формате POSIX через интерфейс UART с помощью соответствующих команд.

Реализация

В базовом варианте проекта, реализованном на базе микроконтроллера MSP430FR2000, контролируемое напряжение питания VSUPPLY уменьшается делителем напряжения, образованным внешними резисторами R1 и R2, и подается на неинвертирующий вход интегрированного компаратора (рисунок 67). Величина напряжения на входе компаратора VIN определяется формулой 3:

$$V_{IN}=\frac{V_{SUPPLY}\times R_{1}}{R_{1}+R_{2}}=\frac{V_{SUPPLY}}{3}\qquad{\mathrm{(}}{3}{\mathrm{)}}$$

Инвертирующий вход компаратора подключен к 6-разрядному интегрированному цифро-аналоговому преобразователю, источником опорного напряжения для которого выбран внутренний стабилизатор с напряжением 1,5 B. Величина напряжения на выходе ЦАП VTH в исходном коде программного обеспечения определяется макросом COMPTHR и при необходимости может быть рассчитана по формуле 4:

$$V_{TH}=\frac{COMPTHR\times 1.5}{64}=\frac{43\times 1.5}{64}\approx 1\:В\qquad{\mathrm{(}}{4}{\mathrm{)}}$$

Измерения времени осуществляются с помощью модуля RTC, тактируемого выходным сигналом внутреннего генератора, стабилизированного внешним кварцевым резонатором с частотой 32768 Гц. Значения временных меток можно прочитать и установить с помощью интерфейса UART в формате POSIX.

Рис. 67. Структурная схема монитора напряжения

Рис. 67. Структурная схема монитора напряжения

При уменьшении напряжения питания меньше 3 В напряжение на неинвертирующем входе компаратора VIN станет меньше опорного напряжения VTH = 1 В. Этого будет достаточно для того чтобы модуль компаратора сгенерировал прерывание, в обработчике которого в энергонезависимой памяти FRAM будет зафиксировано время наступления этого события. Для уменьшения количества срабатывания компаратора в области пороговых значений модуль eCOMP настроен на работу с гистерезисом, равным 30 мВ. При необходимости, в зависимости от требований конкретного приложения, можно выбрать другую величину порогового напряжения. Для этого необходимо изменить либо коэффициент передачи резистивного делителя напряжения, либо макрос COMPTHR, отвечающий за величину опорного напряжения на инвертирующем входе компаратора.

Напряжение на неинвертирующем входе компаратора определяется соотношением сопротивлений делителя напряжения. При выборе абсолютных значений сопротивлений резисторов следует учитывать, что их увеличение может привести к уменьшению точности измерений, ведь в этом случае уже становится ощутимым влияние входного тока компаратора, а уменьшение – к увеличению общего энергопотребления узла. Поэтому перед окончательным принятием решения рекомендуется предварительно ознакомиться с «Руководством по оптимизации резисторов делителей напряжения для компараторов», доступного на официальном сайте Texas Instruments. Одним из вариантов уменьшения энергопотребления узла является подключение нижнего резистора R1 (рисунок 67) к одному из неиспользуемых портов ввода-вывода GPIO. В этом случае установка низкого уровня на этом выводе приведет к соединению резистора R1 с общим проводом и, соответственно, к появлению возможности нормального проведения измерений, а высокого – к уменьшению энергопотребления узла, поскольку в данном случае ток через делитель протекать не будет.

Обмен данными между центральным процессором и микроконтроллером MSP430FR2000 осуществляется в форме пакетов данных, структура которых показана на рисунке 68, где:

  • READ = 00h – признак чтения;
  • WRITE = 01h – признак записи;
  • D0…D3 – данные.

Рис. 68. Структура пакета данных

Рис. 68. Структура пакета данных

Один из вариантов обмена данными между центральным процессором и монитором напряжения приведен на рисунке 69.

Рис. 69. Примеры команд обмена данными с микроконтроллером

Рис. 69. Примеры команд обмена данными с микроконтроллером

При передаче времени младший байт (LSB) передается первым, поэтому при обработке полученных значений временная метка должна интерпретироваться в зеркальном отражении – D3D2D1D0h.

Протокол обмена данными и исходный код программного обеспечения были оптимизированы по критерию минимального размера откомпилированного кода, что позволило реализовать этот проект на микроконтроллере MSP430FR2000 с наименьшим объемом памяти программ – 0,5 кбайт. Более детальную информацию об особенностях реализации часов реального времени можно получить, ознакомившись с похожим проектом «Часы реального времени», также доступном на сайте Texas Instruments. Базовый вариант проекта был протестирован на отладочной плате MSP-TS430PW20, причем роль центрального процесса выполнял персональный компьютер, подключенный к микроконтроллеру с помощью обратных каналов программатора-отладчика eZ-FET, настроенных на передачу данных со скоростью 9600 бод. 

Результаты тестирования

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

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

Значение временной метки изменяется в обработчике прерывания от модуля RTC один раз в секунду. При необходимости ее значение может быть передано центральному процессору в любое время по команде READ TIME. На рисунке 70 показан пример обмена данными между центральным процессором и микроконтроллером. Как видно из примера, в 11:57:00 микроконтроллеру была передана команда WRITE TIME, с помощью которой значение временной метки было установлено равным 78563412h. Через 5 секунд, в 11:57:05, центральный процессор с помощью команды READ TIME запросил текущее значение временной метки и получил в ответ значение 78563417h, которое ровно на 5 секунд больше установленного ранее значения.

Рис. 70. Пример обмена данными между центральным процессором и микроконтроллером

Рис. 70. Пример обмена данными между центральным процессором и микроконтроллером

Для того чтобы откомпилированную программу можно было разместить в памяти программ размером 0,5 кбайт, исходный код программного обеспечения пришлось  значительно упростить, поэтому протокол обмена данными через интерфейс UART содержит всего две команды, а текущее значение временной метки можно получить только с помощью программатора-отладчика по интерфейсу JTAG. Однако нет никаких объективных препятствий для реализации данного проекта на микроконтроллерах MSP430™ с большим объемом памяти программ, что позволит значительно расширить функциональность проекта.

Список ранее опубликованных глав

•••

Наши информационные каналы

О компании Texas Instruments

В середине 2001 г. компании Texas Instruments и КОМПЭЛ заключили официальное дистрибьюторское соглашение, которое явилось результатом длительной и успешной работы КОМПЭЛ в качестве официального дистрибьютора фирмы Burr-Brown. (Как известно, Burr-Brown вошла в состав TI так же, как и компании Unitrode, Power Trend и Klixon). С этого времени компания КОМПЭЛ получила доступ к поставке всей номенклатуры производимых компанией TI компонентов, технологий и отладочных средств, а также ...читать далее

Товары
Наименование
MSP430FR2111IPW16 (TI)
MSP430FR2532IRGET (TI)
MSP430FR2110IPW16R (TI)
MSP430FR2000IPW16R (TI)
MSP430FR2032IG48R (TI)
MSP430FR2032IPMR (TI)
MSP430FR2033IG56R (TI)
MSP430FR2100IPW16R (TI)
MSP430FR2111IPW16R (TI)
MSP430FR2153TDBTR (TI)
MSP-TS430PW20 (TI)