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

28 марта

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

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

Эмулятор EEPROM
(EEPROM Emulation Using Low-Memory MSP430™ FRAM MCUs)

Энергонезависимая электрически стираемая программируемая память (Electrically Erasable Programmable Read-Only Memory, EEPROM) используется во многих приложениях для хранения небольших объемов данных. Обычно в EEPROM хранятся калибровочные константы, идентификационная информация об устройстве или резервные копии данных для восстановления системы после сбоев. Альтернативой этой технологии вполне может стать сегнетоэлектрическая память с произвольным доступом (Ferroelectric Random Access Memory, FRAM), которой оснащен ряд моделей микроконтроллеров из семейства MSP430™. Особенностью FRAM является сверхмалое потребление энергии по сравнению EEPROM, что позволяет записывать информацию с затратами энергии, практически такими же, как и при использовании обычной статической ОЗУ. Кроме этого, FRAM имеет практически неограниченное число циклов перезаписи и не требует обновления содержимого запоминающих ячеек.

В данном проекте, исходные коды которого можно загрузить с официального сайта Texas Instruments, на основе самого простого представителя семейства MSP430™ – микроконтроллера MSP430FR2000, содержащего всего 512 байт памяти программ, реализован эмулятор EEPROM объемом 48 байт. Для хранения информации используется часть FRAM-памяти программ. При необходимости хранения большего объема информации или реализации большего количества функций базовый вариант предлагаемого проекта может быть легко модифицирован для использования более мощных микроконтроллеров семейства MSP430™.

Реализация

Для передачи информации эмулятор EEPROM использует интерфейс SPI, причем микроконтроллер MSP430™ работает в режиме ведомого устройства. Кроме типичных для данного интерфейса линий SCLK, MOSI, MISO и CS/EN (рисунок 25) в микроконтроллере также реализована защита от записи (WP).

Рис. 25. Схема подключения эмулятора EEPROM

Рис. 25. Схема подключения эмулятора EEPROM

Линия CS/EN разрешает работу приемопередатчика интерфейса SPI и имеет активный низкий уровень. В базовом варианте проекта реализованы всего две функции: запись и чтение, имеющие коды операций, соответственно, 0x02 и 0x03, при этом запись информации в FRAM производится только при высоком уровне на линии WP. Также в базовой версии проекта реализована только 8-битная адресация данных, что ограничивает объем хранимой в эмуляторе информации 256 байтами, хотя при необходимости увеличения количества хранимых данных протокол обмена данными между центральным процессором и эмулятором также может быть легко модифицирован.

На рисунках 26 и 27 показаны процессы, происходящие во время обмена данными по интерфейсу SPI. При записи информации в эмулятор вначале передается код операции (0x02), а затем адрес первой ячейки (0x0F) (рисунок 26), после чего сразу же начинается передача информационных байтов. В данном случае передается два байта (0xCEB4), в которые будут записаны, соответственно, в ячейки с адресами 0x0F и 0x10.

Рис. 26. Запись информации в эмулятор EEPROM

Рис. 26. Запись информации в эмулятор EEPROM

Процесс чтения происходит аналогично (рисунок 27): вначале передается код операции (0x03) и начальный адрес (0x10). После небольшой паузы, необходимой для подготовки микроконтроллера к передаче данных, по линии MISO будет передано содержимое ячейки с адресом 0x10 (в данном случае – записанное ранее значение 0xB4). При продолжении тактирования линии CLK будет произведено чтение следующей ячейки (с адресом 0x11). Также тестирование показало наличие корректной информации в записанной ранее ячейке с адресом 0x0F (0xCE).

Рис. 27. Чтение информации из эмулятора EEPROM

Рис. 27. Чтение информации из эмулятора EEPROM

После передачи кода операции и начального адреса продолжение тактирования линии CLK приведет к последовательному чтению или записи всех последующих ячеек до тех пор, пока не будет достигнут конец адресного пространства (в данном случае – 0xFF), после чего до следующего сеанса обмена все последующие команды будут игнорироваться.

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

Использование микроконтроллера MSP430FR2000 имеет ряд ограничений, в первую очередь из-за малого объема памяти программ (512 байт) и низкой тактовой частоты. Так, например, после установки низкого уровня на линии CS/EN и с началом первого тактового импульса на линии CLK должна быть пауза продолжительностью не менее 75 мкс. При чтении информации из эмулятора необходима задержка не менее 150 мкс между передачей адреса и приемом первого байта (рисунок 27). Кроме этого, между двумя сеансами обмена данными по интерфейсу SPI на линии CS/EN должен присутствовать высокий логический уровень в течение не менее 100 мкс.

Увеличить количество хранимой информации и быстродействие эмулятора можно путем использования микроконтроллеров с большим объемом памяти и применением более высокой тактовой частоты. Например, в данном проекте можно с успехом применить микроконтроллер MSP430FR2100 с объемом памяти программ 1 кбайт. А для создания еще более емкого хранилища данных с большим количеством функций можно воспользоваться опорным проектом TIDM-FRAM-EEPROM на основе микроконтроллера MSP430FR5994 с объемом FRAM 256 кбайт.

В данном примере при отсутствии передачи данных используется энергосберегающий режим LPM3, в котором ток потребления модуля SPI при напряжении питания 3 В составляет 20 мкА, причем значительная часть этого тока обусловлена наличием подтягивающего резистора на лини CS/EN. Кроме этого, 15 мкА необходимо для работы низкочастотного RC-генератора (REFO), хотя в качестве источника тактового сигнала можно использовать и вспомогательный тактовый генератор (ACLK) с внешним кварцевым резонатором, потребляющий ток, равный всего 2 мкА. Уровень потребляемой мощности в активном режиме зависит от объема передаваемых данных по интерфейсу SPI и частоты обращения к FRAM, поэтому данная величина должна оцениваться разработчиком в зависимости от конкретного технического задания.

Контроллер клавиатуры
(Low-Power Hex Keypad Using MSP430™ MCUs)

Клавиатуры используются во многих приложениях, а вот вопрос создания простого, бюджетного и эффективного контроллера этого элемента пользовательского интерфейса до сих пор окончательно не решен, ведь с каждым годом появляются новые решения, позволяющие улучшить те или иные характеристики этого узла. Одним из таких решений является микроконтроллер MSP430FR2000, имеющий всего 512 байт энергонезависимой сегнетоэлектрической памяти программ (FRAM) и ультрамалое, благодаря гибким настройкам энергосберегающих режимов, энергопотребление, с помощью которого можно разработать недорогой и экономичный контроллер клавиатуры, позволяющий значительно продлить время автономной работы устройств с батарейным питанием.

Особенностью данного проекта, исходные коды которого можно скачать с официального сайта Texas Instruments, является активное использование механизма прерываний, что исключает необходимость постоянной проверки состояния клавиш и требует минимального количества внешних компонентов. При нажатии одной клавиши ток потребления системы при напряжении питания 3 В равен всего 0,58 мкА, а его максимальное значение (при нажатии всех клавиш) не превышает 2,6 мкА. Передача информации центральному процессору о состоянии клавиш осуществляется по интерфейсу UART с помощью модуля eUSCI со скоростью 4800 бод. В проекте используется содержащая клавиатуру плата расширения Infrared BoosterPack™ Plug-In Module, предназначенная для разработки пультов дистанционного управления с передачей данных инфракрасным способом, и несколько внешних подтягивающих резисторов.

Реализация

