Операционные усилители и преобразователь уровня в серии микроконтроллеров AVR-DB

2 апреля

учёт ресурсовавтоматизацияуниверсальное применениеMicrochipстатьяинтегральные микросхемыМикроконтроллерыOpAmpMVIO

Александр Русу (г. Одесса)

Новая линейка микроконтроллеров AVR-DB производства Microchip с расширенным набором периферии для обработки аналоговых сигналов позволяет строить на базе МК одно- и многокаскадные усилители, обеспечивать питание узлов с другими уровнями логических сигналов при согласовании интерфейсов и даже использовать МК в качестве микрофонного усилителя.

Микроконтроллеры AVR благодаря высокой производительности, малому энергопотреблению и многофункциональности входят в число самых распространенных микроконтроллеров, используемых в широком спектре приложений. Не так давно компания Microchip Technology выпустила новую линейку AVR-DB с расширенным набором периферийных модулей, ориентированных на обработку аналоговых сигналов в реальном времени.

Основой микроконтроллеров AVR-DB является хорошо зарекомендовавшее себя ядро AVR, способное работать с тактовой частотой до 24 МГц во всем диапазоне питающих напряжений от 1,8 до 5,5 В. Размер флэш-памяти для хранения программы в новых микроконтроллерах зависит от конкретной модели и равен 32, 64 или 128 кбайт (рисунок 1).

Рис. 1. Семейство микроконтроллеров AVR-DB

Рис. 1. Семейство микроконтроллеров AVR-DB

Микроконтроллеры AVR-DB выпускаются в нескольких типах корпусов с количеством выводов от 28 до 64 и могут работать в диапазоне температур -40…85°С (микросхемы для промышленного применения) или -40…125°С (приборы с расширенным температурным диапазоном). Микросхемы с большим количеством выводов обычно имеют и большее количество периферийных модулей: например, микроконтроллеры в 28-выводных корпусах имеют три приемопередатчика USART, в то время как в 64-выводных модификациях их количество может достигать шести при тех же размерах Flash-памяти.

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

Продолжая тенденцию, начатую в предыдущих линейках, семейство AVR-DB содержит богатый набор периферийных модулей, на основе которых можно реализовывать широкий спектр самых разнообразных функций. Для работы с аналоговыми сигналами могут использоваться операционные усилители (OPAMP), 12-разрядный дифференциальный АЦП (ADC), 10-разрядный ЦАП (DAC), детекторы перехода через ноль (Zero-Cross Detect, ZCD) и аналоговые компараторы (AC). Кроме этого, микроконтроллеры AVR-DB содержат традиционные для микросхем подобного класса таймеры-счетчики, в том числе и с поддержкой генерации ШИМ-сигналов, часы реального времени (RTC), сторожевые таймеры (WDT), приемопередатчики наиболее популярных интерфейсов для обмена данными (USART, I2C, SPI), а также аппаратный блок для расчета контрольной суммы (CRC). Благодаря модулю конфигурируемой пользовательской логики (Configurable Custom Logic, CCL) можно реализовать несложные цифровые устройства, работающие независимо от ядра микроконтроллера, что позволяет снизить число внешних дискретных компонентов и разгрузить ядро.

Одной из особенностей микроконтроллеров AVR является система обработки событий (Event System, EVSYS), позволяющая соединять между собой периферийные модули на аппаратном уровне. При использовании EVSYS событие, сгенерированное одним периферийным модулем, например, компаратором, может стать непосредственной причиной запуска другого модуля, например, таймера. Это позволяет реализовывать сложные алгоритмы управления без использования процессорного времени, в том числе, и без использования прерываний.

Немаловажной особенностью новой линейки является наличие в каждом микроконтроллере специализированного порта ввода-вывода, способного работать с сигналами, уровень которых отличается от основного напряжения питания (Multi-Voltage Input-Output, MVIO). Наличие подобного модуля позволяет подключать к микроконтроллеру микросхемы с иным напряжением питания и, соответственно, иными уровнями логических сигналов без использования дополнительных преобразователей, что позволяет упростить схему и уменьшить общее количество компонентов (рисунок 2).

Рис. 2. Пример использования порта MVIO

Рис. 2. Пример использования порта MVIO

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

Однако широкое распространение данных микроконтроллеров было бы невозможным без всесторонней технической поддержки, в которую входит также предоставление готовых вариантов практического применения предлагаемой продукции. В этой статье рассмотрены примеры использования ключевых периферийных узлов линейки AVR-DB – модуля OPAMP и порта ввода-вывода MVIO – разработанные инженерами Microchip Technology в рамках поддержки новой линейки.

Особенности порта MVIO

По своему устройству и функциональному назначению каналы порта MVIO, связанного с портом С (PORTC), ничем не отличаются от каналов обычных портов (рисунок 3). Каждый канал MVIO имеет возможность подключения подтягивающего резистора, инверсии выходного сигнала и генерации прерываний при изменении напряжения на выводе микросхемы. Кроме того, к выводам, связанным с MVIO, могут подключаться различные периферийные модули, как аналоговые, так и цифровые.

