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

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

Контроллер трехцветного светодиода
(UART Software Controlled RGB LED Color Mixing With MSP430™ MCUs)

Трехцветные светодиоды (RGB LED), содержащие в одном корпусе кристаллы с излучением красного, зеленого и синего цветов, используются для индикации и подсветки во многих приложениях, например, для создания пользовательских интерфейсов или устройств освещения, ведь путем смешения основных цветов можно получить результирующее излучение практически любого цвета и интенсивности. На практике это осуществляется путем индивидуальной регулировки токов каждого светодиода, а это, в свою очередь, наиболее просто реализовать путем подачи на каждый светодиод импульсного напряжения с постоянной частотой и регулируемой длительностью импульсов (широтно-импульсной модуляции, ШИМ). При этом, чтобы исключить появление видимых человеческим глазом мерцаний, частота напряжения, подаваемого на светодиоды, должна быть не менее 60 Гц. В базовом варианте проекта, исходные файлы которого можно загрузить с официального сайта Texas Instruments, представлен пример контроллера трехцветного светодиода, позволяющего через интерфейс UART установить 12 вариантов его излучения. Особенностью предлагаемого программного обеспечения является минимум требуемых аппаратных ресурсов – всего лишь один таймер (Timer B0) с тремя регистрами сравнения/захвата (Capture Compare Registers, CCR). Кроме этого, размер прошивки не превышает 512 байт, что позволяет реализовать его на микроконтроллере MSP430FR2000 с наименьшим среди семейства MSP430™ объемом памяти программ.

Реализация

В базовом варианте проекта внешний трехцветный светодиод подключается к микроконтроллеру MSP430™ с помощью трех P-канальных MOSFET, а токи светодиодов основных цветов ограничиваются с помощью трех внешних резисторов (рисунок 11). Такая схема включения позволяет микроконтроллеру управлять светодиодами повышенной яркости, токи которых превосходят максимально допустимые значения для портов ввода-вывода микроконтроллеров данного семейства. Аппаратная часть проекта содержит два модуля: оценочную плату MSP-TS430PW20 на основе микроконтроллера MSP430FR2000, и содержащий трехцветный светодиод модуль расширения LED BoosterPack™, принципиальную схему которого вместе с остальной технической документацией можно получить, скачав исходные файлы опорного проекта TIDM-G2XXSWRGBLED. Платы соединяются между собой проводами так, как показано на рисунке 11. Для связи с компьютером через интерфейс UART может использоваться обратный канал программатора-отладчика MSP-FET или эмулятор eZ-FET из набора для разработки MSP430™ LaunchPad™. Ввод команд для установки цвета светодиода осуществляется с помощью терминальной программы, работающей на персональном компьютере.

Рис. 11. Схема контроллера трехцветного светодиода

Рис. 11. Схема контроллера трехцветного светодиода

Принцип формирования нужного излучения с помощью ШИМ подробно рассмотрен в разделах «Принцип смешения цветов» и «Управление светодиодами» «Руководства по созданию программного обеспечения для управления светодиодами» (Software RGB LED Control Design Guide). Однако в данном проекте из-за специфики используемых микроконтроллеров использован несколько иной способ формирования ШИМ-сигналов. В первоначальном варианте таймер работает в режиме инкрементирующего счета (Up Mode), а информация о длительностях импульсов хранится в регистрах TB0CCR0 (синий), TB0CCR1 (красный) и TB0CCR2 (зеленый) модуля Timer B0, хотя обычно при формировании ШИМ-сигналов регистр TB0CCR0 используется для установки длительности периода импульсов. Отказ от «классического» метода формирования ШИМ связан с тем, в некоторых моделях микроконтроллеров MSP430™, в том числе и MSP430FR2000, таймер имеет только три регистра CCR, а это значит, что используя «классический» метод, с его помощью можно сформировать всего два ШИМ-сигнала, что явно недостаточно для управления трехцветным светодиодом. Более подробно о принципах формирования нескольких ШИМ-сигналов с помощью единственного таймера и механизма прерываний можно ознакомиться, прочитав «Руководство по формированию сигналов с фиксированными временными параметрами с использованием единственного таймера микроконтроллеров MSP430» (Multiple Time Bases on a Single MSP430 Timer Module).