Для контроля клавиш клавиатуры используется метод, описанный в руководстве «Реализация клавиатуры с ультрамалым энергопотреблением» (“Implementing An Ultralow-Power Keypad Interface”. Его суть заключается в выводе микроконтроллера из режима пониженного энергопотребления с генерацией прерывания при изменении состояния выводов порта 1. Клавиши включены по матричной схеме, при этом столбцы подключены к выводам P2.0, P2.1, P2.6 и P2.7, а строки – к выводам P1.0 – P1.3 порта 1 (рисунок 28).

Рис. 28. Схема подключения клавиатуры с кодами клавиш

Рис. 28. Схема подключения клавиатуры с кодами клавиш

На этапе инициализации подключенные к столбцам клавиатуры порты P2.0, P2.1, P2.6 и P2.7 микроконтроллера MSP430 настраиваются в режим выхода, после чего на них устанавливается высокий уровень логического сигнала. Одновременно порты P1.x, к которым подключены строки клавиатуры, настраиваются в режим входа, и на них, с помощью внешних подтягивающих резисторов сопротивлением 4,7 МОм, устанавливается уровень логического нуля. После этого микроконтроллер переводится в режим пониженного энергопотребления, при котором он потребляет ток, равный 0,58 мкА.

При нажатии на любую клавишу происходит электрическое соединение выводов микроконтроллера, подключенных к столбцам, с выводами, подключенными к строкам клавиатуры, в результате чего на одном или нескольких выводах порта P1.x изменится уровень логического сигнала. Это приведет к возникновению прерывания, настроенного на срабатывание по фронту сигнала на выводах порта 1, и к выводу микроконтроллера из энергосберегающего режима 4 (LPM4), в котором он находился до момента активизации клавиатуры. Поскольку при нажатии на клавишу происходит «дребезг» контактов, то сразу после пробуждения активизируется сторожевой таймер (WDT), и микроконтроллер приблизительно на 15 мс переводится в энергосберегающий режим 3 (LPM3), позволяющий дополнительно уменьшить энергопотребления на этом интервале.

После срабатывания сторожевого таймера (WDT) микроконтроллер переходит в активный режим, после чего запускается алгоритм сканирования клавиатуры и передача по интерфейсу UART кода нажатой клавиши.

После определения и передачи кода нажатой клавиши микроконтроллер переводится в режим ожидания освобождения клавиатуры (отпускания клавиши). Для перехода в это состояние на выводе, соединенном с подключенным к нажатой клавише столбцом, устанавливается уровень логической единицы, что приводит к появлению высокого уровня на одном из выводов P1.x, а механизм обработки прерываний настраивается на генерацию прерываний по спаду импульса на выводах P1.x порта 1. После этого микроконтроллер переводится в энергосберегающий режим 4 (LPM4), в котором будет находиться до отпускания нажатой клавиши. Это ограничивает величину тока, потребляемого микроконтроллером, в том числе и при нажатии на клавиатуре нескольких клавиш.

После отпускания клавиши вначале активизируется сторожевой таймер (WDT) для блокировки микроконтроллера на время «дребезга» контактов, после чего снова запускается алгоритм опроса клавиатуры, чтобы убедиться, что все клавиши отпущены. Если обнаружено, что какие-либо клавиши еще нажаты, микроконтроллер переводится в режим ожидания отпускания клавиши, а если нет – в исходное состояние.

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

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

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

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

Программное обеспечение было разработано для клавиатур, подключаемых к микроконтроллеру в соответствии со схемой, показанной на рисунке 28, и оптимизировано по минимальному размеру результирующего кода. Это сделано для того чтобы прошивка могла разместиться в ограниченном объеме памяти программ микроконтроллера MSP430FR2000 (512 байт) и при этом еще осталось место для небольшой пользовательской модификации. Кроме этого, при создании данного проекта особое внимание было уделено уровню энергопотребления. Это позволило достичь минимальных значений тока: 0,58 мкА – в дежурном режиме и 2,6 мкА при нажатии всех клавиш, что делает это решение идеальным для устройств с батарейным питанием.

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

Многофункциональный контроллер сброса
(Multi-Function Reset Controller With Low-Memory MSP430™ MCUs)

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

В данной статье показан один из возможных вариантов контроллера сброса на основе малопотребляющих микроконтроллеров семейства MSP430™. Базовый вариант проекта, исходные коды которого можно скачать с официального сайта компании Texas Instruments, реализован на основе микроконтроллера MSP430FR2000 с использованием таймера и встроенного механизма прерываний. В предлагаемой схеме сброс внешнего устройства осуществляется вручную с помощью кнопки, а вид сброса (аппаратный или программный) определяется длительностью нажатия на нее. Особенности проекта – использование одного из самых экономичных для данного семейства режимов энергопотребления LPM4, позволяющего значительно уменьшить величину потребляемого тока, а также программное подавление «дребезга» контактов. Возможными вариантами развития проекта являются поддержка нескольких кнопок, дополнительное уменьшение энергопотребления за счет тактирования сторожевого таймера (WDT) от внутреннего RC-генератора (REFO), а также увеличение точности длительностей импульсов сброса.

Реализация

В базовой версии проекта при нажатии на кнопку, подключенную к выводу P1.1, в течение менее 0,5 секунды на выводе P1.0 генерируется импульс положительной полярности, который должен привести к «мягкому» сбросу (перезапуску программного обеспечения) центрального процессора. Если же кнопка нажата более 1 секунды, то импульс формируется на выводе P1.1, что по замыслу специалистов Texas Instruments должно привести к «жесткой» (аппаратной) перезагрузке всей системы (рисунок 30). Длительность импульсов «мягкого» и «жесткого» сброса одинакова и равна 61 мс. При необходимости, продолжительности нажатия на кнопку и импульсов сигналов сброса можно легко изменить в соответствии с требованиями конкретного приложения путем корректировки макросов исходного кода программного обеспечения.

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

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

Поскольку порты ввода-вывода микроконтроллера MSP430FR2000 оснащены внутренними подтягивающими резисторами, то для реализации данного проекта дополнительные внешние компоненты не требуются. В данной версии проекта вывод порта P1.1 через внутренний подтягивающий резистор соединен с шиной питания, что обеспечивает высокий логический уровень при отжатой или отключенной кнопке. При нажатии на кнопку уровень логического сигнала на выводе порта P1.1 изменяется с высокого на низкий, что приводит к возникновению прерывания. После этого, для исключения ложных срабатываний из-за «дребезга» контактов, контроль состояния кнопки программно отключается на 10 мс, после чего начинается измерение длительности нажатия на нее. Аналогичный алгоритм используется также и для определения отпускания кнопки, только в этом случае прерывание происходит уже по положительному фронту импульса на выводе P1.1. Необходимые длительности задержек для подавления «дребезга» контактов формируются с помощью таймера (Timer_B), тактируемого от вспомогательного тактового генератора (ACLK).

Пока кнопка не нажата, микроконтроллер MSP430FR2000 находится в наиболее экономичном энергосберегающем режиме LPM4, из которого он выходит по прерыванию, возникающему при ее нажатии. В обработчике прерываний происходит активизация сторожевого таймера (WDT) и изменение условий возникновения прерывания, создаваемого портом P1.1 – с отрицательного перепада уровня сигнала на положительный. Сторожевой таймер срабатывает каждые 250 мс, генерируя прерывание, в обработчике которого происходит увеличение значения переменной WDT_cnt, используемой для определения длительности нажатия на кнопку. После отпускания кнопки производится анализ значения переменной WDT_cnt: если оно меньше порогового значения, соответствующего 0,5 с, то импульс формируется на выводе P1.0 («мягкий» сброс), как показано на рисунке 31. Если же кнопка нажата дольше другого порогового значения (1 с), то импульс формируется уже на выводе P1.2, обеспечивая «жесткую» перезагрузку системы (рисунок 32). После формирования импульсов на выводах P1.0 или P1.2 микроконтроллер переводится в энергосберегающий режим LPM4, в котором будет находиться до следующей активизации кнопки. Кроме этого, поскольку сторожевой таймер (WDT) тактируется от вспомогательного тактового генератора (ACLK), во время измерения длительности нажатия микроконтроллер большую часть времени находится в энергосберегающем режиме LPM3, что также уменьшает энергопотребление системы.

Рис. 31. Импульс «мягкого» сброса (при нажатии на кнопку меньше 0,5 с)

Рис. 31. Импульс «мягкого» сброса (при нажатии на кнопку меньше 0,5 с)

Рис. 32. Импульс «жесткой» перезагрузки (при нажатии на кнопку более 1 с)

Рис. 32. Импульс «жесткой» перезагрузки (при нажатии на кнопку более 1 с)

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

Данный проект был успешно реализован на отладочной плате MSP-TS430PW20 и микроконтроллере MSP430FR2000. По результатам измерений, в неактивном состоянии, когда микроконтроллер находится в энергосберегающем режиме LPM4, ток потребления платы не превышает 0,6 мкА. После нажатия на кнопку микроконтроллер вначале переводится в активный режим, продолжающийся около 10 мс, после чего переключается в энергосберегающий режим LPM3, в котором величина потребляемого тока равна приблизительно 15 мкА.

Точность формирования выходных сигналов определяется абсолютной погрешностью калиброванного RC-генератора (REFO), равной ±3,5%, при этом их длительность можно изменять дискретно с шагом, определяемым периодом тактового сигнала, для частоты 32768 Гц составляющего 30,5 мкс. Более точно сформировать выходные сигналы можно при использовании внешних кварцевых резонаторов (что увеличит точность формирования временных интервалов), работающих на более высокой частоте (что уменьшит шаг дискретизации выходных сигналов). Подробную информацию о необходимых настройках тактовой подсистемы можно найти в технической документации на микроконтроллеры MSP430™, которую также можно скачать с официального сайта Texas Instruments.

Квадратурный датчик угла поворота
(Quadrature Encoder Position Counter With MSP430™ MCUs)

Квадратурные датчики угла поворота (квадратурные энкодеры) используются для определения углового положения вращающихся объектов, например, элементов ручного интерфейса или валов электродвигателей, во многих приложениях, в том числе и в регуляторах громкости, роботах и промышленном оборудовании. При вращении контролируемого элемента энкодер формирует «синусный» и «косинусный» цифровые сигналы на линиях A и B, отслеживание которых позволяет определить как направление вращения, так и угол поворота. Например, если сигнал на линии A опережает по фазе сигнал на линии B, то это означает, что объект вращается по часовой стрелке (рисунок 33), в противном случае – наоборот (рисунок 34). Подсчет же количества импульсов позволяет определить относительный (к некоторому начальному положению) угол, на который повернулся вращающийся элемент. Фактическая связь выходных сигналов с реальным движением контролируемого элемента, например, фазового сдвига сигналов линий A и B с направлением вращения или числовой меры угла поворота, приходящейся на один импульс, зависит как от конкретной модели, так и от индивидуальных стандартов и обозначений производителей энкодеров.

Рис. 33. Пример сигналов при вращении по часовой стрелке

Рис. 33. Пример сигналов при вращении по часовой стрелке

Рис. 34. Пример сигналов при вращении против часовой стрелки

Рис. 34. Пример сигналов при вращении против часовой стрелки

Таким образом, отслеживание изменений сигналов на линиях A и B с помощью микроконтроллера позволяет определить величину приращения угла поворота подвижной части системы (рисунок 35). При этом узел, выполняющий данную операцию, получил название инкрементного квадратурного датчика угла поворота (инкрементного квадратурного энкодера).

Рис. 35. Алгоритм работы инкрементного квадратурного энкодера

Рис. 35. Алгоритм работы инкрементного квадратурного энкодера

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

Реализация

Базовый вариант проекта реализован на основе отладочной платы MSP-TS430PW20 и микроконтроллера MSP430FR2000. Выходы A и B квадратурного энкодера подключаются к выводам P1.1 и P1.0 микроконтроллера, соответственно (рисунок 36). Связь с центральным процессором или персональным компьютером осуществляется с помощью интерфейса UART, передающий канал модуля которого подключен к выводу P1.7. Для соединения с персональным компьютером могут использоваться обратные каналы программаторов-отладчиков MSP-FET или eZ-FET. Передача данных осуществляется со скоростью 9600 бод. Несмотря на то что отладочная плата MSP-TS430PW20 поставляется с завода в уже предустановленной нужной конфигурации, перед запуском проекта все равно необходимо проверить правильность установки перемычек JP13…JP15: JP14 и JP15 должны быть установлены, а JP13 – удалена. Такая комбинация обеспечит правильную коммутацию сигналов TXD и RXD программатора-отладчика MSP-FET и микроконтроллера и, соответственно, надежную связь последнего с персональным компьютером.

Рис. 36. Схема подключения энкодера к микроконтроллеру

Рис. 36. Схема подключения энкодера к микроконтроллеру

Контроль текущего положения вала производится в соответствии с приведенным выше алгоритмом (рисунок 35). Отсчет приращений угла начинается после подачи питания на плату, причем его начальное значение после сброса и инициализации микроконтроллера устанавливается равным нулю. Информация о текущем положении вала передается после каждого изменения состояния линий A или B. Каждый пакет передаваемых данных состоит из трех байтов (рисунок 37). Первым байтом передается текущее значение счетчика угла поворота. При  нулевом значении счетчика дальнейшее вращение вала в сторону уменьшения угла приведет к записи в эту переменную числа 255, а при значении, равном 255, первый поворот вала в сторону увеличения угла приведет к обнулению этой переменной. В зависимости от конкретной задачи, это число может интерпретироваться центральным контроллером как беззнаковое или знаковое целое, а также использоваться в качестве младшего байта счетчика с более высокой разрядностью. После значения угла поворота передается 16-разрядная временная метка, причем старший байт передается первым.

Рис. 37. Структура пакета данных, передаваемых по интерфейсу UART

Рис. 37. Структура пакета данных, передаваемых по интерфейсу UART

Если через интерфейс UART необходимо передавать данные только о текущем значении угла поворота, то код, отвечающий за передачу данных о времени, может быть закомментирован, как показано на листинге 1:

Листинг 1.



while(!UCA)IFG&UCTXIFG));