Рис. 3. Структурная схема канала портов ввода-вывода микроконтроллеров AVR-DB

Рис. 3. Структурная схема канала портов ввода-вывода микроконтроллеров AVR-DB

Основное отличие порта MVIO заключается в наличии отдельной линии питания VDDIO2, напряжение на которой может отличаться от основного напряжения VDD как в большую, так и меньшую сторону (рисунок 4). Напряжение VDDIO2 может находиться в диапазоне 1,62…5,5 В, что шире чем рабочий диапазон основного напряжения питания VDD (1,8…5,5 В). Это позволяет подключать к микроконтроллерам AVR-DB большинство известных микросхем с цифровым управлением без использования дополнительных преобразователей уровня, причем при любом сочетании основного напряжения питания (VDD) и напряжения питания внешнего устройства (VDDIO2), например, 5/3,3 В или 3,3/5 В.

Рис. 4. Структурная схема питания каналов обычного порта (внизу) и порта MVIO (вверху)

Рис. 4. Структурная схема питания каналов обычного порта (внизу) и порта MVIO (вверху)

Порт MVIO поддерживает любые комбинации напряжений VDD и VDDIO2, в том числе:

  • возможность появления напряжения VDD раньше VDDIO2;
  • возможность появления напряжения VDD позже VDDIO2;
  • возможность пропадания напряжения VDD при наличии VDDIO2;
  • возможность пропадания напряжения VDDIO2 при наличии VDD.

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

Наличие напряжения VDDIO2 можно отслеживать программно путем контроля бита VDDIO2S в регистре MVIO.STATUS. Если напряжение VDDIO2 меньше минимально допустимого значения, этот бит будет сброшен, что означает отключение всех каналов порта MVIO. Если же напряжение VDDIO2 превышает пороговое значение, то бит VDDIO2S будет установлен в единицу. При необходимости максимально оперативного отслеживания изменений напряжения VDDIO2 можно разрешить прерывание при изменении бита VDDIO2S. Для этого необходимо установить в единицу бит VDDIO2IE в регистре MVIO.INTCTRL. Флаг данного прерывания VDDIO2IF располагается в регистре MVIO.INTFLAGS и устанавливается в единицу при каждом изменении бита VDDIO2S.

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

Режим работы порта MVIO определяется битами MVSYSCFG в конфигурационном регистре FUSE.SYSCFG1. По умолчанию эта пара битов устанавливается в значение 0х2, при котором питание MVIO осуществляется напряжением VDD от основной питающей шины. Для питания MVIO от отдельного источника питания необходимо установить эти биты в значение 0х1.

Особенности модуля операционных усилителей (OPAMP)

Модуль OPAMP в зависимости от модели микроконтроллера может содержать от одного до трех операционных усилителей (ОУ), на основе которых можно создать либо три однокаскадных, либо один двух- или трехкаскадный усилитель (при создании двухкаскадного усилителя оставшийся свободный ОУ может использоваться отдельно). Каждый усилитель имеет возможность непосредственного подключения к выводам микроконтроллера и может использоваться как обычный ОУ, что позволяет, как минимум, отказаться от использования дополнительных микросхем. Однако наибольший эффект будет наблюдаться в случае использования ОУ совместно с интегрированными узлами: программируемым резистивным делителем напряжения и внутренним источником опорного напряжения.

Неинвертирующий вход каждого ОУ модуля OPAMP с помощью мультиплексора MUXPOS может подключаться непосредственно к выводу микросхемы (вывод OPnINP, где n = 0…2 – номер ОУ), ЦАП, источнику опорного напряжения, равного половине напряжения питания (VDD/2), общему проводу (GND) или к программируемому резистивному делителю (Resistor Ladder) (рисунок 5). Также на него могут подаваться другие аналоговые сигналы, например, выходной сигнал ОУ предыдущего каскада. Инвертирующий вход с помощью мультиплексора MUXNEG может быть соединен с выводом микросхемы (вывод OPnINN) или с выходом ОУ, причем к выходу ОУ он может подключаться как напрямую, так и через программируемый резистивный делитель. Кроме этого, на инвертирующий вывод может подаваться напряжение с выхода ЦАП. Настройка мультиплексоров входов ОУ производится в регистре OPAMP.OPnINMUX, в котором три бита MUXPOS отвечают за точку подключения неинвертирующего (таблица 1), а три бита MUXNEG – за точку подключения инвертирующего входов (таблица 2).

Таблица 1. Список точек подключения неинвертирующего входа ОУ