Для исключения видимых мерцаний частота импульсов, подаваемых на светодиоды, должна быть приблизительно равна 60 Гц. При такой незначительной частоте ШИМ-сигналов частоту тактового генератора можно оставить равной частоте, устанавливаемой по умолчанию (1,048 МГц), поскольку она намного выше минимально необходимого значения, определенного в руководстве “Multiple Time Bases on a Single MSP430 Timer Module”. ШИМ-сигналы управления светодиодами формируются путем деления вспомогательной тактовой частоты (Auxiliary Clock, ACLK) 32768 Гц, получаемой от низкочастотного опорного генератора (Low-Frequency Reference Oscillator, REFO), на 4. Таким образом, опорная частота импульсов, подаваемая на таймер Timer B0, равна 8192 Гц. Это сделано для того, чтобы максимальное значение регистров TB0CCRx не превышало 255 (0хFF) и для хранения значений было достаточно одного байта, что дополнительно экономит ресурсы микроконтроллеров с ограниченными объемами ОЗУ и памяти программ. В данном проекте для частоты 60 Гц максимальное значение регистров TB0CCRx не превышает 135. Следует также отметить, что сигналы управления светодиодами являются инверсными, и светодиоды включаются при малом значении выходного сигнала микроконтроллера, поэтому значения массива colorsLow[] фактически содержат информацию о длительности включенного состояния светодиода, а массива colorsHigh[] – о выключенном.

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

Для запуска проекта необходимо соединить платы согласно принципиальной схеме, прошить микроконтроллер и подключить к нему программатор-отладчик. Отладочная палата MSP-TS430PW20 по умолчанию конфигурируется для использования UART, однако все равно необходимо проверить, что перемычки JP14 и JP15 установлены, а JP13 удалена. Во время инициализации микроконтроллера светодиод будет светиться белым, поскольку P-канальные MOSFET открываются при низком уровне управляющего сигнала, после чего его цвет свечения изменится на красный. Для установки цвета светодиода необходимо запустить на персональном компьютере программу для терминальных соединений, подключив ее к порту UART, созданному обратным каналом программатора-отладчика MSP-FET или эмулятором eZ-FET. По умолчанию модуль UART в микроконтроллере настроен на скорость обмена 9600 бод с одним стоповым битом и без использования бита четности. Для установки одного из 12 допустимых цветов через интерфейс UART необходимо передать один байт в диапазоне 0х00…0х0B. Если передать число, находящееся за пределами данного диапазона, то цвет свечения светодиода изменится на красный (рисунок 12).

Рис. 12. Цвет свечения светодиода при передаче неправильного значения через интерфейс UART

Рис. 12. Цвет свечения светодиода при передаче неправильного значения через интерфейс UART

Базовая версия проекта поддерживает всего 12 фиксированных цветов светодиода, однако если использовать более мощный микроконтроллер из линейки MSP430™, то увеличение количества предустановленных цветов не вызовет никаких технических проблем. Кроме этого, базовая версия проекта ориентирована на использование платы BoosterPack, трехцветный светодиод которой имеет меньшую интенсивность излучения красного светодиода по сравнению с зеленым и синим. Это различие учтено в значениях массива colorsLow[] и colorsHigh[], оптимально подобранных для получения заданных цветов. При необходимости для более точного определения цвета излучения следует использовать рассеиватель, уменьшающий влияние пространственного разнесения оптических центров излучения светодиодов внутри корпуса прибора. Данный проект является хорошим примером управления светодиодной подсветкой с минимальным количеством внешних компонентов и жесткими требованиями к размеру программного кода, в том числе и для микроконтроллеров с максимальным объемом памяти программ, не превышающей 0,5 кбайт.

Контроллер сервопривода
(Servo Motor Controller Using MSP430™ MCUs)

Сервоприводы нашли широкое применение в большом количестве приложений, требующих точного позиционирования в пространстве каких-либо элементов, например, в устройствах автоматики, промышленной технике, роботах и многих других приложениях. Основная задача сервопривода – поддержание углового или линейного положения подвижного элемента (ротора), хотя существуют и модели, предназначенные для стабилизации его скорости вращения. Сервопривод является законченным устройством, в корпусе которого интегрированы двигатель, драйвер двигателя, датчик положения/скорости и вся необходимая дополнительная электроника. А вот управление сервоприводами осуществляется с помощью ШИМ-сигнала определенной частоты, длительность импульса которого и определяет положение подвижной части. Чаще всего для управления сервоприводами используют  ШИМ-сигналы с периодом 20 мс (частотой 50 Гц) и длительностью импульсов, находящейся в диапазоне от 1 мс (5%) до 2 мс (10%), которым соответствует угол установки ротора 0° и 180° (рисунок 13). Однако параметры ШИМ-сигнала управления и углы установки ротора зависят от модели, поэтому перед использованием конкретной модели сервопривода следует внимательно изучить его техническую документацию.

Рис. 13. Параметры ШИМ-сигнала управления сервоприводом

Рис. 13. Параметры ШИМ-сигнала управления сервоприводом

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

Реализация

Максимальное напряжение питания для микроконтроллеров MSP430™, а следовательно, и напряжение на выходах портов GPIO не превышает 3,6 В, в то время как амплитуда импульсов сигнала управления для большинства сервоприводов должна быть 5 В. Для согласования уровней в схеме использован N-канальный MOSFET CSD18537NKCS, включенный по схеме с общим истоком (рисунок 14), однако эту же задачу можно решить и с помощью стандартных преобразователей уровней сигналов, например, из семейства SN74LV1Txx.

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

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