UCA0TXBUF = pos;

__no_operation();

// while(!UCA0IFG&UCTXIFG));

// UCA0TXBUF = time >> 8;

// __no_operation();

//

// while(!UCA0IFG&UCTXIFG));

// UCA0TXBUF = time;

// __no_operation();

Значение реального угла поворота может быть подсчитано на основании данных, передаваемых по интерфейсу UART, согласно формуле 1:

$$\Delta \Theta =\frac{COUNT_{NEW}-COUNT_{OLD}}{ENCODER\_RESOLUTION},\qquad{\mathrm{(}}{1}{\mathrm{)}}$$

где:

  • Δθ – приращение угла поворота в градусах;
  • COUNTNEW, COUNTOLD – соответственно, текущее и предыдущее значения счетчика угла поворота;
  • ENCODER_RESOLUTION – количество градусов, соответствующее увеличению значения счетчика угла поворота на единицу.

Угловую скорость вращения вала можно определить на основе приращения угла поворота и разности значений временных меток по формуле 2:

$$\omega =\frac{\Delta \Theta \times RTC\_FREQ}{TIMESTAMP_{NEW}-TIMESTAMP_{OLD}},\qquad{\mathrm{(}}{2}{\mathrm{)}}$$

где:

  • ω – скорость вращения вала, °/с;
  • RTC_FREQ – тактовая частота часов реального времени, Гц;
  • TIMESTAMPNEW, TIMESTAMPOLD – соответственно, текущее и предыдущее значения временных меток.

Поскольку объем памяти программ микроконтроллера MSP430FR2000 очень мал, эти вычисления должны выполняться ресурсами центрального микроконтроллера.

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

В базовом варианте проекта используются микроконтроллер MSP430FR2000 и энкодер EN11-HSM1AF15 производства компании TT Electronics, имеющий 20 фиксированных положений на один полный оборот ручки. Для запуска проекта необходимо соединить элементы в соответствии с принципиальной схемой, загрузить в микроконтроллер программное обеспечение, запустить и завершить сеанс отладки. Информация по интерфейсу UART передается со скоростью 9600 бод, с одним стоповым битом и без использования бита четности.

Согласно технической документации энкодера, на каждой из линий А и В при переходе из одного фиксированного состояния в другое формируется по одному импульсу, что соответствует 20 импульсам на оборот (параметр Pulses Per Revolution, ppr обычно указывается в паспорте прибора большинством производителей энкодеров). Таким образом, при переходе из одного фиксированного состояния в другое и на линии A, и на линии B будет сформировано по одному полному импульсу, что приведет к изменению счетчика угла поворота на 4, поскольку изменение этой переменной происходит при каждом изменении состояния линий A или B. В этом случае приращение угла поворота, соответствующее одному импульсу будет высчитано по формуле 3:

$$ENCODER_RESOLUTION=\frac{\Delta COUNT}{\Delta \Theta }=\frac{20\times 4}{360}=0.2222°\qquad{\mathrm{(}}{3}{\mathrm{)}}$$

В базовой версии проекта часы реального времени работают с тактовой частотой 2048 Гц. Пусть в двух смежных пакетах данных, переданных по интерфейсу UART, значения счетчика угла поворота равны 0x01 и 0x02, а временных меток – 0x19E4 (6628) и 0x1A1F (6687), как показано на рисунке 38). В этом случае реальный угол поворота и скорость вращения ручки будут равны (формула 4):

$$\Delta \Theta =\frac{COUNT_{NEW}-COUNT_{OLD}}{ENCODER\_RESOLUTION}=\frac{2-1}{0.2222}=4.5°\\\omega =\frac{\Delta \Theta \times RTC\_FREQ}{TIMESTAMP_{NEW}-TIMESTAMP_{OLD}}=\frac{4.5\times 2048}{6687-6628}=156.2°//c\qquad{\mathrm{(}}{4}{\mathrm{)}}$$

В случае отрицательной разницы между временными метками (когда TIMESTAMPNEW < TIMESTAMPOLD), которая при тактовой частоте часов реального времени (RTC) 2048 Гц из-за переполнения 16-разрядной переменной возникает каждые 32 секунды, для получения корректного значения разницы времени к получившейся разнице необходимо прибавить 216 (65536). Следует также отметить, что для корректного определения скорости вращения между двумя последовательными изменениями состояний линий A и B должно пройти не более 32 секунд.

Рис. 38. Пример данных, передаваемых по интерфейсу UART

Рис. 38. Пример данных, передаваемых по интерфейсу UART

Программное обеспечение микроконтроллера может отследить изменения состояний линий A и B с максимальной частотой INTERRUPT_FREQ, равной 200 кГц, что также накладывает ограничения на максимальную скорость вращения ωMAX, которая в данном проекте не должна превышать значения, рассчитанного по формуле 5:

$$\omega _{MAX}= \frac{INTERRUPT\_FREQ}{ENCODER\_RESOLUTION}=\frac{200000}{0.2222}=900000°,\qquad{\mathrm{(}}{5}{\mathrm{)}}$$

или 15000 об/мин (RPM).

Следует отметить, что значение ωMAX значительно превышает максимально допустимую скорость вращения ручки энкодера TT Electronics EN11-HSM1AF15, которая, согласно технической документации, равна 100 об/мин.

Омметр на основе метода однократного интегрирования
(Single-Slope Analog-to-Digital Conversion Technique Using MSP430™ MCUs)

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

Принцип заключается в последовательном измерении длительностей разряда конденсатора CM через эталонный RREF и измеряемый RSENSE резисторы. Сравнивая время разряда конденсатора током, протекающим через измеряемый резистор RSENSE (tSENSE), c длительностью аналогичного процесса, но при протекании тока через эталонный резистор RREF (tREF), можно определить величину сопротивления RSENSE, используя формулу 6:

$$\frac{R_{SENSE}}{t_{SENSE}}=\frac{R_{REF}}{t_{REF}}\qquad{\mathrm{(}}{6}{\mathrm{)}}$$

Более подробная информация о данном методе приведена в руководстве по разработке малопотребляющего датчика температуры на основе метода однократного интегрирования (Implementing An Ultralow-Power Thermostat With Slope A/D Conversion), которое можно скачать с официального сайта Texas Instruments.

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

Реализация

В базовой версии проекта эталонный резистор RREF подключен к выводу P1.0, а измерительный RSENSE – к выводу P1.2 (рисунок 39). Накопительный конденсатор CM подключен между общим проводом и точкой соединения резисторов RREF и RSENSE, которая через вывод P1.1 соединена также с неинвертирующим входом модуля компаратора eCOMP0. Опорное напряжение на инвертирующем входе компаратора VCAREF формируется с помощью встроенного источника опорного напряжения. Для измерения времени заряда конденсатора используется таймер (Timer_B0), настроенный на работу в режиме захвата выходного сигнала компаратора CAOUT.

Рис. 39. Омметр с однократным интегрированием

Рис. 39. Омметр с однократным интегрированием

Для измерения сопротивления резистора RSENSE конденсатор CM вначале заряжается до напряжения, соответствующего уровню логической единицы VOH и приблизительно равного напряжению питания VCC (VOH ≈ VCC). Процесс зарядки запускается путем установки высокого уровня напряжения на выводе P1.0 (рисунок 40). После этого инициализируется таймер Timer_B0 и конденсатор CM начинает разряжаться через эталонный резистор RREF, подключенный к выводу P1.0, на котором устанавливается уровень логического нуля. Перед началом разряда и запуском таймера производится сброс регистра TAR. Когда напряжение на конденсаторе CM достигнет величины VCAREF, равной четверти напряжения питания (0,25 × VCC), уровень выходного сигнала компаратора изменится с высокого на низкий, что приведет к копированию информации из регистра TAR в регистр CCR1. В результате после разряда конденсатора CM через резистор RREF значение регистра CCR1 станет равно длительности разряда tREF. После этого аналогичным образом измеряется время разряда tSENSE конденсатора CM, но уже через измеряемый резистор RSENSE. Таким образом, в конце измерительного цикла в программе есть все данные для расчета сопротивления RSENSE по формуле 6, которое производится в основном цикле программного обеспечения.

Рис. 40. Форма напряжения на конденсаторе CM

Рис. 40. Форма напряжения на конденсаторе CM

Особенностью данного метода является возможность измерения сопротивлений нескольких резисторов RSENSE, которые можно подключить между выводом P1.1 и свободными портами микроконтроллера. Необходимо также обратить внимание, что для исключения взаимного влияния резисторов на длительность разряда конденсатора выводы микроконтроллера, к которым подключены неиспользуемые в данный момент резисторы, должны быть переведены в высокоимпедансное состояние.

Для уменьшения энергопотребления во время заряда и разряда конденсатора микроконтроллер переводится в спящий режим, из которого выходит по прерыванию, генерируемому модулем таймера. При этом во время этапов заряда и разряда используются разные типы прерываний и энергосберегающие режимы. Во время заряда конденсатора, длительность которого должна быть больше некоторого минимального значения и не является критичной, таймер может тактироваться от вспомогательного тактового генератора (ACLK), поэтому на этих этапах используется режим LPM3, из которого микроконтроллер выходит при возникновении прерывания от переполнения счетного регистра таймера. Во время разряда конденсатора для увеличения точности измерений таймер должен работать на более высокой частоте, получаемой от подсистемы распределения тактовой частоты (SMCLK), источником которой является внутренний генератор с цифровым управлением (DCO). Поэтому в данном режиме можно использовать только энергосберегающий режим LPM0, выход из которого происходит по прерыванию от захвата входного сигнала регистром CCR1. Переход в спящие режимы осуществляются в основном цикле программы, поэтому после выполнения обработчика прерываний, в котором осуществляется пробуждение микроконтроллера, основной цикл программы продолжит работу со следующей инструкции. Это позволяет значительно упростить алгоритм выполнения измерений длительностей tSENSE и tREF и, соответственно, уменьшить размер кода, необходимого для вычисления сопротивления RSENSE.

При разработке конечного приложения необходимо обратить внимание на то, что эталонный резистор RREF должен обладать повышенной точностью, а сопротивления резисторов RSENSE и RREF должны быть соизмеримыми. Так, например, в базовой версии проекта сопротивления эталонного и измеряемого резисторов находятся в районе 10 кОм. Такое требование связано с тем, что RC-цепочки, содержащие резисторы RSENSE и RREF имеют общий конденсатор CM, поэтому равенство сопротивлений RSENSE и RREF приведет к соизмеримым длительностям tSENSE и tREF, для измерения которых с одинаковой точностью не нужно изменять тактовую частоту таймера и производить дополнительные вычисления. При измерении сопротивления RSENSE другого номинала, например, терморезистора PT1000, имеющего сопротивление приблизительно 1 кОм, сопротивление RREF также должно быть 1 кОм.

Семейство MSP430™ является зарегистрированной торговой маркой Texas Instruments. Все остальные торговые марки, упоминаемые в проекте, являются собственностью соответствующих компаний.

Точность измерений также зависит от точности заряда конденсатора CM. В базовой версии проекта сопротивление эталонного резистора RREF равно 10 кОм, а накопительного конденсатора CM – 0,1 мкФ, следовательно, постоянная времени RC-цепочки RREFCM равна τ = RREF ×CM = 1 мс. При таких значениях элементов и осуществления измерений с точностью 1% время заряда конденсатора CM должно быть не менее 5τ, а для более точных измерений, например, 0,1%, время заряда необходимо увеличить до 7τ и более.

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

Несмотря на простоту, предлагаемый метод однократного интегрирования обеспечивает высокую точность проведения измерений. Так, например, в базовой версии проекта проводились измерения тестового резистора с сопротивлением 12 кОм. После обработки результатов 100 измерений среднеквадратическое отклонение составило 3,63, что соответствует точности 0,03%. При этом частота измерений составила приблизительно 75 Гц. Однако следует понимать, что при проектировании реальных приложений необходимо искать компромисс между точностью измерений и частотой их выполнения. Для повышения точности необходимо увеличивать время заряда и разряда конденсатора, однако это приводит к увеличению времени, необходимого для проведения измерений, и, соответственно, к уменьшению количества измерений за единицу времени. Кроме этого, для расчета сопротивления RSENSE, возможно, придется использовать переменные повышенной разрядности, что приведет к дополнительному увеличению количества операций, а значит – и к увеличению размера исполняемого кода. Кроме этого, максимальное значение частоты измерений также ограничено производительностью микроконтроллера, поскольку из-за отсутствия необходимых аппаратных модулей операции умножения и деления, используемые для расчета величины сопротивления RSENSE, реализованы программно, а одна подобная операция при использовании компилятора CCS требует выполнения около 122 инструкций. Тем не менее, данный проект является ярким примером реализации метода однократного интегрирования, требующей всего несколько простых внешних компонентов и микроконтроллеров с объемом памяти программ, начинающимся от 0,5 кбайт.

Монитор аналогового сигнала с порогом срабатывания
(ADC Wake and Transmit on Threshold Using MSP430™ MCUs)

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

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

Реализация

В базовой версии проекта модули 10-разрядного АЦП последовательного приближения (SAR ADC), приемопередатчика (eUSCI) и таймера (Timer_B) подключены к вспомогательной тактовой шине (ACLK), распределяющей выходной сигнал низкочастотного тактового RC-генератора (REFO) с частотой 32 кГц между периферийными устройствами. АЦП настроен на работу в режиме непрерывных измерений с частотой 2,7307 кГц, при котором следующее измерение входного сигнала, подаваемого на вывод P1.3 (A3), как изображено на рисунке 41, начинается сразу после окончания предыдущего. После подачи питания и настройки всех необходимых периферийных модулей микроконтроллер переходит в спящий режим с пониженным энергопотреблением LPM3. В этом режиме ядро микроконтроллера и все тактовые генераторы и шины, кроме REFO и ACLK, отключены, что позволяет уменьшить энергопотребление микроконтроллера. Как только измеряемое напряжение достигнет предустановленного порогового значения, на выводе P1.0 будет установлен уровень логической единицы, после чего будут активизированы модули таймера и eUSCI, с помощью которого информация о результатах измерения с заданным интервалом начнет передаваться центральному процессору по интерфейсу UART.

Рис. 41. Схема монитора аналогового сигнала

Рис. 41. Схема монитора аналогового сигнала

Базовая версия проекта реализована на отладочной плате MSP-TS430PW20, с использованием микроконтроллера MSP430FR2100. Перед запуском проекта следует убедиться, что перемычки JP14 и JP15 установлены, а JP13 – удалена. Также необходимо установить переключатель J16 в положение UART и удалить перемычки JP17 и JP18. Кроме этого, поскольку микроконтроллер MSP430FR2100 выпускается в корпусе, содержащем 16 выводов, то для правильной коммутации сигналов UART соединители на переключателе JP11 должны быть установлены в положение, замыкающее контакты 1…3 и 2…4.