Значение битов MUXPOS Условное обозначение Точка подключения
0х0 INP Вывод микросхемы OPnINP
0х1 WIP Выход мультиплексора MUXWIP (выход резистивного делителя)
0х2 DAC Выход ЦАП
0х3 GND Общий провод
0х4 VDDDIV2 Источник напряжения, равного половине напряжения питания (VDD/2)
0х5 LINKOUT Выход ОУ предыдущего каскада (доступно для ОУ1 и ОУ2)
0х6 LINKWIP Выход резистивного делителя ОУ0 (доступно только для ОУ2)

Таблица 2. Список точек подключения инвертирующего входа ОУ

Значение битов MUXNEG Условное обозначение Точка подключения
0х0 INN Вывод микросхемы OPnINN
0х1 WIP Выход мультиплексора MUXWIP (выход резистивного делителя)
0х2 OUT Выход ОУ (для схемы повторителя напряжения)
0х3 DAC Выход ЦАП

Рис. 5 Структурная схема ОУ модуля OPAMP

Рис. 5 Структурная схема ОУ модуля OPAMP

Выход ОУ может подключаться непосредственно к выходу микросхемы (вывод OPnOUT), а также, в зависимости от номера ОУ, подключаться к входам других ОУ. Кроме этого, выходное напряжение ОУ может использоваться в качестве входных сигналов для компараторов и АЦП. Внутри модуля OPAMP выход ОУ аппаратно соединен с мультиплексорами MUXNEG и MUXTOP, с помощью которых его можно подключить, соответственно, к инвертирующему входу и резистивному делителю напряжения. Подключение выхода ОУ к выводу микросхемы производится путем установки пары битов OUTMODE в регистре OPAMP.OPnCTRLA в значение 0x1 (NORMAL).

Каждый из концевых терминалов резистивного делителя напряжения, содержащего 16 последовательно соединенных резисторов с одинаковым сопротивлением, соединен со своим мультиплексором: верхний (по схеме) – с MUXTOP, нижний – с MUXBOT. Точки соединения резисторов подключены к мультиплексору MUXWIP. Настройка резистивного делителя производится в регистре OPAMP.OPnRESMUX путем установки соответствующих наборов бит: MUXTOP (таблица 3), MUXBOT (таблица 4) и MUXWIP (таблица 5).

Таблица 3. Список точек подключения верхнего терминала резистивного делителя

Значение битов MUXTOP Условное обозначение Точка подключения
0х0 OFF Не подключен
0х1 OUT Выход ОУ
0х2 VDD Шина питания с напряжением VDD

Таблица 4. Список точек подключения нижнего терминала резистивного делителя

Значение битов MUXBOT Условное обозначение Точка подключения
0х0 OFF Не подключен
0х1 INP Неинвертирующий вход ОУ
0х2 INN Инвертирующий вход ОУ
0х3 DAC Выход ЦАП
0х4 LINKOUT Выход ОУ предыдущего каскада (для ОУ0 – выход ОУ2)
0х5 GND Общий провод

Таблица 5. Список точек подключения выхода резистивного делителя

Значение битов MUXWIP Условное обозначение Сопротивления резисторов
(R1 – нижнее плечо, R2 – верхнее плечо)
Коэффициент передачи по напряжению
R1/(R1 + R2)
0х0 WIP0 R1 = 15R, R2 = 1R 0,9375 (15:16)
0х1 WIP1 R1 = 14R, R2 = 2R 0,8750 (7:8)
0х2 WIP2 R1 = 12R, R2 = 4R 0,7500 (3:4)
0х3 WIP3 R1 = 8R, R2 = 8R 0,5000 (1:2)
0х4 WIP4 R1 = 6R, R2 = 10R 0,3750 (3:8)
0х5 WIP5 R1 = 4R, R2 = 12R 0,2500 (1:4)
0х6 WIP6 R1 = 2R, R2 = 14R 0,1250 (1:8)
0х7 WIP7 R1 = 1R, R2 = 15R 0,0625 (1:16)

Столь гибкая конфигурация позволяет реализовать большинство наиболее популярных схем однокаскадных (рисунок 6) и многокаскадных (рисунок 7) усилителей на основе ОУ:

  • ОУ общего назначения с конфигурацией, определяемой внешними компонентами (Standalone General Purpose Operational Amplifier);
  • повторитель с единичным коэффициентом усиления (Unity-Gain Buffer);
  • неинвертирующий или инвертирующий однокаскадный усилитель с программируемым коэффициентом усиления (Non-inverting/Inverting Programmable Gain Amplifier);
  • интегратор (Integrator);
  • многокаскадный усилитель с программируемым коэффициентом усиления (Cascaded Programmable Gain Amplifier);
  • инструментальный усилитель (Instrumentation Amplifier).

Напряжение на любом входе ОУ может находиться в пределах -0,3…VDD + 0,3 В (rail-to-rail), однако в приложениях, не требующих обработки сигналов со столь широким размахом, оно может быть уменьшено до 0,3…VDD – 0,7 В, что позволит уменьшить общее энергопотребление модуля. Выбор рабочего диапазона напряжения осуществляется путем установки бита IRSEL в регистре ORAMP.PWRCTRL. После сброса микроконтроллера этот бит устанавливается в ноль, что соответствует расширенному диапазону входных сигналов. Для уменьшения динамического диапазона этот бит необходимо установить в единицу.