ШИМ-сигналы для управления сервоприводами чаше всего генерируются с помощью таймеров, в данном случае – с помощью таймера Timer_B0. По умолчанию тактовой частотой для модуля таймера, настроенного на режим инкрементирующего счета (Up Mode), является вспомогательная тактовая частота (Auxiliary Clock, ACLK) равная приблизительно 32 кГц, которая генерируется внутренним опорным генератором (Low-Frequency Reference Oscillator, REFO). В проекте используются два регистра таймера: TB0CCR0, определяющий длительность периода (20 мс), и TB0CCR1, содержащий информацию о длительности импульса ШИМ-сигнала. Выходной сигнал формируется на выводе P2.0, подключенном к выходу регистра совпадения/захвата CCR1 микроконтроллера MCP430FR2000. Для корректного управления сервоприводом длительность импульса ШИМ-сигнала управления должна находиться в диапазоне 1…2 мс.

С помощью компьютерной терминальной программы можно установить положение ротора сервопривода в одно из 16 предустановленных значений. Для связи с компьютером используется модуль асинхронного приемопередатчика микроконтроллера eUSCI_A0, конфигурируемый для работы в режиме UART. Информация с компьютера поступает в последовательном коде через вывод P1.6 и сохраняется в регистре UCA0RXD. В базовом варианте проекта используется отладочная плата MSP-TS430PW20 и программатор-отладчик MSP-FET. Информация по UART передается со скоростью 4800 бод с одним стоповым битом и без использования бита четности. Для установки положения ротора микроконтроллеру по интерфейсу UART необходимо передать число в диапазоне 0x00…0x0F, после чего длительность импульса сигнала управления, а следовательно – и положение ротора станут равными некоторым значениям, приведенным в таблице 9.

Таблица 9. Соответствие длительности импульса данным, полученным по UART

Значение принятого байта Значение регистра TB0CCR1 Длительность импульса сигнала управления
0x00 33 1,00 мс (5,0%)
0x01 36 1,10 мс (5,5%)
0x02 38 1,16 мс (5,8%)
0x03 40 1,22 мс (6,1%)
0x04 42 1,28 мс (6,4%)
0x05 44 1,34 мс (6,7%)
0x06 46 1,41 мс (7,1%)
0x07 48 1,46 мс (7,3%)
0x08 50 1,53 мс (7,7%)
0x09 52 1,59 мс (8,0%)
0x0A 54 1,65 мс (8,3%)
0x0B 56 1,71 мс (8,6%)
0x0C 58 1,77 мс (8,9%)
0x0D 60 1,83 мс (9,2%)
0x0E 62 1,89 мс (9,5%)
0x0F 65 1,98 мс (9,9%)

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

На рисунке 15 показаны три примера сигналов управления сервоприводом, генерируемых микроконтроллером при передаче по интерфейсу UART значений, указанных красным шрифтом. Как видно из рисунка, минимальное и максимальное значения длительности импульса управления находятся в диапазоне 1…2 мс, чему соответствует установка ротора сервопривода в крайние левое (0°) и правое (180°) положения. При длительности импульса 1,5 мс ротор будет установлен приблизительно в середине диапазона вращения (около 90°).

Рис. 15. Сигнал управления сервоприводом

Рис. 15. Сигнал управления сервоприводом

После компиляции исходного кода первоначальной версии проекта размер прошивки равен приблизительно 200 байт. Это означает, что в памяти программ остается еще достаточно места для реализации пользовательских приложений. Так, например, задействовав регистр TB0CCR2, можно реализовать управление двумя сервоприводами, подключив его к выводу P2.1. Если же нужно обеспечить более широкую функциональность, тогда необходимо использовать микроконтроллеры семейства MSP430™ с большим объемом памяти. Если управлять сервоприводом по интерфейсу UART нет необходимости, тогда модуль eUSCI можно отключить, что позволит получать ШИМ-сигналы также и на выводах P1.6 и P1.7.

Поскольку значение регистров CCR1 хранится в энергонезависимой памяти FRAM, то после сброса микроконтроллера, например, путем установки низкого уровня на выводе RST или в результате сбоя в цепи питания микроконтроллера, положение ротора сервопривода останется прежним. Если же необходимо, чтобы после сброса ротор сервопривода всегда устанавливался в некоторое исходное (начальное) положение, то исходный код базового проекта необходимо модифицировать.