Для настройки порога срабатывания системы и приема информации о результатах измерений входного сигнала используется терминальная программа, работающая под управлением персонального компьютера. Для связи с персональным компьютером используется универсальный модуль последовательного интерфейса eUSCI_A0, настроенный для работы в режиме UART, и обратный канал программатора-отладчика MSP-FET, подключенного с помощью соответствующих перемычек на отладочной плате к выводам P1.6 (UCA0RXD) и P1.7 (UCA0TXD) микроконтроллера. Передача данных осуществляется со скоростью 4800 бод с одним стоповым битом и без использования бита четности. Поскольку микроконтроллер содержит 10-разрядный АЦП, то диапазон значений измеряемого сигнала находится в пределах 0x0000…0x03FF и для его передачи необходимо два байта (рисунок 42), причем в предлагаемой версии проекта старший байт, выделенный на рисунке красными прямоугольниками, передается раньше младшего (зеленые прямоугольники). Уровень порогового значения входного сигнала, чье значение по умолчанию равно 0x01FF, сохраняется в энергонезависимой памяти FRAM, поэтому после включения питания нет необходимости в первоначальной инициализации этого узла. В этой же памяти – в регистре TB0CCR0 – хранится и периодичность отправки сигнала центральному процессору. Для изменения этой величины необходимо передать микроконтроллеру по интерфейсу UART новое значение интервала, помня, что тактовая частота таймера равна 32768 Гц и для установки интервала, например, 1 с, необходимо передать значение, равное 32768.

Рис. 42. Пример двух смежных пакетов данных, принятых терминальной программой

Рис. 42. Пример двух смежных пакетов данных, принятых терминальной программой

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

После установки всех электрических соединений, прошивки микроконтроллера и настройки UART на отладочную плату можно подать питание, а на ее вход P1.3 (A3) – тестовый сигнал от какого-либо источника напряжения произвольной формы, например, треугольной (рисунок 43). Как видно из данного рисунка, пока измеряемое напряжение на выводе P1.3 (A3), отображаемое каналом 1 осциллографа, не превышает пороговый уровень 0x01FF, напряжение на выводе P1.0, к которому подключен канал 3 осциллографа, сохраняет уровень логического нуля, и информация по интерфейсу UART не передается. Как только входное напряжение превысит пороговое значение (этот момент показан на рисунке красной пунктирной линией) произойдет активизация системы, на выводе P1.0, будет установлен уровень логической единицы и микроконтроллер начнет передавать данные центральному процессору с предустановленной периодичностью.

Рис. 43. Временные диаграммы работы системы

Рис. 43. Временные диаграммы работы системы

Важной характеристикой данного узла является уровень энергопотребления. Результаты тестирования среднего значения потребляемого тока, выполненные с помощью анализатора питания N6705B производства Keysight Technologies при напряжении питания 3 B, приведены в таблице 12. Измерения проводились при работе системы в двух режимах. В первом случае (Active) ядро микроконтроллера и все необходимые периферийные модули работали постоянно без отключения. Во втором случае большую часть времени микроконтроллер находился в спящем режиме с пониженным энергопотреблением LPM3.

Таблица 12. Сравнение энергопотребления в режимах Active и LPM3

Режим работы Среднее значение потребляемого тока при напряжении питания 3 B, мкА
Active 97
LPM3 25

Как видно из таблицы 12, использование энергосберегающего режима LPM3 позволяет уменьшить энергопотребление практически в четыре раза. Еще большего уменьшения уровня потребляемой мощности можно достичь с помощью энергосберегающего режима LPM3.5, в котором вспомогательная тактовая шина (ACLK) и, соответственно, все периферийные модули отключаются, а активизация микроконтроллера для проведения очередных измерений осуществляется с помощью часов реального времени (RTC). Однако использование такого способа приведет к увеличению интервалов между измерениями, что для приложений, требующих контроля быстро меняющихся сигналов, может оказаться неприменимым.

Компаратор с гистерезисом
(Hysteresis Comparator With UART Using Low-Memory MSP430™ FRAM MCUs)

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

Реализация

Базовый вариант проекта реализован на отладочной плате MSP-TS430PW20 и микроконтроллере MSP430FR2000. В этом проекте для работы программного обеспечения необходим внешний кварцевый резонатор с частотой колебаний 32768 Гц вместе с требуемыми для его стабильной работы конденсаторами (рисунок 44). Связь с персональным компьютером осуществляется через интерфейс UART со скоростью 9600 бод. Физический уровень интерфейса обеспечивается с помощью обратных каналов программаторов-отладчиков MSP-FET или eZ-FET, подключаемых к выводам P1.6 и P1.7 микроконтроллера. Несмотря на то что отладочная плата MSP-TS430PW20 поставляется с завода в уже предустановленной конфигурации, перед запуском проекта необходимо проверить состояние перемычек JP13…JP15: JP14 и JP15 должны быть установлены, а перемычка JP13 – удалена. При необходимости, в конечном приложении внешний кварцевый резонатор и соединения, связанные с интерфейсом UART, могут быть удалены.

Рис. 44. Схема компаратора с гистерезисом

Рис. 44. Схема компаратора с гистерезисом

Обмен данными по интерфейсу UART осуществляется трехбайтными пакетами (рисунок 45), в которых первый байт определяет вид команды (0х00 – чтение, 0х01 – запись), а D0 и D1 содержат информацию о значениях пороговых уровней, которые записываются в микроконтроллер или считываются из его памяти. Информация, передаваемая в байтах D0 и D1, равна содержимому, соответственно, старшего CPDACBUF2 и младшего CPDACBUF1 байтов регистра CPDACDATA, определяющего величину выходного напряжения внутреннего источника опорного напряжения. В регистрах CPDACBUF2 и CPDACBUF1 учитываются только младшие шесть бит (старшие два бита игнорируются и всегда читаются как 0), поэтому величины пороговых напряжений компаратора могут принимать только 64 фиксированных значения.

Рис. 45. Структура пакета, передаваемого по UART

Рис. 45. Структура пакета, передаваемого по UART

Для запуска схемы вначале необходимо настроить порт P1.1 (C1) в режим входа, а затем, путем установки соответствующих битов в регистре CPCTL0, подключить его к неинвертирующему входу V+ компаратора. Неинвертирующий вход V- при этом подключается к выходу встроенного 6-разрядного ЦАП.

Опорные напряжения на выходе ЦАП устанавливаются путем записи необходимых значений в регистры CPDACCTL и CPDACDATA. Кроме этого, необходимо установить в качестве опорного напряжения ЦАП напряжение питания микроконтроллера VDD и активизировать выходной буфер модуля eCOMP. Такая конфигурация позволит самым простым способом реализовать функцию гистерезиса, поскольку в данном случае выходное напряжение ЦАП зависит от состояния выхода компаратора, подключенного в этом приложении к выводу (P2.0). При высоком логическом уровне на выходе компаратора опорное напряжение ЦАП определяется регистром CPDACBUF2, а при низком – CPDACBUF1 (рисунок 46).

Рис. 46. Диаграммы работы компаратора

Рис. 46. Диаграммы работы компаратора

Изменение пороговых уровней срабатывания компаратора в регистре CPDACDATA осуществляется с помощью интерфейса UART.

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

В компараторах микроконтроллеров семейства MSP430™ существует еще один способ реализации гистерезиса, который активизируется путем установки необходимой комбинации набора бит CPHSEL в регистре CPCTL1. В этом случае становится активным один из трех предустановленных аппаратно уровней: 10, 20 и 30 мВ. Если эти уровни отвечают требованиям конкретного приложения, то можно использовать этот метод, поскольку он проще, чем работа с регистром CPDACDATA. Более детально с особенностями реализации компараторов с гистерезисом можно ознакомиться в соответствующем руководстве (“Comparator With Hysteresis Reference Design”), доступном на официальном сайте Texas Instruments.

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

Поскольку микроконтроллеры семейства MSP430™ характеризуются ультрамалым энергопотреблением, то, по результатам измерений, среднее значение потребляемого тока данного приложения составляет всего 7 мкА. Временные диаграммы работы системы при значении регистра CPDACDATA, равном 0x1030, показаны на рисунке 47, а при 0x0838 – на рисунке 48. На данных иллюстрациях желтая диаграмма соответствует входному сигналу компаратора (вывод – P1.1/C1), а синяя – выходному (вывод P2.0/COUT).

Рис. 47. Диаграммы работы компаратора при значении регистра CPDACDATA = 0x1030

Рис. 47. Диаграммы работы компаратора при значении регистра CPDACDATA = 0x1030

Рис. 48. Диаграммы работы компаратора при значении регистра CPDACDATA = 0х0838

Рис. 48. Диаграммы работы компаратора при значении регистра CPDACDATA = 0х0838

При значении 16-разрядного регистра CPDACDATA, равном 0x1030 (рисунок 47) пороговые напряжения на инвертирующем входе компаратора определяются значениями младшего (CPDACBUF1 = 0x30) и старшего (CPDACBUF2 = 0x10) байтов и, в данном случае, равны, соответственно, 3/4 и 1/4 от величины опорного напряжения DVCC. В общем случае величину порогового напряжения HYSTERESIS_VOLTAGE на выходе ЦАП можно определить по формуле 7:

$$HYSTERESIS\_VOLTAGE=REFERENCE\_VOLTAGE\times \frac{CPDACBUFx}{64},\qquad{\mathrm{(}}{7}{\mathrm{)}}$$

где REFERENCE_VOLTAGE = 3,3 В – величина опорного напряжения ЦАП.

Подставляя в формулу 7 значения регистров CPDACBUFx, получим, что при значении CPDACBUF1 = 48 (0x30) опорное напряжение будет равно 2,475 В, а при CPDACBUF2 = 16 (0x10) – 0,825 В, что полностью соответствует результатам измерений (рисунок 47).

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

Детектор вскрытия корпуса
(Tamper Detection Using Low-Memory MSP430™ MCUs)

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

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

В базовом варианте предлагаемого проекта, исходные коды которого можно скачать с официального сайта компании Texas Instruments, приведен пример реализации датчика вскрытия корпуса. Подобные узлы в большинстве случаев являются первой линией защитного комплекса системы и могут использоваться в самом разнообразном оборудовании, например, электросчетчиках, термостатах или электронных замках. Срабатывание подобного датчика может стать весомым аргументом при доказательстве фальсификации результатов измерений, аннулировании гарантии и причиной проведения дальнейших расследований. С дополнительными способами реализации широкого спектра защитных функций электронного оборудования с помощью микроконтроллеров семейства MSP430™ можно ознакомиться, прочитав соответствующий раздел (“System-Level Tamper Protection Using MSP MCUs”), также доступный на официальном сайте компании Texas Instruments.

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

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

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

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

В базовой версии проекта датчик вскрытия корпуса реализован на основе микроконтроллера MSP430FR2000, содержащего часы реального времени (RTC), тактируемые от вспомогательной тактовой шины (ACLK), выход которой подключен к одному из выводов микроконтроллера. Прошедший через внешнюю цепь сигнал поступает на один из портов ввода-вывода (GPIO) с активированной функцией счета фронтов импульсов. Еще один порт GPIO используется для генерации сигнала тревоги, который может обрабатываться, например, центральным процессором. Также в проекте реализована функция удаления конфиденциальных данных, хранящихся в энергонезависимой памяти FRAM, по сигналу тревоги. Использованные в проекте алгоритмы обработки сигналов обеспечивают минимальную вероятность как пропуска событий несанкционированного вмешательства, так и ложных срабатываний. Кроме этого, исходный код программного обеспечения оптимизирован по критериям минимального размера, что позволило реализовать данный проект на основе микроконтроллеров с объемом памяти, не превышающим 0,5 кбайт.

Дополнительную информацию о создании подобных приложений можно получить, ознакомившись с описанием основных функций безопасности (“Understanding MSP430 MCU Security Features Overview”) и способах защиты кода (“MSP Code Protection Features”) микроконтроллеров семейства MSP430™, доступных на официальном сайте компании Texas Instruments.

Реализация

Базовая версия проекта реализована на отладочной плате MSP-TS430PW20 с микроконтроллером MSP430FR2000. Основной алгоритм работы программного обеспечения описан в первой части данной серии публикаций – «25 простых аналоговых и цифровых функций по 25 центов каждая. Коммуникационные функции». При необходимости данный проект можно легко адаптировать под требования конкретного приложения путем настройки параметров источника тактового сигнала и длительности интервала обнаружения.

Импульсный сигнал со вспомогательной тактовой шины ACLK подается на вывод P1.1 и, пройдя через физическую цепь внешнего датчика, поступает на вывод P1.0. Вывод P2.0 предназначен для генерации сигнала тревоги. В нормальном состоянии на этом выводе присутствует уровень логического нуля. При размыкании внешней цепи на нем устанавливается высокий логический уровень, что свидетельствует о нарушении целостности контрольного шлейфа. Высокий уровень сигнала на выводе P2.0 будет поддерживаться до тех пор, пока будет обнаруживаться расхождение в количестве сгенерированных и принятых импульсов. После восстановления пути прохождения сигнала вывод P2.0 будет снова переведен в состояние логического нуля. Для повышения стабильности генерируемого сигнала к выводам P2.6 и P2.7 может быть подключен внешний кварцевый резонатор. Один из вариантов реализации контрольного шлейфа показан на рисунке 49. Импульсный сигнал ACLK с вывода P1.1 подается на одну из сторон корпуса и через проводник, закрепленный на откидной крышке, поступает на вывод P1.0. При открытии крышки путь прохождения сигнала нарушается, что и приводит к срабатыванию датчика. При проектировании устройства следует принимать меры для исключения возможности доступа к линии ACLK снаружи корпуса.

Рис. 49. Схема подключения датчика вскрытия корпуса

Рис. 49. Схема подключения датчика вскрытия корпуса

Часы реального времени (RTC) тактируются от вспомогательной тактовой шины (ACLK), подключенной к тактовому RC-генератору (REFO), настроенному по умолчанию на частоту 32,768 кГц. Кроме этого, к микроконтроллеру можно подключить внешний кварц, изменив соответствующие макросы в начале исходного кода программы. При использовании внешнего кварцевого резонатора значение макроса EXT_OSC следует установить равным 1, а ACLK_FREQ – его частоте.

За длительность интервала измерений (в секундах) отвечает макрос CHECK_TIME. Его значение учитывается при определении коэффициента деления тактовой частоты RTC, и может устанавливаться в виде, например, 1/2048, 1/8, 3/16, 1 или 75/32. Минимальное значение макроса CHECK_TIME зависит от значений, установленных в регистрах RTC_DIV и RTCCTL, определяющих коэффициент деления предделителя часов реального времени (RTC). Содержимое регистра RTC_DIV и предделителя RTC всегда должно совпадать, при этом значение регистра RTC_DIV определяется программным макросом в верхней части кода (листинг 2), а RTCCTL – в основном теле программы (листинг 3).

Листинг 2.


#define EXT_OSC 0

#define ACLK_FREQ 32768 // Hz

#define RTC_DIV 16 // must match RTCPS value in RTCCTL

#define CHECK_TIME 1/2048 //seconds (entrer multiple of min time)

// min time: RTC_DIV/ACLK_FREQ

// max time: 2^16*(min time)

#define CHECK_CYCLES ACLK_FREQ?RTC_DIV*CHEC_TIME

#define CHECK_COUNT ACLKFREQ*CHECK_TIME*2

//Note: pre-processor will truncate calculation to integers. For best results ACLK_FREQ and RTC_DIV should be powers of 2 and CHEK_TIME guidelines should be followed to ensure CHEK_CYCLES and CHECK_COUNT are integers.

#define UPPER-TOL 1

#define LOWER_TOL 1

Листинг 3.


// RTCSS_1: selects ACLK as RTS source

// RTCSR: clear the RTC counter value

// RTCIE: enable RTC interrupt

//

// Macro             | RTC Pressaler

// - - - - - - - - - - - - - - - - -

//RTCPS_16      | 16

// RTCPS_64     | 64

// RTCPS_256   | 256

// RTCPS_1024 | 1024

RTCCTL = RTCSS_1 | RTCSR | RTCPS__16 | RTCIE;

Макрос CHECK_CYCLES определяет количество тактовых импульсов, которое необходимо часам реального времени RTC для того чтобы длительность измерительного периода соответствовала CHECK_TIME. Макрос CHECK_COUNT определяет идеальное значение счетчика импульсов принятого сигнала, и определяется значениями установленных выше макросов ACLK_FREQ и CHECK_TIME.

Соответствие значений предделителя RTC макроса CHECK_TIME приведено в таблице 13., Из нее видно, что для обеспечения максимальной скорости реакции устройства на вскрытие корпуса следует использовать макрос RTCPS__16.

Таблица 13. Стандартные значения макросов при различных коэффициентах деления предделителя RTC

RTCCTL RTC_DIV CHECK_TIME
(Длительность измерительного интервала)
Минимальная Максимальная
RTCPS__1024 1024 1/32 с (31,25 мс) 2048 с (≈ 34 мин)
RTCPS__256 256 1/128 с (7,81 мс) 512 с (≈ 8,5 мин)
RTCPS__64 64 1/512 с (1,95 мс) 128 с (≈ 2 мин)
RTCPS__16 16 1/2048 с (0,49 мс) 32 с

Значения макросов UPPER_TOL и LOWER_TOL устанавливают максимальную величину расхождения между количеством принятых импульсов и его расчетным значением, соответственно в большую и меньшую сторону. При необходимости, для исключения ложных срабатываний, их значение можно откорректировать.

Для увеличения скорости реакции микроконтроллер работает с тактовой частотой 16 МГц.

В данном проекте реализована также имитация защиты конфиденциальных данных, хранящихся в переменной secureData. При записи программы в память FRAM микроконтроллера значение этой переменной устанавливается равным 0xC0DE4B1D (рисунок 50). При первом срабатывании устройства эта область памяти стирается (рисунок 51) и после этого будет находиться в таком состоянии даже после перезагрузки микроконтроллера. В базовой версии проекта для восстановления информации в этой области памяти необходимо заново перепрограммировать микроконтроллер.