Рис. 6. Схемы однокаскадных усилителей на основе модуля OPAMP

Рис. 6. Схемы однокаскадных усилителей на основе модуля OPAMP

Рис. 7. Схемы многокаскадных усилителей на основе модуля OPAMP

Рис. 7. Схемы многокаскадных усилителей на основе модуля OPAMP

Для уменьшения энергопотребления и уровня шумов рекомендуется также отключать входные буферы портов ввода-вывода, подключенных к тем же выводам микросхемы, что и входы или выходы ОУ. Это можно сделать, установив биты ISC в регистрах PORTx.PINnCTRL в значение 0х5 (INPUT_DISABLE), где х – номер порта, n – номер вывода.

Одной из особенностей модуля OPAMP является наличие бита готовности ОУ (SETTLED), расположенного в регистрах OPAMP.OPnSTATUS (где n = 0…2 – номер ОУ). Аппаратная установка этого бита в единицу свидетельствует о том, что в ОУ закончились все переходные процессы, возникающие при включении питания (warmup) или при изменении конфигурации ОУ (settling).

В модуле OPAMP нет возможности включения отдельного ОУ, питание на все ОУ подается и отключается одновременно при, соответственно, установке или сбросе бита ENABLE в регистре OPAMP.CTRLA. Длительность переходных процессов в аналоговой части не зависит от конкретной конфигурации ОУ и, согласно документации, не превышает 1 мкс. Поэтому время задержки готовности модуля OPAMP при включении питания устанавливается в одном, общем для всех трех ОУ, регистре OPAMP.TIMEBASE. Значение этого регистра должно быть равно количеству импульсов тактовой частоты, которые будут сгенерированы за 1 мкс. Поскольку количество тактов может быть только целым, то полученное значение необходимо округлить.

В отличие от детерминированных процессов при включении питания, длительность установки выходного напряжения при изменении конфигурации ОУ зависит от многих факторов, в том числе – от схемы включения ОУ и характера его нагрузки. Поэтому промежуток времени между изменением конфигурации и установкой битов SETTLED в регистрах OPAMP.OPnSTATUS может на практике варьироваться пользователем в широких пределах. Если длительность переходных процессов неизвестна, тогда рекомендуется установить регистр OPAMP.OPnSETTLE, в котором хранится количество микросекунд, по истечении которых флаг SETTLED будет снова установлен в максимальное значение (0х7F), чему соответствует интервал, равный приблизительно 127 мкс.

Каждый ОУ модуля OPAMP может работать непрерывно или управляться событиями OPAMP.ENABLEn и OPAMP.DISABLEn от системы EVSYS. Для установки ОУ в режим непрерывной работы необходимо установить бит ALWAYSON в регистре OPAMP.OPnCTRLA. Если планируется, что ОУ должен работать, когда микроконтроллер находится в спящем режиме, необходимо в том же регистре дополнительно установить бит RUNSTDBY, не позволяющий отключить ОУ при переходе в спящий режим.

Использование OPAMP для питания MVIO с фиксированным напряжением

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

Однако при использовании микроконтроллеров AVR-DB эту задачу можно решить без использования дополнительных электронных компонентов. Для этого достаточно подключить вывод VDDIO2 к выходу одного из ОУ модуля OPAMP. Выходной ток ОУ может достигать 30 мА, что вполне достаточно для большинства приложений.

Необходимое значение выходного напряжения ОУ можно установить разными способами, самый простой из которых реализуется с помощью интегрированного резистивного делителя (рисунок 8). В этом случае верхняя (по схеме) точка резистивного делителя подключается к внутренней питающей шине, а вторая – к общему проводу. Напряжение с выхода делителя подается на неинвертирующий вход ОУ, включенного по схеме повторителя, выход которого, в свою очередь, физически соединяется с выводом питания порта MVIO.

Рис. 8. Схема подключения операционного усилителя к порту MVIO

Рис. 8. Схема подключения операционного усилителя к порту MVIO

В этом случае порядок настройки микроконтроллера состоит из следующих этапов. Вначале необходимо разрешить порту MVIO использовать отдельный источник питания. Для этого следует установить биты MVSYSCFG в конфигурационном регистре FUSE.SYSCFG1 в значение 0х01. При этом необходимо не забыть физически соединить вывод микросхемы, связанный с выходом используемого ОУ (OPnOUT), с выводом VDDIO2.