RC-генератор REFO работает на частоте ACLK, равной 32 кГц, которая является, в том числе, и опорной частотой для приемопередатчика UART. Однако для повышения стабильности тактовой частоты во всем диапазоне рабочих температур рекомендуется использовать внешний кварцевый резонатор. Кроме этого, за счет использования во время простоя энергосберегающего режима LPM3 величина потребляемого тока составляет около 17 мкА при тактировании узлов от REFO, а при использовании генератора с внешним кварцевым резонатором (LFXT) ток потребления микроконтроллера можно уменьшить до 1 мкА.

Контроллер шагового двигателя
(Stepper Motor Control Using MSP430™ MCUs)

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

Для подключения шаговых двигателей к микроконтроллеру используют специальные микросхемы – драйверы, выполняющие функции не только усилителей мощности, но и преобразователей алгоритмов. Так, например, микросхема DRV8825, задействованная в данном проекте, уже содержит узлы, формирующие необходимую последовательность подачи напряжений на обмотки двигателя, в результате чего для управления шаговым двигателем необходимо сформировать всего два простых сигнала, отвечающих за направление вращения и количество шагов перемещения подвижной части привода. В базовом варианте проекта, исходные коды которого можно загрузить с официального сайта Texas Instruments, сигналы управления драйвером DRV8825 формируются микроконтроллером семейства MSP430™, при этом ШИМ-сигнал, определяющий количество шагов, формируется с помощью таймера, а сигнал направления вращения – обычным портом ввода/вывода общего назначения. Благодаря простоте формируемых сигналов размер прошивки не превышает 512 байт, что позволяет использовать в данном проекте микроконтроллеры MSP430FR2000, обладающие наименьшим объемом памяти программ.

Реализация

В микросхеме DRV8825 уже реализованы все защитные функции, необходимые для безопасной работы шагового двигателя, поэтому микроконтроллеру для начала работы необходимо сгенерировать всего лишь два сигнала: направление вращения и количество шагов. Выводы RESET и SLEEP драйвера не используются, поэтому напряжения на них имеют уровень логической единицы. Кроме этого, высокий логический уровень присутствует также и на выводе M2, поскольку в данном проекте режим микрошага (1/16 шага) также не реализован. Необходимо помнить, что диапазон рабочих напряжений питания, максимальное значение токов, требования к синхронизации, допустимые режимы работы и многие другие технические параметры зависят от конкретной модели шагового двигателя, поэтому перед подключением шагового двигателя, отличающегося от модели, используемой в базовой версии проекта, необходимо внимательно изучить его техническую документацию. В оригинальной версии проекта шаговый двигатель подключается к микроконтроллеру с помощью популярной платы на основе драйвера DRV8825, хотя сейчас уже существуют более современные микросхемы, например, DRV8886AT, содержащая кроме обновленных и улучшенных базовых функций возможность автоматической настройки и интегрированные узлы для измерения токов обмоток (рисунок 16).

Рис. 16. Схема подключения шагового двигателя

Рис. 16. Схема подключения шагового двигателя

Для генерации ШИМ-сигнала, подаваемого через вывод P2.0 на контакт STEP драйвера DRV8825, используется таймер Timer_B0. Тактовый генератор микроконтроллера инициализируется на частоте 16 МГц, которая затем для исключения необходимости добавления задержек при доступе к сегнетоэлектрической памяти FRAM делится на 2. Результирующая частота MCLK, равная 8 МГц, с помощью подсистемы распределения тактовой частоты SMCLK подается ко всем периферийным устройствам микроконтроллера, в том числе к таймеру Timer_B0, работающему в режиме инкрементирующего счета. Значение регистра TB0CCR0 определяет частоту ШИМ-сигнала, а следовательно – и частоту вращения двигателя, в то время как информация в регистре TB0CCR1 рассчитывается таким образом, чтобы коэффициент заполнения импульсов управления был максимально близким к 50%, что необходимо для нормальной работы драйвера DRV8825.

Для связи с компьютером используется модуль асинхронного приемопередатчика eUSCI_A0, который конфигурируется для работы в режиме UART, при этом информация с компьютера, полученная в последовательном коде через вывод P1.6, сохраняется в регистре UCA0RXD. В базовом варианте проекта используется отладочная плата MSP-TS430PW20 на основе микроконтроллера MSP430FR2000 и программатор-отладчик MSP-FET. По умолчанию информация по UART передается со скоростью 9600 бод с одним стоповым битом и без использования бита четности, однако эти параметры могут быть легко изменены в зависимости от требований конкретного приложения. Для изменения параметров вращения шагового двигателя микроконтроллеру по интерфейсу UART необходимо передать число в диапазоне 0x00…0x0A. Передача значения 0x00 приведет к остановке двигателя, а 0x0A – к инверсии сигнала на выводе P2.1, который подключен к входу DIR драйвера DRV8825 и определяет направление вращения двигателя. Передача значений в диапазоне 0x01…0x09 приведет к изменению скорости вращения двигателя, причем чем больше число, тем больше скорость вращения. Реальное значение скорости вращения во многом зависит от конкретных моделей драйвера и шагового двигателя. Параметры сигналов, используемых в базовом проекте, приведены в таблице 10.