Рис. 50. Содержимое FRAM сразу после перепрограммирования микроконтроллера

Рис. 50. Содержимое FRAM сразу после перепрограммирования микроконтроллера

Рис. 51. Содержимое FRAM после срабатывания датчика

Рис. 51. Содержимое FRAM после срабатывания датчика

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

Базовая версия данного проекта была реализована на основе микроконтроллера MSP430FR2000. В качестве индикатора срабатывания тревоги был использован светодиодный индикатор, который подключался к выводу P2.0.

Для увеличения скорости реакции значение предделителя RTC было установлено равным 16, а длительность интервала проверки – 1/2048 с. Результаты тестирования показали, что кроме первого измерительного интервала значение переменной count полностью соответствовало ожидаемому. Наличие ложного срабатывания на первом измерительном интервале обусловлено тем, что на этапе инициализации программы включение прерываний от часов реального времени RTC и портов ввода-вывода GPIO происходит в разных командах и при возникновении первого прерывания программное обеспечение оказывается еще «не готово» к работе. Это обстоятельство было учтено специальным флагом, позволяющим игнорировать результаты первого измерения. В последующих измерительных циклах значение переменной count всегда находилось в диапазоне (формула 8):

$$CHECK\_COUNT-1\leq count\leq CHECK\_COUNT+1\qquad{\mathrm{(}}{8}{\mathrm{)}}$$

При тестировании значения макросов UPPER_TOL и LOWER_TOL были установлены в «1», что соответствовало проверке количества принятых импульсов с помощью приведенного выше неравенства. Поскольку частота измерительного сигнала равна 32,768 кГц, и максимальное расхождение между расчетным и фактическим значениями количества импульсов равно 3, то минимальное время обнаружения вскрытия корпуса составляет 46 мкс, а оповещения центрального процессора – 490 мкс. В любом случае максимальная задержка между обнаружением вскрытия корпуса и оповещением центрального процессора определяется значением макроса CHECK_TIME.

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

Генератор сигналов с автоматической подстройкой частоты
(Programmable Frequency Locked Loop using MSP430™ MCUs)

В данном проекте, исходные коды которого можно загрузить с официального сайта Texas Instruments, на базе микроконтроллера MSP430FR2100 реализован простой управляемый генератор стабильных частот в диапазоне от 1…16 МГц. Требуемая стабильность частоты выходного сигнала обеспечивается внутренним опорным тактовым генератором с цифровым управлением (Digitally Controlled Oscillator, DCO), стабилизированным контуром автоподстройки частоты (Frequency Locked Loop, FLL), который может работать как с внешним кварцевым резонатором, так и без него. Кроме этого, для приложений, работающих в реальном времени, генерируется сигнал с фиксированной частотой 32,768 кГц. Управление генератором осуществляется с помощью интерфейсов SPI или UART. В последнем случае скорость обмена данными составляет 4800 бод. Настройки генератора сохраняются в энергонезависимой сегнетоэлектрической памяти FRAM микроконтроллера, поэтому после перезагрузки системы его повторная инициализация не требуется. Областью применения данного проекта являются приложения, требующие для своей работы стабильного источника опорных сигналов, обладающего минимальным количеством компонентов и возможностью регулировки частоты.

Реализация

Базовая версия проекта реализована на микроконтроллере MSP430FR2100, внутренний опорный генератор (DCO) которого имеет контур автоподстройки частоты (FLL) и способен генерировать сигнал с частотой FOUTPUT, не превышающей 16 МГц, значение которой определяется по формуле 9:

$$F_{OUTPUT}=(FLLN+1)\times \frac{32768}{outputDiv},\qquad{\mathrm{(}}{9}{\mathrm{)}}$$

где FLLN ≤ 1023.

Требуемая частота сигнала формируется путем умножения опорной частоты 32,768 кГц, генерируемой внутренним опорным генератором (Internal Trimmed Low-Frequency Reference Oscillator, REFO), который в общем случае может работать без использования каких-либо дополнительных внешних компонентов. Тем не менее, специалисты компании Texas Instruments для повышения стабильности выходного сигнала рекомендуют использовать внешний высокоточный кварцевый резонатор с частотой 32,768 кГц (рисунок 52).

Рис. 52. Схема генератора с автоматической подстройкой частоты

Рис. 52. Схема генератора с автоматической подстройкой частоты

В зависимости от конфигурации программного обеспечения микроконтроллера управление генератором может осуществляться либо по интерфейсу UART, либо по SPI. При использовании UART задействуются выводы P1.6 и P1.7, соответственно, для передачи и приема информации, а при использовании SPI – P1.4…P1.7. Необходимые настройки для интерфейса SPI приведены в таблице 14.

Кроме этого на выводе P1.2 генерируется сигнал INT, который может контролироваться, например, центральным процессором. Наличие высокого уровня на этом выводе свидетельствует, о том, что выходной сигнал генератора не соответствует необходимым параметрам, причем сброс этого флага осуществляется после запроса центральным процессором текущего состояния генератора с помощью команды «Получить состояние устройства» (таблица 15).

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

Режим работы Фаза сигнала
CLK
Полярность сигнала CLK Полярность сигнала CS
Ведомый Изменение данных осуществляется по фронту, а считывание – по спаду импульса Активный уровень – высокий Активный уровень – низкий

Любой из интерфейсов позволяет центральному процессору настроить генератор с помощью соответствующих команд (таблица 15), которые рекомендуется передавать в следующем порядке:

  • «Установить диапазон DCO»;
  • «Установить значение FLLN»;
  • «Установить значение делителя»;
  • «Применить настройки».

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

Таблица 15. Команды управления генератором

Команда Код команды Первый байт данных Второй байт данных
Применить настройки
(Apply FLL Settings)
0x00 Х Х
Установить диапазон DCO
(Set DCO Range)
0x01 Младший байт значения Старший байт значения
Установить значение FLLN
(Set FLLN)
0x02 Младший байт значения Старший байт значения
Установить значение делителя
(Set Output Divider)
0x03 Младший байт значения Старший байт значения
Получить состояние устройства
(Get Status)
0x04 Х Х

Как видно из таблицы 15, существуют два типа команд: однобайтные, содержащие только код команды, и трехбайтные, содержавшие, кроме кода команды (первый байт), еще и 16-разрядные данные (второй и третий байты), автоматически соединяемые программным обеспечением в единое число.

Например, для установки рабочего диапазона DCO равным 8 МГц, через управляющий интерфейс необходимо, в соответствии с таблицей 16, дать следующую информацию:

  • первый байт – 0х01 (код команды «Установить диапазон DCO»);
  • второй байт – 0x06 (младший байт данных);
  • третий байт – 0х00 (старший байт данных).

Таблица 16. Значения аргументов команды «Установить диапазон DCO»

Частотный диапазон, МГц Младший байт данных Старший байт данных
1 0х00 0х00
2 0х02 0х00
4 0х04 0х00
8 0х06 0х00
12 0х08 0х00
16 0х0А 0х00

Аналогично команде «Установить диапазон DCO», аргументы команды «Установить значение делителя» также должны принимать только определенные фиксированные значения (таблица 17).

Таблица 17. Значения аргументов команды «Установить значение делителя»

Коэффициент деления Младший байт данных Старший байт данных
1 0х00 0х00
2 0х01 0х00
4 0х02 0х00
8 0х03 0х00
16 0х04 0х00
32 0х05 0х00
64 0х06 0х00
128 0х07 0х00

Как видно из таблиц 16 и 17, старший байт аргументов команд «Установить диапазон DCO» и «Установить значение делителя» фактически не используется и всегда равен 0х00. Тем не менее, длина этих команд установлена равной трем байтам для совместимости с командой «Установить значение FLLN», поскольку обработка команд переменной длины усложняет программное обеспечение и увеличивает размер кода.

Кроме команд, предназначенных для настройки генератора, существует специализированная команда «Получить состояние устройства» которую можно использовать для контроля некоторых важных параметров, включая результат выполнения предыдущей команды, или наличие блокировки генератора, возникающее при перестройке частоты. Кроме этого, чтение регистра состояния позволяет также определить, была ли попытка установки частоты генератора вне пределов допустимого диапазона и отправлялась ли микроконтроллеру команда, отсутствующая в списке разрешенных команд (таблица 15).

Каждый бит (флаг) регистра состояния (таблица 18) имеет высокий активный уровень. Например, если в данный момент выходная частота нестабильна и контур АПЦ отключен, то флаг BIT4 будет равен 1. Сброс флагов ошибок управления, например, флага передачи неправильного аргумента команды «Установить диапазон DCO», осуществляется автоматически после выполнения команды «Получить состояние устройства».

Таблица 18. Описание флагов регистра состояния