Питание на порт MVIO в подобных приложениях обычно поступает постоянно, поэтому ОУ необходимо настроить на работу в непрерывном режиме путем установки бита ALWAYSON в регистре OPAMP.OPnCTRLA. Если планируется, что обмен данными может происходить, когда микроконтроллер находится в спящем режиме, тогда необходимо дополнительно установить бит RUNSTDBY, расположенный в том же регистре. Кроме того, в регистре OPAMP.OPnCTRLA необходимо указать, что выход ОУ должен быть подключен к выводу микросхемы, для чего необходимо установить биты OUTMODE в значение 0x1 (NORMAL).

Поскольку выход ОУ физически соединяется с выводом микросхемы, то для уменьшения общего энергопотребления и снижения уровня выходных шумов необходимо отключить входной буфер порта ввода-вывода, связанного с выводом OPnOUT. Для этого необходимо установить биты ISC в регистрах PORTx.PINnCTRL в значение 0х5 (INPUT_DISABLE).

Перед началом использования ОУ следует настроить его временные параметры. В первую очередь, зная частоту работы ядра, необходимо определить количество тактов, которое будет сгенерировано на 1 мкс, и записать это значение в регистр OPAMP.TIMEBASE. Поскольку длительность переходных процессов при изменении конфигурации ОУ обычно неизвестна, то в регистр OPAMP.OPnSETTLE записывается максимально возможное значение OPAMP_MAX_SETTLE_TIME, равное 0x7F (127 мкс).

Для конфигурирования ОУ в режим повторителя с единичным коэффициентом усиления необходимо соединить его инвертирующий вход с выходом, что производится путем установки битов MUXNEG в регистре OPAMP.OPnINMUX в значение 0х2. Для подключения неинвертирующего входа к выходу резистивного делителя необходимо установить биты MUXPOS в значение 0х1 в том же регистре.

Настройка резистивного делителя сводится к подключению его верхнего (по схеме) концевого терминала к шине питания, а нижнего – к общему проводу. Для этого необходимо присвоить битам MUXTOP и MUXBOT регистра OPAMP.OPnRESMUX значения, соответственно, 0х2 и 0х5. При такой конфигурации выходное напряжение ОУ будет определяться коэффициентом передачи резистивного делителя (определяемого значением битов MUXWIP регистра  OPAMP.OPnRESMUX), который можно определить из таблицы 5. В приведенном примере предполагается, что микроконтроллер питается от напряжения VDD = 5 В, а порт MVIO питается меньшим напряжением. В этом случае существует всего три наиболее подходящие значения коэффициента передачи резистивного делителя напряжения (таблица 6), которые можно использовать в приведенном примере.

Таблица 6. Выходное напряжение ОУ при VDD = 5 В

Значение битов MUXWIP Условное обозначение Коэффициент передачи по напряжению R1/(R1 + R2) Напряжение на выходе ОУ, В
0х2 WIP2 0,7500 (3:4) 3,75
0х3 WIP3 0,5000 (1:2) 2,5
0х4 WIP4 0,3750 (3:8) 1,88

Один из вариантов исходного кода инициализации ОУ по данному алгоритму приведен в листинге 1. В данном примере показан пример настройки нулевого ОУ (n = 0) в модуле OPAMP, выход которого подключен к каналу 2 порта PORTD. Напряжение на выходе ОУ при этом устанавливается равным 1,88 В.

Листинг 1. Пример исходного кода инициализации ОУ



#define OPAMP_MAX_SETTLE_TIME 0x7F

void op_amp_init()

{

/* Отключение входного буфера порта */

PORTD.PIN2CTRL = PORT_ISC_INPUT_DISABLE_gc;

/* Включение модуля OPAMP */

OPAMP.CTRLA = OPAMP_ENABLE_bm;

/* Установка длительности задержки при включении питания (1 мкс) */

OPAMP.TIMEBASE = (uint8_t)ceil(CLK_PER*0.000001) - 1;

/* Установка длительности задержки при изменении конфигурации

(в максимальное значение) */

OPAMP.OP0SETTLE = OPAMP_MAX_SETTLE_TIME;

/* Настройка ОУ, подключение выхода к выводу микросхемы */

OPAMP.OP0CTRLA = OPAMP_RUNSTBY_bm | OPAMP_ALWAYSON_bm

      | OPAMP_OP0CTRLA_OUTMODE_NORMAL_gc;

/* Настройка мультиплексоров входов  */

OPAMP.OP0INMUX = OPAMP_OP0INMUX_MUXNEG_OUT_gc

      | OPAMP_OP0INMUX_MUXPOS_WIP_gc;

/* Настройка резистивного делителя */

OPAMP.OP0RESMUX = OPAMP_OP0RESMUX_MUXTOP_VDD_gc

      | OPAMP_OP0RESMUX_MUXBOT_GND_gc | OPAMP_OP0RESMUX_MUXWIP_WIP4_gc;

}