Таблица 10. Соответствие длительности импульса данным, полученным по UART

Значение принятого байта Значение регистра TB0CCR1 Частота сигнала управления, кГц
0x00 0 0
0x01 8000 1
0x02 4000 2
0x03 2000 4
0x04 1000 8
0x05 500 16
0x06 250 32
0x07 125 64
0x08 64 125
0x09 32 250

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

На рисунке 17 показаны три примера сигналов управления шаговым двигателем, генерируемых микроконтроллером при передаче по интерфейсу UART значений, указанных на рисунке красным шрифтом, которые подтверждают правильность таблицы 10. Работа двигателя на более высоких скоростях не тестировалась из-за ограниченного значения максимально допустимого тока, потребляемого от источника питания.

Рис. 17. Сигнал управления шаговым двигателем

Рис. 17. Сигнал управления шаговым двигателем

После компиляции исходного кода базовой версии проекта размер прошивки равен приблизительно 250 байт. Это означает, что в памяти программ остается еще достаточно места для реализации пользовательских приложений. Так, например, задействовав регистр TB0CCR2, можно реализовать управление двумя шаговыми двигателями, подключив вход STEP второго драйвера к выводу P2.1 (в этом случае за направление вращения должен отвечать другой порт). Если же необходимо обеспечить более широкую функциональность, тогда нужно использовать микроконтроллеры из семейства MSP430™ с большим объемом памяти. Если необходимости управления по интерфейсу UART нет, то модуль eUSCI можно отключить, что позволит получать ШИМ-сигналы также и на выводах P1.6 и P1.7. Но поскольку таймер (Timer_B0) содержит всего два свободных регистра захвата/сравнения (CCR1 и CCR2), то количество одновременно генерируемых ШИМ-сигналов ограничено.

Поскольку источником опорного сигнала для таймера является подсистема распределения тактовой частоты (SMCLK), то при простое системы можно использовать только энергосберегающий режим LPM0, при котором среднее значение потребляемого тока будет равно приблизительно 300 мкА. Если же использовать частоту 8 кГц и менее, то тактирование периферийных модулей можно осуществить от вспомогательного тактового генератора (ACLK). Использование ACLK совместно с энергосберегающим режимом LPM3 позволит при использовании RC-генератора (REFO) уменьшить ток потребления системы до величины 17 мкА, а при использовании генератора с внешним кварцевым резонатором (LFXT) – 1 мкА.

Двухканальный цифро-аналоговый преобразователь
(Dual-Output 8-Bit PWM DAC Using Low-Memory MSP430™ MCUs)

Генерация аналоговых сигналов необходима во многих приложениях, начиная от детских игрушек и заканчивая музыкальными проигрывателями и различными генераторами. Обычно для этого используются специализированные цифро-аналоговые преобразователи (ЦАП), которые не всегда входят в комплект периферийных устройств недорогих микроконтроллеров. Однако при добавлении всего нескольких пассивных компонентов сформировать сигналы небольшой частоты можно с помощью обычных таймеров, поддерживающих режим широтно-импульсной модуляции (ШИМ). Это наглядно продемонстрировано в данном проекте, исходные коды которого можно загрузить с официального сайта Texas Instruments, на примере генерации сигналов постоянного и переменного токов. Данный метод можно также использовать для формирования самых различных сигналов, в том числе и произвольной формы. Перед началом работы с проектом также рекомендуется изучить руководство «Использование таймера в качестве цифро-аналогового преобразователя» (“Using PWM Timer_B as a DAC Microcontrollers”).

В этом проекте показан пример реализации двухканального восьмиразрядного ЦАП, один канал которого генерирует синусоидальное напряжение с частотой 250 Гц, а второй – постоянное напряжение. Синусоидальное напряжение формируется на основании табличных значений отсчетов значений синуса, обновляемых каждый раз после завершения периода ШИМ-сигнала, частота которого в 16 раз больше, чем требуется для сигнала с такими параметрами. Для устранения высокочастотных пульсаций сгенерированного напряжения, неизбежных при таком методе формирования, к выходам микроконтроллера подключены RC-фильтры нижних частот, поэтому повышенная частота ШИМ-сигнала также способствует лучшей фильтрации выходного напряжения.

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

На рисунке 18 видно, что коэффициент заполнения импульсов ШИМ-сигнала при формировании синусоидального напряжения изменяется в каждом цикле, в то время как при формировании постоянного напряжения он остается постоянным. Также на приведенных диаграммах можно заметить наличие небольших высокочастотных пульсаций напряжений на выходе RC-фильтров.

Рис. 18. Диаграммы работы ЦАП

Рис. 18. Диаграммы работы ЦАП

Реализация

