Использование вспомогательных экономичных микроконтроллеров для решения рутинных задач
Роберт Перкел (Robert Perkel), Microchip Technology
В статье на практическом примере обсуждается возможность высвобождения ресурсов центрального микроконтроллера или вычислительного устройства за счет использования дополнительных экономичных 8- и 16-бит микроконтроллеров. Рассматриваются примеры создания расширителя ввода/вывода и преобразователя «напряжение–частота».
Введение
В сложных приложениях часто необходимо разгрузить основной микроконтроллер (МК) от рутинных задач. Подобные задачи не требуют сложных вычислений или выполнения сложных алгоритмов, но могут отнимать значительный ресурс за счет частого выполнения несложных операций или многочисленных прерываний. Эта проблема усугубляется, если требуется обработка данных в режиме реального времени.
В описанных случаях оптимальной стратегией может оказаться применение простых 8- или 16-бит МК для решения некоторых рутинных задач, что позволит высвободить ресурсы главного вычислительного устройства. Например, 8-бит МК можно использовать для построения расширителя ввода/вывода. Эта простая задача требует немало процессорного времени для обслуживания прерываний. Кроме того, такое решение добавляет гибкость системе, упрощает процесс изменения конфигурации и, следовательно, облегчает проектирование. У разработчика появляется готовый узел, который легко адаптируется к разным проектам.
Мы рассмотрим несколько простых рутинных задач, выполнение которых можно возложить на отдельные дополнительные МК.
Расширитель ввода/вывода
Работа расширителя основана на справочной таблице (lookup table), пример которой представлен на рисунке 1.
Рис. 1. Пример справочной таблицы
Заметим, что при таком подходе виртуальный адрес относится не к регистрам или модулям устройства, а только к справочной таблице. При этом возможно добавить функции, отсутствующие в регистрах МК, к тому же записи в таблице легко заменить в зависимости от требований конкретного приложения. Пример работы со справочной таблицей показан на рисунке 2.
Рис. 2. Пример работы со справочной таблицей
Еще одно преимущество такого подхода заключается в возможности устанавливать разрешения или запреты в справочную таблицу. Например, можно создать регистр только для чтения или только для записи. Кроме того, появляется возможность выполнять нестандартные функции. Например, функция MEM OP допускает сохранять текущую конфигурацию ввода/вывода в память или сбросить эту конфигурацию до начальных установок после компиляции. На рисунке 3 показан пример выполнений операции MEM OP для конфигурации портов ввода/вывода.
Рис. 3. Пример выполнений операции MEM OP для конфигурации портов ввода/вывода
Как видно из рисунка 3, с помощью операции MEM OP можно настроить МК на загрузку сохраненных настроек при включении питания. Например, МК пытается загрузить конфигурацию 0, но если не проходит проверка контрольной суммы, то МК возвращается к константам компиляции. Если функция загрузки сохраненной конфигурации не требуется, ее можно легко отключить. Основное преимущество использования МК заключается в его простой адаптивности к условиям конкретного проекта. В отличие от имеющихся на рынке ASIC, МК легко настраивается на выполнение нестандартных функций, характерных для данного приложения. Например, исходный код для рассмотренной выше задачи был разработан для МК семейства PIC16F15244.
Преобразователь напряжение–частота V/F
В этом разделе мы рассмотрим пример использования аппаратных периферийных устройств для создания функции независимой от процессорного ядра. Обычно преобразователь напряжение–частота реализуют на отдельной микросхеме, но его построение на основе МК имеет преимущества. Во-первых, все исходные установки и параметры работы преобразователя устанавливаются программно, что существенно упрощает модификацию. Во-вторых, уменьшается число используемых компонентов.
Однако у такого подхода имеются и недостатки. Первый из них заключается в ограниченном разрешении АЦП, которое обычно составляет 12 или 14 бит. Конечное разрешение имеет и встроенный генератор частоты с цифровым управлением (NCO); может возникать джиттер в зависимости от кода АЦП. Однако для ряда приложений с этими недостатками можно смириться. Для реализации решения используем три отдельных периферийных модуля: аналоговой выборки; выходного генератора и генератора рабочего цикла. Структурная схема преобразователя приведена на рисунке 4.
Рис. 4. Структурная схема преобразователя напряжение-частота
Рассмотрим каждый из них. Структурная схема модуля выборки аналогового сигнала приведена на рисунке 5.
Рис. 5. Структурная схема модуля выборки аналогового сигнала
Модуль формирует цифровой код для управления модулем генератора. Для получения 14-бит сигнала при использовании 12-бит АЦП применяется режим передискретизации. В модуле накапливается несколько выборок, которые затем усредняются. Недостаток передискретизации заключается в появлении дополнительного шума. Для его уменьшения используется фильтр усреднения, и добавляется гистерезис.
Для реализации гистерезиса используется функция порогового прерывания. После усреднения полученное значение сравнивается с предыдущим значением: если разница между этими двумя результатами меньше заданного порогового значения, то результат преобразования не обновляется.
Структурная схема модуля генератора показана на рисунке 6.
Рис. 6. Структурная схема генератора
Он формирует тактовый сигнал заданной частоты. Выходной сигнал этого модуля поступает на вход генератора рабочего цикла, который в два раза уменьшает частоту входного сигнала и формирует импульсную последовательность с коэффициентом заполнения 0,5. Основным элементом блока генератора является генератор с числовым управлением (NCO). Приращение аккумулятора NCO происходит по переднему фронту входного тактового сигнала. Переполнение аккумулятора инициализирует появление выходного сигнала.
В таблице 1 приводится пример настройки генератора NCO2.
Таблица 1. Пример настройки генератора NCO2
Выход АЦП | Выход NCO1 (удвоенная частота) | Частота выходного сигнала |
0x0000 | 0 Гц | 0 Гц |
0x0001 | 12,2 Гц | 6,1 Гц |
0x0100 | 3,1 кГц | 1,6 кГц |
0x1000 | 50 кГц | 25 кГц |
0x3FFF | 200 кГц | 100 кГц |
В этом примере генератор настроен для создания тактовой частоты 100 кГц из 14-бит входного управляющего кода, поступающего из модуля выборки сигнала, т.к. 12-бит кода недостаточно для формирования сигнала 100 кГц. Если изменить выходную частоту NCO2 или использовать другой источник частоты, то выходная частота масштабируется соответствующим образом. Например, если уменьшить частоту NCO2 в 10 раз до значения 1,28 МГц, то, как показано в таблице 2, максимальная выходная частота генератора составит 10 кГц.
Таблица 2. Масштабирование выходной частоты при изменении входной частоты
Выход АЦП | Выход NCO1 (удвоенная частота) | Частота выходного сигнала |
0x0000 | 0 Гц | 0 Гц |
0x0001 | 1,2 Гц | 0,6 Гц |
0x0100 | 312,5 Гц | 156,3 Гц |
0x1000 | 5 кГц | 2,5 кГц |
0x3FFF | 20 кГц | 10 кГц |
Структурная схема генератора рабочего цикла представлена на рисунке 7.
Рис. 7. Структурная схема генератора рабочего цикла
Модуль обеспечивает формирование импульсной последовательности с коэффициентом заполнения 0,5. Строго говоря, для преобразования «напряжение–частота» этот модуль не обязателен, а в качестве выходного сигнала можно использовать и выходкой сигнал модуля генератора (см. рис. 6). Однако поскольку в этом случае коэффициент заполнения импульсной последовательности может изменяться в широких пределах, что не всегда удобно, модуль желательно задействовать.
Генератор рабочего цикла легко формируется на основе конфигурируемых логических ячеек (CLC), встроенных в МК компании Microchip. Ячейки CLC представляют собой небольшие наборы конфигурируемых дискретных логических элементов, схожие с ячейками ПЛИС. На базе этих ячеек легко реализуются логические функции «И–НЕ», «ИЛИ–НЕ», а также разные виды триггеров. В нашем случае были реализованы J-К триггеры со сбросом.
Входные импульсы с модуля генератора служат тактовыми импульсами триггера. Каждый входной импульс вызывает переключение выхода триггера, поэтому независимо от коэффициента заполнения входных тактовых импульсов на выходе мы всегда получаем импульсную последовательность с коэффициентом заполнения 0,5.
Таймер TMR6 используется в качестве сторожевого. Если на выходе модуля в течение заданного времени (в нашем случае 83 мс) не обнаруживается фронт импульса, происходит переполнение таймера, и он генерирует тактовый импульс на ячейку CLC. Таким образом, формируется выходная импульсная последовательность с минимальной частотой. В нашем случае это 6 Гц.
Для реализации описанных выше примеров использовался МК семейства PIC18-Q43 от компании Microchip. В МК этого семейства встроено большое количество периферийных устройств, на базе которых можно реализовать различные рутинные операции.
Выводы
В статье на практических примерах было показано, как можно облегчить работу центрального 32-бит МК от выполнения простых рутинных операций, отнимающих немалую часть ресурсов. С этой целью следует использовать простые и экономичные 8- или 16-бит МК, на которые можно переложить решение рутинных задач, не требующих большой вычислительной мощности.
Выход АЦП | Выход NCO1 (удвоенная частота) | Частота выходного сигнала |
0x0000 | 0 Гц | 0 Гц |
0x0001 | 12,2 Гц | 6,1 Гц |
0x0100 | 3,1 кГц | 1,6 кГц |
0x1000 | 50 кГц | 25 кГц |
0x3FFF | 200 кГц | 100 кГц |
MCA866