При необходимости данный код можно сгенерировать с помощью графической утилиты MPLAB X Code Configurator, являющейся частью интегрированной среды разработки MPLAB X IDE. В общем случае, настроить ОУ, как и любой другой модуль, можно на вкладке Register, на которой можно установить значения всех регистров, входящих в состав модуля OPAMP (рисунок 9), однако более удобным, особенно для начинающих программистов, является вкладка Easy Setup, на которой данные регистры логически сгруппированы в интуитивно понятном виде.

Рис. 9 Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Register)

Рис. 9 Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Register)

Количество вкладок на данной панели зависит от количества используемых ОУ. Максимально может быть четыре вкладки: общие настройки модуля (OPAMP SYSTEM) и настройки каждого из трех ОУ (OP0…OP2). Если какой-либо из операционных усилителей не используется, соответствующая вкладка будет недоступна.

Рис. 10. Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Easy Setup.OPAMP SYSTEM)

Рис. 10. Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Easy Setup.OPAMP SYSTEM)

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

В секции Global Settings находятся общие настройки модуля OPAMP: будет ли модуль использоваться в системе (Enable OPAMP System), будет ли он работать в режиме отладки, когда микроконтроллер окажется в зависшем состоянии (Run in Debug Mode), допустимый диапазон входного напряжения (Input Range) и длительность задержки готовности при включении питания (Time Base). При этом длительность задержки устанавливается автоматически в зависимости от тактовой частоты.

В секции Hardware Settings в раскрывающемся списке Select Mode можно выбрать режим использования ОУ: однокаскадный (Single OPAMPs – когда каждый ОУ независим), двухкаскадный и трехкаскадный. Ниже списка Select Mode расположены три флаговых кнопки (Enable OP0/OP1/OP3), установка которых приведет к активизации соответствующего ОУ. Если ОУ активен, тогда появится дополнительная вкладка с его индивидуальными настройками, а ниже его флаговой кнопки – раскрывающийся список, в котором можно выбрать режим работы ОУ. В рассматриваемом примере используется только один ОУ (OP0), работающий в режиме повторителя (Voltage Follower).

Индивидуальные настройки каждого ОУ доступны на соответствующих вкладках (OP0…OP2) (рисунок 11). В секции Configuration показана схема включения ОУ. При многокаскадном режиме в этой секции показывается схема включения всех ОУ с выделением активного узла, настройки которого доступны на данной вкладке.

Рис. 11. Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Easy Setup.OP0)

Рис. 11. Настройка OPAMP с помощью MPLAB X Code Configurator (вкладка Easy Setup.OP0)

В раскрывающихся списках Positive Input MUX, Negative Input MUX, Top Resistor MUX, Bottom Resistor MUX и Resistor Ladder Wiper MUX можно сконфигурировать подключение, соответственно, неинвертирующего и инвертирующего входа ОУ, верхнего и нижнего выводов резистивного делителя, а также его коэффициент передачи. Результирующий коэффициент передачи отображается в строке Gain. Обратите внимание, что на данной вкладке невозможно установить ошибочную конфигурацию ОУ, поскольку данные настройки являются взаимозависимыми, и невозможные значения просто становятся недоступными.

В последней секции OPn Advanced Hardware Settings можно установить дополнительные настройки конкретного ОУ. Установка отметка на флаговой кнопке Run In Standby Mode позволит ОУ продолжать функционировать в спящем режиме. В раскрывающемся списке Output Mode можно выбрать, будет ли выход ОУ подключен к выводу микросхемы. А в секции Settle Time можно установить длительность задержки установки флага готовности при изменении конфигурации ОУ, которая по умолчанию устанавливается в максимальное значение (127 мкс).

Использование OPAMP для питания MVIO с произвольным напряжением

Основным недостатком рассмотренного выше примера является возможность установки выходного напряжения лишь с дискретностью, определенной коэффициентом передачи интегрированного делителя (таблица 5). Если же необходимо получить на выходе ОУ другое напряжение, тогда можно использовать внешний делитель напряжения (рисунок 12). Настройка микроконтроллера в этом случае аналогична, за исключением того, что битам MUXPOS в регистре OPAMP.OPnINMUX необходимо присвоить значение 0х0, тем самым подключив неинвертирующий вход ОУ к выводу микросхемы (при этом рекомендуется также отключить входной буфер порта ввода-вывода, связанного с входом OPnINP). Внутренний делитель напряжения ОУ при этом рекомендуется отключить, присвоив битам MUXTOP и MUXBOT регистра OPAMP.OPnRESMUX значение 0х0.

Рис. 12. Установка выходного напряжения ОУ с помощью внешнего делителя

Рис. 12. Установка выходного напряжения ОУ с помощью внешнего делителя

Однако увеличение числа внешних компонентов не всегда является хорошим решением, особенно в случаях, когда возможность внешнего аналогового управления уровнем питания порта MVIO не является обязательной. В этом случае требуемое выходное напряжение можно сформировать с помощь интегрированного ЦАП, выход которого также можно подключить к неинвертирующему входу ОУ (рисунок 13). При таком подходе настройка микроконтроллера производится аналогично, за исключением того, что битам MUXPOS в регистре OPAMP.OPnINMUX присваивается значение 0х2.