Разрешающая способность ЦАП определяется разрядностью счетчика таймера. При использовании 8-разрядных данных это значение равно 256 (28 = 256). Необходимую частоту дискретизации, равную частоте выходного ШИМ-сигнала, можно определить по формуле 1, задавшись максимальным количеством отсчетов, используемым для формирования сигналов. Для синусоидального сигнала с частотой 250 Гц, генерируемого на основе таблицы из 32 отсчетов, частота ШИМ-сигнала будет равна 8 кГц:

$$32\:отчета\times 250\:(Гц)=8\:кГц\qquad{\mathrm{(}}{1}{\mathrm{)}}$$

Для понимания сути происходящих процессов необходимо просто вспомнить, что выходной RC-фильтр фактически выделяет среднее значение периодического напряжения прямоугольной формы. Таким образом, частота дискретизации является ничем иным как количеством циклов ШИМ-сигнала, необходимых для генерации периодического напряжения с частотой 250 Гц по 32-м отсчетам.

Необходимое значение опорной частоты таймера получается путем умножения частоты дискретизации на разрешающую способность таймера (формула 2):

$$f_{CLOCK}=f_{PWM}\times 2^N=8\times 2^8=2.048\:МГц,\qquad{\mathrm{(}}{2}{\mathrm{)}}$$

где N = 8 – разрешающая способность ЦАП.

В приведенном примере для получения сигнала с частотой fCLOCK был использован внутренний генератор с цифровым управлением (DCO), выходная частота которого была выбрана равной 16 МГц. После этого с помощью делителя с коэффициентом деления 4 была получена системная тактовая частота (MCLK), которая в свою очередь была поделена на 2 подсистемой распределения тактовых импульсов (SMCLK). В результате частота импульсов на выходе SMCLK, являющаяся опорной для таймера Timer_B, равна 16: 4 : 2 = 2 МГц. Теперь для получения необходимой длительности периода осталось только единожды установить значение регистра CCR0 равным 255.

При генерации синусоидального сигнала обновление значения регистра CCR1, определяющего коэффициент заполнения ШИМ-сигнала, происходит в обработчике прерывания, генерируемого каждый раз при совпадении значений основного регистра таймера и CCR0. Каждый раз при возникновении данного прерывания происходит увеличение на единицу индекса активного элемента таблицы из 32 записей до тех пор, пока его значение не выйдет за ее границы и не будет обнулено. Поскольку второй канал ЦАП формирует постоянное напряжение, то значение регистра CCR2 в прерывании не изменяется.

Микроконтроллер настроен таким образом, что регистры CCR1 и CCR2 подключены непосредственно к выводам микроконтроллера P1.6/TB0.1 и P1.7/TB0.2 соответственно, хотя в качестве альтернативы для этих целей можно использовать также выводы P2.0 и P2.1. Выходы регистров CCR1 и CCR2 настроены для работы в триггерном режиме: при достижении таймером значения, записанного в регистре CCR0, происходит установка выходов CCR1 и CCR2 в состояние логической единицы, а при достижении значений, записанных в регистрах CCR1 (CCR2) – в состояние логического нуля. Такой метод формирования выходного сигнала обеспечивает положительную полярность импульсов ШИМ-сигнала без инверсии.

Для фильтрации высокочастотной составляющей ШИМ-сигнала в канале, формирующем синусоидальное напряжение, применен двухзвенный RC-фильтр второго порядка, значения R и C которого можно определить по формуле 3:

$$f_{C}=\frac{1}{2\pi \sqrt{RC}},\qquad{\mathrm{(}}{3}{\mathrm{)}}$$

где R⋅C = R1⋅C1 = R2⋅C2.

Частота среза fC данного фильтра (в данном случае – 795 Гц) выбирается таким образом, чтобы она находилась достаточно далеко от верхней границы полосы пропускания, что уменьшает ослабление полезного сигнала, но была ниже, чем частота ШИМ, ведь его высокочастотную составляющую необходимо подавить. Для лучшего отклика на переходные процессы рекомендуется выполнение условия R2 >> R1. Схема пассивного фильтра второго порядка была выбрана в первую очередь из-за ее простоты, хоть она и требует более высокой частоты дискретизации, чем при использовании фильтров нижних частот более высоких порядков.

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

Итоговая схема ЦАП показана на рисунке 19. В проекте была использована отладочная плата MSP-TS430PW20 с микроконтроллером MSP430FR2000, а два RC-фильтра низких частот были реализованы с помощью внешних компонентов.

Рис. 19. Принципиальная схема ЦАП

Рис. 19. Принципиальная схема ЦАП

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

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

Рис. 20. Диаграммы работы ЦАП при C2 = 220 пФ и 50% ШИМ при Uвых канала постоянного тока = 1,64 В

Рис. 20. Диаграммы работы ЦАП при C2 = 220 пФ и 50% ШИМ при Uвых канала постоянного тока = 1,64 В