Бит Флаг Описание
BIT0 Выполнение команды (SUCCESS) Предыдущая команда выполнена успешно
BIT1 Ошибка команды (FAIL) Предыдущая команда не выполнена
BIT2 Переходной процесс (PROCESSING) Происходит выполнение команды
BIT3 Ошибка кварца (LFXT FAULT) Частота кварцевого генератора имеет недопустимое отклонения и/или устройство работает от внутреннего RC-генератора
BIT4 Ошибка контура АПЧ (FLL UNLOCKED) Контур АПЧ отключен. Частота выходного сигнала не соответствует требуемому значению
BIT5 Ошибка диапазона DCO (DCO RANGE ERROR) Аргумент команды «Установить диапазон DCO» находится за пределами допустимых значений
BIT6 Неизвестный код команды (INVALID COMMAND) Был передан неизвестный код команды
BIT7 Не используется

Базовая версия проекта позволяет генерировать тактовые сигналы в диапазоне частот 1…16 МГц с точностью ±2% при использовании внутреннего RC-генератора REFO или ±0,5% при использовании внешнего кварцевого резонатора. Более подробную информацию о параметрах тактовой подсистемы микроконтроллера MSP430FR2100 можно получить в соответствующих разделах технической документации на эти микроконтроллеры. Здесь же можно только отметить, что использование внешнего кварцевого резонатора приводит к улучшению стабильности генерируемого сигнала и уменьшению энергопотребления данного узла.

После сброса микроконтроллера частота генерируемого сигнала определяется настройками, сохраненными в энергонезависимой памяти FRAM в процессе последнего удачного сеанса обмена данными с центральным процессором. Выходная частота генератора присутствует на выводе P1.0. При необходимости базовую частоту 32,768 кГц также можно получить, подключив необходимые устройства к выводу P1.1.

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

Программируемый тактовый генератор
(Programmable Clock Source Using MSP430™ MCUs)

В данном проекте, исходные коды [которого можно загрузить с официального сайта Texas Instruments, на базе микроконтроллера MSP430FR2000 реализован простой управляемый тактовый генератор фиксированных частот: 1, 2, 4, 8 или 16 МГц. Требуемая стабильность частоты выходного сигнала обеспечивается внутренним опорным тактовым генератором с цифровым управлением (Digitally Controlled Oscillator, DCO), стабилизированным контуром автоподстройки частоты (Frequency Locked Loop, FLL), который может работать как с внешним кварцевым резонатором, так и без него. Кроме этого, для приложений, работающих в реальном времени, генерируется сигнал с фиксированной частотой 32,768 кГц. Управление генератором осуществляется с помощью интерфейсов SPI или UART. В последнем случае скорость обмена данными составляет 4800 бод. Настройки генератора сохраняются в энергонезависимой сегнетоэлектрической памяти микроконтроллера FRAM, поэтому после перезагрузки системы его повторная инициализация не требуется. Областью применения данного проекта являются приложения, требующие для своей работы стабильного источника тактового сигнала, обладающего минимальным количеством компонентов и возможностью дискретной перестройки частоты.

Реализация

Базовая версия проекта реализована на микроконтроллере MSP430FR2000, внутренний опорный генератор (DCO) которого имеет контур автоподстройки частоты (FLL) и способен генерировать сигнал с частотой, не превышающей 16 МГц. Требуемая частота сигнала генерируется путем умножения опорной частоты 32,768 кГц, генерируемым внутренним опорным генератором (Internal Trimmed Low-Frequency Reference Oscillator, REFO), который в общем случае может работать без использования каких-либо дополнительных внешних компонентов. Тем не менее, специалисты компании Texas Instruments для повышения стабильности выходного сигнала рекомендуют использовать внешний высокоточный кварцевый резонатор с частотой 32,768 кГц (рисунок 53).

Рис. 53. Схема тактового генератора

Рис. 53. Схема тактового генератора

После сброса и инициализации микроконтроллера начинает работать генератор DCO на фиксированной частоте 16 МГц. Выходной сигнал DCO подается в систему распределения тактовой частоты SMCLK, которая, в соответствии с настройками, хранящимися в энергонезависимой памяти FRAM, делит его частоту на некоторый коэффициент. Выходной сигнал с необходимой частотой присутствует на выводе P1.0. Кроме этого, на выводе P1.1 присутствует опорная частота DCO, составляющая 32,768 кГц. При первом запуске программного обеспечения коэффициент деления устанавливается таким образом, чтобы частота выходного сигнала была равна 1 МГц. После этого с помощью команд, передаваемых центральным процессом выходную частоту можно изменить в соответствии с требованиями конкретного приложения. Поскольку коэффициент деления SMCLK хранится в энергонезависимой памяти FRAM, то после следующей перезагрузки микроконтроллера частота выходного сигнала не изменится. В зависимости от конфигурации программного обеспечения микроконтроллера, управление генератором может осуществляться либо по интерфейсу UART, либо по SPI. При использовании UART для передачи и приема информации задействуются выводы P1.6 и P1.7, соответственно, а при использовании SPI – P1.4…P1.7. Необходимые настройки для интерфейса SPI приведены в таблице 19.

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

Режим работы Фаза сигнала

CLK

Полярность сигнала CLK Полярность сигнала CS
Ведомый Изменение данных осуществляется по фронту, а считывание – по спаду импульса Активный уровень – высокий Активный уровень – низкий

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

Таблица 20. Команды управления генератором

Команда Код
Установить частоту 1 МГц (COMMAND_SET_1MHZ) 0х00
Установить частоту 2 МГц (COMMAND_SET_2MHZ) 0х02
Установить частоту 4 МГц (COMMAND_SET_4MHZ) 0х04
Установить частоту 8 МГц (COMMAND_SET_8MHZ) 0х06
Установить частоту 16 МГц (COMMAND_SET_16MHZ) 0х08
Получить состояние устройства (COMMAND_GET_STATUS) 0х0А

При использовании интерфейса UART после передачи любой команды микроконтроллер отправит центральному процессору один байт с результатом ее выполнения. При использовании SPI для получения результата выполнения команды необходимо использовать команду «Получить состояние устройства». Варианты ответа микроконтроллера приведены в таблице 21.

Таблица 21. Варианты ответа микроконтроллера

Команда Код
Команда выполнена успешно 0х00
Неизвестная команда 0х01
Команда еще не выполнена 0х02

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

Базовая версия проекта позволяет генерировать тактовые сигналы с частотами 1, 2, 4, 8 или 16 МГц с точностью ±2% при использовании внутреннего RC-генератора REFO или ±0,5% при использовании внешнего кварцевого резонатора. Более подробную информацию о параметрах тактовой подсистемы микроконтроллера MSP430FR2000 можно получить в соответствующих разделах технической документации на эти микроконтроллеры. Здесь же следует только отметить, что использование внешнего кварцевого резонатора приводит к улучшению стабильности генерируемого сигнала и уменьшению энергопотребления данного узла.

При разработке программного обеспечения принимались специальные меры для уменьшения размера прошивки, поскольку микроконтроллер MSP430FR2000 имеет ограниченный объем памяти программ, равный всего 512 байт. Из-за этого скорость обмена данными составляет всего 4800 бод.

Малая скорость передачи связана с тем, что приемопередатчик UART тактируется от генератора REFO сигналом с единственной постоянной частоты в системе 32,678 кГц. В противном случае при изменении частоты выходного сигнала тактовую частоту модуля UART пришлось бы также изменять, а это требует дополнительных инструкций и, соответственно, увеличения размера прошивки. Кроме этого, скорость 4800 бод была выбрана для уменьшения погрешности при приеме сигналов, поскольку при тактировании модуля UART сигналом с частотой 32,678 кГц при скорости 9600 бод качество связи уже заметно ухудшается. Также следует отметить, что эти ограничения касаются только интерфейса UART. При использовании SPI программных ограничений на скорость передачи нет.

Из всего набора энергосберегающих режимов, реализованных в микроконтроллерах семейства MSP430™, единственным режимом, при котором сохраняется работоспособность генератора, является LPM0. Тем не менее, величина тока, потребляемого генератором, остается впечатляюще низкой и при напряжении питания 3 В составляет всего 402 мкА независимо от выходной частоты.

И последней особенностью базовой версии программного обеспечения является наличие двух бесконечных циклов, которые могут привести к частичному зависанию микроконтроллера. В первом цикле проверяется уровень стабильности внешнего кварцевого резонатора, а во втором – состояние контура автоматической подстройки частоты. При любом нарушении работы этих двух узлов при отправке команды «Получить состояние устройства» будет передан ответ «Команда еще не выполнена» (таблица 21). В этом случае следует вначале перезагрузить микроконтроллер, и если после этого его работоспособность не восстановилась, необходимо приступить к поиску причин возникновения неисправности.

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

•••

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

О компании Texas Instruments

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

Товары
Наименование
MSP430FR2000IRLLR (TI)
MSP430FR2000IRLLT (TI)
MSP430FR2000IPW16 (TI)
MSP430FR2000IPW16R (TI)
MSP430FR2100IRLLR (TI)
MSP430FR2100IRLLT (TI)
MSP430FR2100IPW16 (TI)
MSP430FR2100IPW16R (TI)
MSP430FR59941IPNR (TI)
MSP430FR59941IZVWR (TI)
MSP430FR5994IPNR (TI)
MSP430FR5994IZVWR (TI)