Рис. 13. Установка выходного напряжения ОУ с помощью ЦАП

Рис. 13. Установка выходного напряжения ОУ с помощью ЦАП

Источник постоянного тока на основе OPAMP

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

Рис. 14. Стабилизатор тока на основе ОУ модуля OPAMP

Рис. 14. Стабилизатор тока на основе ОУ модуля OPAMP

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

$$I=\frac{V_{INP}}{R_{3}}.$$

Величина опорного напряжения VINP, в свою очередь, зависит от основного напряжения питания микроконтроллера VDD и коэффициента передачи резистивного делителя напряжения, подключенного к неинвертирующему входу (таблица 5):

$$V_{INP}=VDD\cdot \frac{R_{1}}{R_{1}+R_{2}}.$$

Величина VINP в общем случае может быть произвольной, однако следует помнить, что при большем значении VINP требуется и большее значение сопротивления R3, что приведет к увеличению величины рассеиваемой мощности на этом резисторе, и, как следствие, к уменьшению КПД стабилизатора. В то же время при фиксированном значении сопротивления R3 изменение величины VINP приведет к изменению величины стабилизируемого тока, что может быть полезным, например, в схемах регулировки яркости светодиодной подсветки. Пример расчета величины выходного тока при напряжении питания VDD = 3,3 В и сопротивлении R3 = 205 Ом приведен в таблице 7, из которой видно, что изменением коэффициента передачи резистивного делителя напряжения можно регулировать выходной ток в диапазоне от 1 мА до 15 мА.

Таблица 7. Величина стабилизируемого тока при VDD = 3,3 В и R3 = 205 Ом

Значение битов MUXWIP Условное обозначение Коэффициент передачи делителя напряжения
R1/(R1 + R2)
Опорное напряжение VINP, В Выходной ток I, мА
0х0 WIP0 0,9375 (15:16) 3,09 15
0х1 WIP1 0,8750 (7:8) 2,89 14
0х2 WIP2 0,7500 (3:4) 2,48 12
0х3 WIP3 0,5000 (1:2) 1,65 8
0х4 WIP4 0,3750 (3:8) 1,24 6
0х5 WIP5 0,2500 (1:4) 0,83 4
0х6 WIP6 0,1250 (1:8) 0,41 2
0х7 WIP7 0,0625 (1:16) 0,21 1

Если же восьми дискретных уровней выходного тока недостаточно для конкретного приложения, тогда напряжение VINP можно подключить к выходу ЦАП (рисунок 15), что при фиксированном сопротивлении нагрузки позволит сформировать 1024 уровня выходного тока, то есть практически плавную регулировку.

Рис. 15. Формирование опорного напряжения VINP с помощью ЦАП

Рис. 15. Формирование опорного напряжения VINP с помощью ЦАП

Один из вариантов исходного кода модуля инициализации ОУ0 модуля OPAMP в качестве стабилизатора тока (рисунок 14) приведен в листинге 2. Основные этапы инициализации модуля OPAMP в этом примере мало чем отличаются от рассмотренных выше алгоритмов инициализации, за исключением точек подключения входов. Для реализации схемы, формирующей опорное напряжение с помощью ЦАП (рисунок 15), следует изменить настройку входного мультиплексора MUXPOS, записав в соответствующие биты регистра OPAMP.OP0INMUX значение 0х2. Настройку резистивного делителя напряжения в этом случае проводить необязательно, следует оставить его верхний и нижний терминалы неподключенными.

Листинг 2. Исходный код инициализации OPAMP в режиме стабилизатора тока



void op_amp_init()

{

// Установка длительности задержки при включении питания (1 мкс)

OPAMP.TIMEBASE = (uint8_t)ceil(CLK_PER * 0.000001) - 1;

// Подключение входов ОУ

OPAMP.OP0INMUX = OPAMP_OP0INMUX_MUXPOS_WIP_gc

      | OPAMP_OP0INMUX_MUXNEG_INN_gc;

// Настройка резистивного делителя

OPAMP.OP0RESMUX = OPAMP_OP0RESMUX_MUXBOT_GND_gc

      | OPAMP_OP0RESMUX_MUXWIP_WIP7_gc | OPAMP_OP0RESMUX_MUXTOP_VDD_gc;

// Подключение ОУ к выводу микросхемы, активизация непрерывной работы

OPAMP.OP0CTRLA = OPAMP_OP0CTRLA_OUTMODE_NORMAL_gc | OPAMP_ALWAYSON_bm;

// Включение модуля OPAMP

OPAMP.CTRLA = OPAMP_ENABLE_bm;

}

Использование модуля OPAMP в качестве микрофонного усилителя

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

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

Рис. 16. Традиционная схема усилителя конденсаторного микрофона