Уменьшить уровень высокочастотных пульсаций на выходе можно путем использования фильтров более высоких порядков, коэффициент передачи которых на частоте среза можно найти по формуле 4:

$$\frac{V_{OUT}}{V_{IN}}=\left(\frac{1}{\sqrt{2}} \right)^N,\qquad{\mathrm{(}}{4}{\mathrm{)}}$$

где N – порядок фильтра.

Альтернативным способом уменьшения уровня пульсаций является увеличение частоты среза, например, путем увеличения емкости конденсатора C2 до 420 пФ (рисунок 19). Однако в этом случае формула 3 для расчета частоты среза уже становится некорректной (поскольку R1C1 ≠ R2C2), и необходимо использовать формулу 5:

$$f_{C}=\frac{1}{2\pi \sqrt{R_{1}C_{1}R_{2}C_{2}}}\qquad{\mathrm{(}}{5}{\mathrm{)}}$$

В данном случае fС = 549 Гц.

Кроме того, выходной уровень канала постоянного напряжения можно регулировать путем изменения коэффициента заполнения ШИМ-сигнала (рисунки 19 и 21). Без учета ослабления в фильтре нижних частот выходное напряжение канала постоянного тока VDC определяется по формуле 6:

$$V_{DC}=D\times V_{CC},\qquad{\mathrm{(}}{6}{\mathrm{)}}$$

где VCC – напряжение питания микроконтроллера, D – коэффициент заполнения импульсов ШИМ-сигнала.

Рис. 21. Диаграммы работы ЦАП при C2 = 420 пФ и 100% ШИМ при Uвых канала постоянного тока = 3,32 В

Рис. 21. Диаграммы работы ЦАП при C2 = 420 пФ и 100% ШИМ при Uвых канала постоянного тока = 3,32 В

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



/**
* Обработчик прерывания таймера TimerB0 *
**/
#pragma vector=TIMER0_B0_VECTOR
__interrupt void TIMER0_B0_ISR( void)
{
 //Увеличение коэффициента заполнения на 8
 //Для изменения частоты сигнала измените величину приращения
 dutyCycle+=8;
 //Установка значения регистра CCR1 с ограничением максимального значения на уровне 255
 TB0CCR1 = dutyCycle & 0x0FF;
}

Результат выполнения приведенного кода показан на рисунке 22. Более детально эти вопросы рассмотрены в руководстве «Использование таймера в качестве цифро-аналогового преобразователя».

Также можно заметить, что теоретически табличный метод формирования сигналов позволяет генерировать сигналы любой сложности и длительности, естественно, при наличии таблицы с правильно рассчитанными значениями отсчетов. А если размер таблицы превышает 500 байт, то всегда можно взять микроконтроллер семейства MSP430™ с большим объемом памяти.

Рис. 22. Результат формирования пилообразного напряжения. Верхние диаграммы приведены в более мелких масштабах

Рис. 22. Результат формирования пилообразного напряжения. Верхние диаграммы приведены в более мелких масштабах

Преобразователь «напряжение-частота»
(Analog Input to PWM Output Using the MSP430™ MCU Enhanced Comparator)

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

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

Реализация

Логическое значение выходного сигнала модуля компаратора eCOMP зависит от разницы напряжений на неинвертирующем (V+) и инвертирующем (V–) входах. В данном проекте неинвертирующий вход компаратора подключен к выводу микроконтроллера, и на него подается подлежащий оцифровке аналоговый сигнал Vinput, а инвертирующий – к выходу встроенного программируемого шестиразрядного источника опорного напряжения, фактически являющегося цифро-аналоговым преобразователем (ЦАП).

Кроме модуля eCOMP, в проекте задействован также порт ввода/вывода общего назначения (GPIO) P1.3 (рисунок 23), к которому подключена кнопка. Нажатие на нее запускает процесс оцифровки. Для устранения возможных наводок и помех между выводом P1.3 и общим проводом включен конденсатор. Базовый вариант проекта реализован на отладочной плате MSP-TS430PW20 с микроконтроллером MSP430FR2000. Все соединения платы с источником аналогового сигнала, кнопкой и выходным устройством осуществляется с помощью проводов.

Рис. 23. Структурная схема преобразователя

Рис. 23. Структурная схема преобразователя

