Лабораторная работа № 3. Изучение микроконтроллера MSP430. Аналоговый ввод-вывод 1. Цель работы Изучение основных средств микроконтроллера MSP430 для ввода-вывода аналоговых сигналов. Изучение основных приемов программирования микроконтроллера MSP430 для операций ввода-вывода аналоговых сигналов и передачи результатов измерений по последовательному интерфейсу. 2. Задачи Создание простых программ управления аналоговыми линиями порта ввода-вывода для отладочного модуля MSP430 LaunchPad с помощью среды программирования Energia. Создание программ обмена данными между отладочным модулем MSP430 LaunchPad, электронным устройством на плате расширения и персональным компьютером по последовательному интерфейсу. Прошивка микроконтроллера и проверка работы программ. 3. Теоретическая часть 3.1. Модули ввода-вывода аналоговых сигналов в микроконтроллерах MSP430 В микроконтроллерах MSP430 для ввода и вывода аналоговых сигналов используются следующие функциональные модули [3]: таймер, модуль операционного усилителя, модуль аналогового компаратора, модуль аналогоцифрового преобразователя (АЦП), модуль цифро-аналогового преобразователя (ЦАП). 3.1.1. Модуль операционного усилителя. Модуль операционного усилителя OA представляет собой операционный усилитель общего назначения и предназначен для обработки внешнего аналогового сигнала для последующего аналого-цифрового преобразования. Микроконтроллеры MSP430 могут иметь в своем составе несколько модулей ОА. Конфигурация модуля ОА определяется установкой битов регистра OAxCTL0, где x – порядковый номер модуля. Модуль OA имеет следующие особенности: однополярное питание, малый потребляемый ток; выходной сигнал с размахом, равным напряжению питания (выход rail-torail); программируемое соотношение между временем установления и потреблением; программное конфигурирование; программно-конфигурируемый резистивный делитель в цепи обратной связи для реализации усилителей с программируемым коэффициентом усиления (PGA). Конфигурирование модуля OA осуществляется пользовательской программой. Он может быть сконфигурирован как инвертирующий или неинвертирующий усилитель, а также соединён с другими модулями OA для реализации различных вариантов дифференциальных усилителей. Модуль OA может использоваться для реализации следующих восьми различных вариантов дифференциальных усилителей. Операционный усилитель общего назначения. В этом режиме внутренний делитель обратной связи отключён от ОУ. Входные сигналы поступают на инвертирующий и неинвертирующий входы ОУ. Выход ОУ подключается к одному из входов модуля 12-разрядного АЦП ADC12. Буфер с единичным усилением для дифференциального усилителя. В этом режиме выход ОУ соединён с его инвертирующим входом, обеспечивая коэффициент усиления, равный единице. Входной сигнал подается на неинвертирующий вход. Подача внешних сигналов на инвертирующий вход невозможна. Выход ОУ подключается к одному из выводов внутренней резистивной цепочки. Этот режим используется только при реализации дифференциального усилителя на трёх ОУ. Компаратор. В этом режиме выход ОУ отключён от резистивной цепочки. Резистивная цепочка используется для подачи на инвертирующий вход ОУ порогового напряжения. При этом образуется компаратор с программируемым порогом. Входной сигнал подается на неинвертирующий вход ОУ. Можно ввести в схему гистерезис, добавив внешний резистор положительной обратной связи. Подача внешних сигналов на инвертирующий вход невозможна. Выход ОУ подключается к одному из входов модуля ADC12. Неинвертирующий усилитель. В этом режиме выход ОУ через резистивную цепочку подключён к инвертирующему входу ОУ, образуя неинвертирующий усилитель с коэффициентом усиления [1 + Ko]. Коэффициент Ko программируется. Входной сигнал подается на неинвертирующий вход. Подача внешних сигналов на инвертирующий вход невозможна. Выход ОУ подключается к одному из входов модуля ADC12. Многокаскадный неинвертирующий усилитель. В этом режиме допускается последовательное соединение двух или трёх модулей OA, работающих как неинвертирующие усилители. Выходы ОУ модулей подключаются к входам модуля ADC12. Инвертирующий усилитель. В этом режиме резистивная цепочка включается между источником входного сигнала, инвертирующим входом ОУ и выходом ОУ. Так образуется неинвертирующий усилитель с коэффициентом усиления минус Ko. Коэффициент Ko программируется. Выход ОУ подключается к одному из входов модуля ADC12. Дифференциальный усилитель. В этом режиме модули OA микроконтроллера соединяются друг с другом, образуя дифференциальный усилитель на двух или трёх ОУ. Выход ОУ подключается к одному из входов модуля ADC12. 3.1.2. Модуль аналогового компаратора. Модуль Comparator_A+ представляет собой аналоговый компаратор напряжения. Он обеспечивает выполнение точных аналого-цифровых преобразований методом прямого интегрирования, контроль напряжения питания и мониторинг внешних аналоговых сигналов. Модуль Comparator_A+ имеет следующие особенности: мультиплексоры на обоих (инвертирующем и неинвертирующем) входах модуля; программно подключаемый RC-фильтр на выходе компаратора; возможность подключения выхода компаратора к входу захвата Таймера A; программное управление входным буфером порта; поддержка прерываний; конфигурируемый генератор опорного напряжения; возможность выключения компаратора и генератора опорного напряжения; входной мультиплексор компаратора. Конфигурирование модуля Comparator_A+ осуществляется пользовательской программой. Компаратор сравнивает аналоговые напряжения на неинвертирующем (+) и инвертирующем (–) входах. Если напряжение на неинвертирующем входе больше, чем на инвертирующем, то на выходе компаратора CAOUT появляется сигнал ВЫСОКОГО уровня. Компаратор может быть включен или выключен посредством определенного управляющего бита. При выключенном компараторе на выходе CAOUT постоянно присутствует НИЗКИЙ уровень. Входные аналоговые ключи используются для подключения или отключения входов модуля к/от соответствующих выводов микроконтроллера. Оба входа компаратора конфигурируются независимо друг от друга. Возможно: подавать внешние сигналы на неинвертирующий и инвертирующий входы компаратора; выводить напряжение от внутреннего генератора опорного напряжения на соответствующий вывод микроконтроллера. Если необходимо, то к выходу компаратора может быть подключён внутренний фильтр. Если разница напряжений на входах компаратора достаточно мала, то на его выходе всегда начинают генерироваться колебания. Эта генерация (рис. 3.1) вызывается внутренними и внешними паразитными связями, а также перекрёстными помехами между сигнальными линиями, линиями питания и другими элементами системы. Колебания на выходе компаратора снижают точность и разрешающую способность результата сравнения. Использование фильтра может уменьшить ошибки, вызванные генерацией на выходе компаратора. Рис. 3.1. Влияние RC-фильтра на выходной сигнал компаратора На любой из входов компаратора может быть подан сигнал от генератора опорного напряжения. Величина выходного напряжения генератора задаётся программно. Также программируется вывод компаратора, на который поступает опорное напряжение от генератора. Если на оба входа компаратора подаются внешние сигналы, то внутренний генератор опорного напряжения следует выключать для уменьшения тока, потребляемого модулем. Генератор может формировать напряжение, равное четверти или половине напряжения питания VCC, или же фиксированное напряжение, равное пороговому напряжению транзистора (~0.55 В). 3.1.3. Модуль 10-битного АЦП. Модуль 10-битного АЦП ADC10 представляет собой быстродействующий 10-битный аналого-цифровой преобразователь. Модуль ADC10 обеспечивает быстрое выполнение 10-битных аналого-цифровых преобразований. В составе модуля имеется 10-битное ядро с регистром последовательного приближения, блок управления выборкой, генератор опорного напряжения и контроллер пересылки данных (DTC). Контроллер DTC позволяет модулю сохранять результаты преобразований в пределах всего адресного пространства без использования ЦПУ. Модуль может конфигурироваться пользовательской программой в соответствии с требованиями различных приложений. Модуль ADC10 имеет следующие особенности: максимальная скорость преобразования — более 200 тыс. выборок/с; 10-битный преобразователь с монотонной характеристикой без пропуска кодов; устройство выборки/хранения с программируемым временем выборки; запуск преобразования производится программно или по сигналу от Таймера B; программно конфигурируемый внутренний генератор опорного напряжения (1.5 В или 2.5 В); внешний или внутренний источник опорного напряжения (ИОН) выбирается программно; восемь каналов преобразования внешних сигналов (12 в моделях MSP430x22x); каналы преобразования для внутреннего датчика температуры, напряжения VCC и внешних опорных напряжений; конфигурируемый источник тактового сигнала; четыре режима преобразования: одноканальный, многократный одноканальный, последовательный и многократный последовательный; ядро АЦП и ИОН могут выключаться независимо друг от друга; контроллер пересылки данных для автоматического сохранения результатов преобразований. Конфигурирование модуля ADC10 осуществляется пользовательской программой. Ядро АЦП преобразует аналоговый сигнал в 10-битный цифровой код и сохраняет результат в регистре ADC10MEM. Верхний и нижний пределы преобразования определяются двумя программируемыми уровнями напряжения (VR+ и VR–). Результат преобразования равен максимальному значению (03FFh), если уровень входного сигнала Vin больше или равен VR+, и нулю, если уровень входного сигнала меньше или равен VR–. Входной канал и уровни опорных напряжений (VR+ и VR–) задаются регистрами управления модуля. Результат преобразования может быть представлен в обычном виде или в дополнительном коде. При использовании обычного двоичного кода результат аналого-цифрового преобразования определяется выражением: N = 1023 × (Vin – VR-)/(VR+ – VR-). Конфигурирование ядра АЦП осуществляется двумя регистрами управления ADC10CTL0 и ADC10CTL1. Входной аналоговый мультиплексор позволяет выбирать для преобразования один из 8 внешних и 4 внутренних аналоговых сигналов. Внешние входы модуля ADC10 мультиплексированы с линиями портов ввода/вывода, которые представляют собой цифровые схемы на КМОП-элементах. Модуль ADC10 разработан для использования в приложениях с низким энергопотреблением. Поэтому ядро автоматически отключается в те периоды времени, когда модуль не выполняет преобразований, и автоматически включается при необходимости. Модуль ADC10 поддерживает четыре режима работы: Однократный одноканальный режим преобразования. В этом режиме выполняется однократное преобразование выбранного канала. Результат преобразования заносится в регистр ADC10MEM. Однократный последовательный режим преобразования. В этом режиме выполняется цикл преобразований нескольких последовательно расположенных каналов, по одному преобразованию на канал. Первый канал последовательности задаётся программно, а последним является канал A0. Результат каждого преобразования заносится в регистр ADC10MEM. Циклический одноканальный режим преобразования. В этом режиме периодически выполняется преобразование выбранного канала. Результат преобразования заносится в регистр ADC10MEM. Циклический последовательный режим преобразования. В этом режиме периодически выполняется цикл преобразований нескольких последовательно расположенных каналов, по одному преобразованию на канал. Первый канал последовательности задаётся программно, а последним является канал A0. Результат каждого преобразования заносится в регистр ADC10MEM. Цикл завершается преобразованием канала A0, а повторный запуск цикла производится по следующему сигналу запуска. В составе модуля ADC10 имеется контроллер передачи данных (DTC), предназначенный для автоматической пересылки результатов преобразования из регистра ADC10MEM в другие ячейки внутренней памяти. Контроллер DTC включается при записи в регистр ADC10DTC1 ненулевого значения. При включённом контроллере пересылка данных производится каждый раз, когда модуль завершает преобразование и загружает результат в регистр ADC10MEM. Со стороны программы не требуется никаких действий по управлению модулем до тех пор, пока не будет передано заданное число отсчётов. 3.1.4. Модуль 12-битного ЦАП. Модуль 12-битного ЦАП DAC12 представляет собой цифро-аналоговый преобразователь с потенциальным выходом. Модуль DAC12 может работать в 8или 12-битном режимах. Модуль DAC12 имеет следующие особенности: монотонная характеристика в пределах 12-битного диапазона; потенциальный выход с разрешением 8 или 12 бит; программируемое соотношение между временем установления и потреблением; внешний или внутренний источник опорного напряжения; использует данные в натуральном двоичном коде или в дополнительном коде; возможность самокалибровки для коррекции напряжения смещения; возможность синхронного обновления выходов нескольких модулей DAC12. Конфигурирование модуля DAC12 осуществляется пользовательской программой. Модуль DAC12 может быть сконфигурирован для работы в 8- или 12-битном режиме. Максимальный уровень выходного сигнала (однократное или трёхкратное значение выбранного опорного напряжения) программно устанавливается. Это позволяет пользователю управлять динамическим диапазоном ЦАП. Формат входных натуральный двоичный код или дополнительный код - также устанавливается программно. В 8_битном режиме наибольшее используемое значение регистра входного кода DAC12_xDAT составляет 0FFh, а в 12_битном режиме — 0FFFh. Значения, превышающие указанные величины, могут быть записаны в регистр, однако все неиспользуемые старшие биты будут проигнорированы. Выходы модулей DAC12 мультиплексированы с выводами порта P6, аналоговыми входами модуля ADC12, а также с выводами внешнего опорного напряжения. Модуль DAC12 поддерживает два формата представления данных: натуральный двоичный код и обратный код. При использовании данных, представленных в натуральном коде, максимальному выходному сигналу в 12битном режиме соответствует значение 0FFFh (0FFh в 8-битном режиме), как показано на рис. 3.2. Рис. 3.2. Зависимость выходного напряжения модуля DAC12 от входных данных, представленных в натуральном двоичном коде (12-битный режим). При использовании данных, представленных в дополнительном коде, диапазон сдвигается таким образом, чтобы при значении 0800h регистра DAC12_xDAT (0080h в 8-битном режиме) выходное напряжение ЦАП было равно нулю, при 0000h — половине от максимального значения, а при 07FFh (007Fh в 8битном режиме) — максимальному значению, как показано на рис. 3.3. Рис. 3.3. Зависимость выходного напряжения модуля DAC12 от входных данных, представленных в дополнительном двоичном коде (12-битный режим). 3.2. Программирование аналогового ввода-вывода Среда разработки Energia и язык Arduino предоставляют следующие функции для программирования аналогового ввода и вывода. Функция int analogRead(). Описание. Читает значение определенного аналогового вывода. Микроконтроллеры MSP430, входящие в комплект отладочного модуля LaunchPad, имеют 10-битный АЦП. Это означает, что входные напряжения в диапазоне между 0В и +5В переводятся в цифровые значения от 0 до 1023. Дискретность преобразования в таком случае составляет 5/1024 = 0,0049В. Выполнение преобразования занимает порядка 100мкс, т.е. максимальная скорость считывания составляет 10 000 раз в секунду. Синтаксис: analogRead(pin). Параметры: pin - номер контакта микроконтроллера, с которого следует прочесть значение входного аналогового сигнала (обычно от 0В до +5В). Доступные контакты для аналогового ввода показаны на рис. 1.9 и 1.10. Возвращает: значение целого типа в диапазоне от 0 до 1023. Примечание: если аналоговый вход ни к чему не подключен, то возвращаемое значение будет зависеть от различных факторов, в том числе от уровней напряжения на соседних выводах и заканчивая расстоянием от рук до вывода. Функция analogWrite(). Описание: Пишет аналоговое значение (заполнение ШИМ) в порт. Может использоваться, например, для установки различной яркости свечения светодиодов, регулирования скорости двигателей. После вызова этой функции на выводе будет присутсвовать меандр с определенным коэффициентом заполнения импульсов до нового вызова этой или другой функции в применении к этому порту. Частота сигнала ШИМ состовляет примерно 490Гц. Синтаксис: analogWrite(pin, value). Параметры: pin - номер контакта микроконтроллера, на который нужно выдать аналоговый сигнал. Доступные контакты для аналогового ввода показаны на рис. 1.9 и 1.10.; value - коэффициент заполнения ШИМ-сигнала: между 0 (всегда низкий уровень) и 255 (всегда высокий уровень). Примечание: функция analogWrite не имеет никакого отношения к портам АЦП и функции analogRead. Перед использованием функции analogWrite() не нужно вызывать pinMode() для установки вывода как выходного. 4. Меры безопасности Во время выполнения лабораторной работы необходимо: соблюдать правила включения и выключения вычислительной техники; не подключать кабели, разъемы и другую аппаратуру к компьютеру, не относящиеся к лабораторной установке; при включенном напряжении сети не отключать, не подключать и не трогать кабели, соединяющие различные устройства компьютера; в случае обнаруженной неисправности в работе оборудования или нарушения правил техники безопасности сообщить руководителю лабораторной работы; не пытаться самостоятельно устранить неисправности в работе аппаратуры; по окончании работы привести в порядок рабочее место. ВНИМАНИЕ! При работе за компьютером необходимо помнить: к каждому рабочему месту подведено опасное для жизни напряжение. Поэтому во время работы надо быть предельно внимательным и соблюдать все требования техники безопасности! 5. Описание лабораторной установки Лабораторная установка состоит из: платы отладочного модуля MSP430 LaunchPad (MSP-EXP430G2), платы расширения с набором внешних устройств. Плата LaunchPad подключается к порту USB компьютера с помощью прилагаемого кабеля. Плата расширения подключается к разъему платы LaunchPad (выводы 11… 20). Питание +5В на плату расширения подается от другого свободного порта USB компьютера с помощью кабеля. Питание на плату расширения следует подавать после того, как она подключена к плате LaunchPad. Принципиальная электрическая схема платы расширения приведена на рис. 3.4. +15 В R6 10к VD1 R3 200 R4 R1 10к X1 11 P2.3 14 P1.6 15 P1.7 20 11 GND VT1 2к R2 3к R5 X2 1 +5В 4 0В R7 510 30к C1 200мкФ Рис. 3.4. Принципиальная электрическая схема платы расширения Разъем X1 подключается к плате LaunchPad. Разъем X2, распаянный на кабеле, подключается к свободному USB-порту компьютера. Инвертор на транзисторе VT1, выполненный по схеме с общим эмиттером, получает входной сигнал с вывода 11 микроконтроллера (линия порта P2.3). Светодиод VD1 в цепи коллектора транзистора служит для индикации состояния инвертора. Выходное напряжение инвертора, снимаемое с коллектора транзистора VT1, подается на вход фильтра низкой частоты – интегрирующей цепочки R4C1. Выходное напряжение фильтра, снимаемое с конденсатора C1, подается на вывод 15 микроконтроллера (линия порта P1.7, аналоговый вход A7). Напряжение с движка потенциометра R6 подается на вывод 14 микроконтроллера (линия порта P1.6, аналоговый вход A6). Резисторы R5 и R7 предназначены для защиты линий портов. На плате LaunchPad к линии порта P1.6 подключены зеленый светодиод и балластный резистор, они образуют вместе с резисторами R6, R7 делитель напряжения, из-за чего максимальное напряжение на линии P1.6 будет отличаться от напряжения питания 5В. Для устранения влияния цепи зеленого светодиода следует удалить его перемычку J5-1, рис. 1.9, оставив ее на одном контакте. 6. Описание используемых программных комплексов Для программирования отладочного модуля MSP430 LaunchPad (MSPEXP430G2) в лабораторной работе используется среда разработки Energia. Для поддержки операций с последовательным интерфейсом в составе среды Energia имеется специализированный модуль Serial Monitor. Вызов окна Serial Monitor производится либо из меню Tools/Serial Monitor, либо с помощью кнопки Serial Monitor на панели инструментов. 7. Задание 7.1. Подключить отладочный модуль MSP430 LaunchPad с установленным в DIP-гнездо микроконтроллером MSP430G2452 при помощи кабеля к разъему порта USB компьютера. Запустить среду разработки Energia. Произвести настройку связи среды разработки Energia с отладочным модулем LaunchPad. 7.2. Написать, отладить и протестировать программу управления яркостью свечения зеленого светодиода. Переключение яркости на следующий уровень должно происходить при нажатии кнопки. Количество уровней яркости – не менее четырех. Для каждой градации яркости с помощью вольтметра измерить напряжение на соответствующем выводе микроконтроллера. Результаты измерений свести в таблицу. 7.3. Подключить плату расширения к плате LaunchPad. Подключить плату расширения к свободному порту USB компьютера. 7.4. Написать, отладить и протестировать программу управления частотой мигания красного светодиода. Управление осуществить с помощью потенциометра R6 (рис. 3.4): положение движка потенциометра должно управлять частотой мигания. 7.5. Написать, отладить и протестировать программу чтения значения аналогового сигнала с движка потенциометра R6. Интервал времени между двумя последовательными чтениями: вариант 1 – 200 мс, вариант 2 – 300 мс, вариант 3 – 400 мс, вариант 4 – 500 мс. Считанное значение сигнала должно передаваться в последовательный порт в двух видах: в виде значения выходного кода АЦП, в виде значения напряжения, с двумя знаками в дробной части числа, единица измерения [В]. 7.6. Написать, отладить и протестировать программу измерения меняющегося во времени аналогового сигнала и передачи измеренных значений в последовательный порт. Измеряемый сигнал – выходной сигнал фильтра низкой частоты R4C1 (рис. 3.4). Период измерения сигнала – 50 мс. Входной сигнал для фильтра формировать последовательностью импульсов, подаваемых на вход инвертора на транзисторе VT1. Параметры импульсов: вариант 1 – период 5с, коэффициент заполнения 0.5, количество импульсов 5; вариант 2 – период 6с, коэффициент заполнения 0.3, количество импульсов 4; вариант 2 – период 7с, коэффициент заполнения 0.7, количество импульсов 3; вариант 2 – период 8с, коэффициент заполнения 0.4, количество импульсов 5. В последовательный порт передавать значения: время от момента старта программы, единица измерения – миллисекунда; напряжение на выходе фильтра, 2 знака в дробной части числа, единица измерения – В. После отработки заданного количества импульсов остановить последовательный порт. Скопировать таблицу значений из окна Serial Monitor, вставить скопированные данные в лист Microsoft Excel и средствами Microsoft Excel построить график изменения выходного напряжения фильтра во времени. 8. Методика выполнения задания 8.1. Настройку программной среды Energia производить в соответствии с указаниями раздела 5 Лабораторной работы № 1. 8.2. Изучить примеры Examples/Basics/Fade, Examples/Analog/Fading. Прошить примеры в микроконтроллер и проверить их работу. Для управления уровнем выходного сигнала использовать функцию analogWrite(). 8.3. Плата расширения подключается к разъему J2 платы LaunchPad. Вывод 20 (GND) разъема J2 должен совпасть с широкой общей шиной на плате расширения. 8.4. Изучить пример Examples/Analog/AnalogInput. Для чтения значения аналогового сигнала с движка потенциометра использовать функцию analogRead(), аналоговый вход A6. 8.5. Изучить примеры Examples/Basics/AnalogReadSerial, Examples/Basics/ReadAnalogVoltage. Использовать функции analogRead(), Serial.print(), Serial.println(). Использовать аналоговый вход A6 микроконтроллера. Для вычисления значения напряжения измерить вольтметром напряжение питания платы расширения. Снятия показаний АЦП произвести: при удаленной перемычке J5 зеленого светодиода LED2; при установленной перемычке. 8.6. Использовать цифровой выход 11 и аналоговый вход A7 микроконтроллера. Длительность импульса и паузы рассчитать по варианту задания. Для управления длительностью импульса и паузы использовать функцию millis(). Для выдачи импульсного сигнала в плату расширения, чтения аналогового сигнала и передачи данных в последовательный порт использовать функции digitalWrite(), analogRead(), Serial.print(), Serial.println(). 9. Требования к содержанию и оформлению отчета Отчет по лабораторной работе должен содержать: краткие теоретические сведения; формулировку задания на лабораторную работу; описание последовательности выполнения работы; изображения рабочих окон с текстами программ; тексты программ, не помещающихся в рабочем окне; выводы по лабораторной работе. 10. Контрольные вопросы 10.1. Какие модули микроконтроллеров MSP430 используются для ввода и вывода аналоговых сигналов? 10.2. Каково назначение и режимы работы модуля операционного усилителя в микроконтроллерах MSP430? 10.3. Каково назначение модуля аналогового компаратора в микроконтроллерах MSP430? 10.4. Каково назначение и режимы работы модулей аналого-цифровых преобразователей в микроконтроллерах MSP430? 10.5. Каково назначение и режимы работы модулей цифро-аналоговых преобразователей в микроконтроллерах MSP430? 10.6. Как осуществляется программирование операций аналогового ввода-вывода для микроконтроллеров MSP430? 11. Критерии оценки выполнения лабораторной работы Лабораторная работа считается выполненной в том случае, если: студент выполнил все задания в соответствии с представленной методикой; результаты выполнения работы, представленные в виде отчета, соответствуют предъявленным к ним требованиям; студент правильно ответил на все контрольные вопросы и может интерпретировать полученные результаты.