Рис. 16. Традиционная схема усилителя конденсаторного микрофона

Микроконтроллеры AVR-DB позволяют решить эту задачу намного эффективнее. При использовании модуля OPAMP для создания микрофонного усилителя необходимо всего два внешних компонента (рисунок 17): резистор R5, обеспечивающий подачу питания на предусилитель микрофона, и конденсатор С1, разделяющий цепи микрофона и входного ОУ по постоянному току. Все остальные элементы, необходимые для работы ОУ, уже интегрированы в модуле OPAMP.

Рис. 17. Традиционная схема усилителя конденсаторного микрофона на основе ОУ модуля OPAMP

Рис. 17. Традиционная схема усилителя конденсаторного микрофона на основе ОУ модуля OPAMP

В данном примере показан двухкаскадный усилитель на основе ОУ модуля OPAMP. Неинвертирующие входы обоих каскадов подключены к внутреннему источнику опорного напряжения, равного половине напряжения питания VDD/2, обеспечивающего необходимое смещение уровня сигнала. Коэффициент усиления первого каскада зависит от соотношения сопротивлений резисторов R2/R1 и в данной схеме равен 15. Коэффициент усиления второго каскада, в свою очередь, определяется соотношением резисторов R4/R3 и равен 7. Общий коэффициент усиления схемы при этом определяется произведением коэффициентов усиления первого и второго каскадов и равен 105.

В отличие от традиционной схемы, любое из соотношений резисторов – R2/R1 или R4/R3 – может быть в любой момент изменено программным способом путем записи необходимых значений в регистры OPAMP.OPnRESMUX соответствующего ОУ. Это означает, что коэффициент усиления данного усилителя можно менять программным способом, причем в достаточно широких пределах, что может быть полезно, например, в приложениях для помещений с переменным уровнем шумов.

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

Исходный код инициализации модуля OPAMP для работы в этом режиме приведен в листинге 3. Как видно из данного примера, настройка модуля отличается лишь установкой необходимого состояния мультиплексоров выбранных ОУ.

Листинг 3. Исходный код инициализации OPAMP в качестве микрофонного усилителя



void op_amp_init()

{

// Установка длительности задержки при включении питания (1 мкс)

OPAMP.TIMEBASE = (uint8_t)ceil(CLK_PER * 0.000001) - 1;

// Настройка ОУ0 в режим инвертирующего усилителя с коэф. усиления -15

OPAMP.OP0INMUX = OPAMP_OP0INMUX_MUXPOS_VDDDIV2_gc

      | OPAMP_OP0INMUX_MUXNEG_WIP_gc;

OPAMP.OP0RESMUX = OPAMP_OP0RESMUX_MUXBOT_INN_gc

      | OPAMP_OP0RESMUX_MUXWIP_WIP7_gc | OPAMP_OP0RESMUX_MUXTOP_OUT_gc;

OPAMP.OP0CTRLA = OPAMP_OP0CTRLA_OUTMODE_NORMAL_gc | OPAMP_ALWAYSON_bm;

// Настройка ОУ1 в режим инвертирующего усилителя с коэф. усиления -7

OPAMP.OP1INMUX = OPAMP_OP1INMUX_MUXPOS_VDDDIV2_gc

      | OPAMP_OP1INMUX_MUXNEG_WIP_gc;

OPAMP.OP1RESMUX = OPAMP_OP1RESMUX_MUXBOT_LINKOUT_gc

      | OPAMP_OP1RESMUX_MUXWIP_WIP6_gc | OPAMP_OP1RESMUX_MUXTOP_OUT_gc;

OPAMP.OP1CTRLA = OPAMP_OP1CTRLA_OUTMODE_NORMAL_gc | OPAMP_ALWAYSON_bm;

// Включение модуля OPAMP

OPAMP.CTRLA = OPAMP_ENABLE_bm;

}

Заключение

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

•••

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

О компании Microchip

Microchip Technology Inc. - ведущий поставщик микроконтроллеров, схем смешанного сигнала, аналоговых полупроводников и решений на основе флэш-IP. Решения Microchip обеспечивают разработку с низким уровнем риска, снижают общую стоимость системы и сокращают время выхода на рынок для тысяч различных клиентских приложений по всему миру. Штаб-квартира в Чандлер, штат Аризона. Продукция Microchip обладает высокими качеством и уровнем технической поддержки. Продукция Microchip обладает высоким уровн ...читать далее

Товары
Наименование
EV35L43A (MCRCH)
AVR32DB32-I/PT (MCRCH)
AVR32DB48T-I/PT (MCRCH)
AVR32DB28T-I/SS (MCRCH)
AVR64DB64T-I/PT (MCRCH)
AVR128DB32-I/RXB (MCRCH)
AVR128DB32-I/PT (MCRCH)
AVR128DB48-I/PT (MCRCH)
AVR128DB48-I/6LX (MCRCH)
AVR128DB64-I/MR (MCRCH)