Источником опорного напряжения для ЦАП является интегрированный стабилизатор с выходным напряжением 1,5 B. Оцифровка входного сигнала начинается с установки выходного напряжения ЦАП, равного половине опорного напряжения (0,75 В). Для этого в регистр CPDACDATA модуля eCOMP записывается значение 0x20, и его значение устанавливается на 32-м из 64 возможных уровней. После этого, в зависимости от состояния компаратора, содержимое регистра CPDACDATA изменяется до тех пор, пока методом деления отрезка пополам выходное напряжение ЦАП не будет установлено максимально близко к измеряемому напряжению. Поиск осуществляется по следующему алгоритму: если выходной бит компаратора находится в состоянии логического нуля (опорное напряжение больше измеряемого напряжения), то от содержимого регистра CPDACDATA отнимается половина его текущего значения, в противном случае, когда опорное напряжение меньше измеряемого напряжения, половина текущего значения CPDACDATA будет добавлена к его текущему содержимому. Несмотря на простоту и достаточно малую скорость подобного итеративного процесса, его вполне можно использовать в большом количестве приложений, не требующих высокой точности управления. После оцифровки, содержимое регистра CPDACDATA используется для расчета параметров выходного ШИМ-сигнала, которое генерируется таймером Timer_B0, подключенным к выводу P2.0 микроконтроллера. В общем случае информацию из CPDACDATA можно использовать для установки значения регистра TB0CCR0, отвечающего за длительность периода (частоту), или TB0CCR1, содержащего информацию о длительности импульсов выходного ШИМ-сигнала.

Для запуска базовой версии проекта подключите оборудование в соответствии с принципиальной схемой и запрограммируйте микроконтроллер с помощью программатора-отладчика MSP-FET. После включения питания измените управляющее напряжение на входе Vinput и запустите процесс преобразования, нажав на кнопку.

Максимальное количество уровней шестиразрядного ЦАП и, соответственно, количество состояний выходного сигнала, равно 64. В данном примере частоту выходного сигнала при заданном напряжении на входе и частоте тактирования таймера fCLK можно определить по формуле 7:

$$f_{PWM}=\frac{f_{CLK}}{(Значение\;регистра\:CPDACDATA)\times 128}\qquad{\mathrm{(}}{7}{\mathrm{)}}$$

Коэффициент заполнения импульсов ШИМ-сигнала в базовой версии этого проекта фиксирован и составляет 50%. Частота выходного сигнала для некоторых значений входного напряжения Vinput при тактовой частоте fCLK = 1,048 МГц приведена в таблице 11. При необходимости закон изменения частоты и длительности импульсов выходного ШИМ-сигнала можно легко изменить в соответствии с требованиями конкретного приложения.

Таблица 11. Значения частоты выходного сигнала при различных значениях Vinput

Vinput, В Значение регистра CPDACDATA Выходная частота, кГц
0 1 8000
0,5 23 340
1 43 181
1,5 63 124

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

На рисунке 24 показан пример работы преобразователя. Согласно результатам измерений, время оцифровки входного напряжения составляет приблизительно 5,95 мс. При этом, благодаря постоянному количеству итераций алгоритма оцифровки, это время не зависит от уровня входного напряжения. В приведенном примере вход преобразователя был подключен к источнику питания с напряжением 1,09 В. После завершения работы алгоритма оцифровки значение регистра, отвечающего за выходное напряжение ЦАП, стало равно 47. Минимальное разрешение полученного АЦП равно 1,5 В/64 = 0,023 В, поэтому при таком значении регистра выходное напряжение ЦАП будет равно (1,5 В * 47)/64 = 1,10 В. Таким образом, величина погрешности оцифровки равна 1,10 В – 1,09 В = 0,01 В, что меньше минимального разрешения.

Рис. 24. Результаты работы преобразователя

Рис. 24. Результаты работы преобразователя

После компиляции размер прошивки преобразователя равен приблизительно 380 байт, что позволяет использовать оставшееся место для реализации дополнительных функций, например, обработки состояния порта GPIO или таблицы значений параметров ШИМ. Дальнейшее увеличение функционала, скорее всего, потребует увеличения необходимого объема памяти программ и перехода на более мощные контроллеры из семейства MSP430™. Поскольку источником опорного сигнала для таймера является подсистема распределения тактовой частоты (SMCLK), то при простое системы можно использовать только энергосберегающий режим LPM0. При необходимости дальнейшего уменьшения потребляемой мощности, что возможно, например, при использовании энергосберегающего режима LPM3, необходимо тактировать таймер от другого системного источника.

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

•••

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

О компании Texas Instruments

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

Товары
Наименование
MSP430FR2000IRLLR (TI)
MSP430FR2000IPW16 (TI)
MSP430FR2000IRLLT (TI)
MSP430FR2000IPW16R (TI)
MSP-TS430PW20 (TI)
CSD18537NKCS (TI)
SN74LV1T34DBVR (TI)
SN74LV1T125DBVR (TI)
SN74LV1T125DCKR (TI)
SN74LV1T86DBVR (TI)
DRV8825PWP (TI)
DRV8825EVM (TI)
DRV8825PWPR (TI)
DRV8886ATPWP (TI)
DRV8886ATPWPR (TI)
DRV8886ATRHRR (TI)
DRV8886ATEVM (TI)