Превратите ШИМ модулятор в цифро-аналоговый преобразователь

Добавлено 2 декабря 2019 в 02:12

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

Вспомогательная информация

Когда вам не хватает ЦАП

Даже в наш век высокоинтегрированных микросхем смешанных сигналов нередко можно встретить микроконтроллер, в котором нет цифро-аналогового преобразователя. Программируемая логика в этом отношении еще более проблематична; я никогда не слышал об FPGA или CPLD с модулем ЦАП. И даже когда микроконтроллер имеет ЦАП, доступно может быть только один или два канала – в отличие от встроенных периферийных устройств АЦП, которые обычно включают в себя мультиплексор, который позволяет одному модулю АЦП преобразовывать аналоговые сигналы, подключенные к нескольким, или, может быть, даже к десятку выводов портов. Итак, что вы должны делать, когда найдете микроконтроллер, который идеально подходит для вашего приложения, за исключением того, что у него нет встроенного ЦАП? Ну, самый очевидный вариант – использовать внешний ЦАП. Быстрый поиск в интернете показывает, что у вас на выбор есть как минимум тысяча моделей, некоторые из которых стоят меньше доллара и поставляются в крошечных корпусах SC70, MSOP, SOT или DFN. Но бывают случаи, когда вы не хотите добавлять в проект еще один чип. Возможно, в вашем микроконтроллере нет трех неиспользуемых выводов, которые вам понадобятся для связи по SPI; возможно, вы спешите и не хотите платить за срочную доставку; может быть, вам нужно шесть отдельных выходов ЦАП, но для шестиканального устройства недостаточно места на плате. В любом случае, если внешний ЦАП просто исключен, у вас есть альтернатива.

ШИМ, резистор, конденсатор

Абсолютный минимум здесь – это резистор, конденсатор и что-то вроде широтно-импульсной модуляции. У вас наверняка не будет недостатка в возможностях ШИМ, если вы используете FPGA или CPLD. Что касается процессоров, я думаю, что каждый микроконтроллер, с которым я когда-либо работал, включал в себя аппаратный модуль ШИМ, но я предполагаю, что должны быть некоторые модели, у которых его нет. Итак, это первое, что нужно проверить – если у вашего микроконтроллера нет ШИМ модуля, вам не повезло (если только вы не захотите программно реализовать ШИМ, но если серьезно, в этом случае проще использовать внешний ЦАП). Далее вам нужен способ фильтрации нижних частот ШИМ сигнала. Если вы не возражаете против некоторых пульсаций на выходе, вам может подойти простейший однополюсный RC-фильтр, поэтому, если всё, что вы можете вписать в вашу плату или в бюджет, это резистор и конденсатор, ЦАП на основе широтно-импульсной модуляции по-прежнему является жизнеспособным вариантом. Тем не менее, чем лучше фильтр, тем лучше ЦАП, и, возможно, стоит добавить катушку индуктивности или операционный усилитель, чтобы получить два полюса вместо одного.

ШИМ – основы

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

Рисунок 1 ШИМ сигнал
Рисунок 1 – ШИМ сигнал

Типовой цифровой тактовый сигнал представляет собой последовательность периодов, в которых длительность напряжения высокого логического уровня равна длительности напряжения низкого логического уровня. ШИМ сигнал, напротив, представляет собой последовательность периодов, в которых длительность напряжения высокого логического (или низкого логического) уровня изменяется в зависимости от внешних условий, и эти изменения могут использоваться для передачи информации. Если вы знакомы с радиочастотными схемами, вы знаете, что информация передается с помощью синусоидальных сигналов, к которым применяется некоторый тип модуляции. Эта ситуация аналогична работе ШИМ – вместо амплитудной или частотной модуляции мы имеем широтно-импульсную модуляцию. Возможно, вам будет полезно подумать об этом концептуальном сходстве: мы все знаем, что аналоговый аудиосигнал может быть передан от антенны до радиоприемника для чего, несущая сначала модулируется, а затем полученный сигнал обрабатывается таким образом, чтобы устранить несущую и восстановить оригинальную аудиоинформацию. Аналогично, мы можем генерировать программируемое аналоговое напряжение путем широтно-импульсной модуляции цифровой несущей и затем «передавать» этот модулированный сигнал на фильтр нижних частот.

На приведенной выше диаграмме высокий логический уровень обозначен как «ON» (включен) или активное состояние, а низкий логический уровень обозначен «OFF» (выключен) или неактивное состояние. В первом периоде продолжительность активного состояния равна продолжительности неактивного состояния. Затем в течение следующих двух периодов длительность активного состояния увеличивается на ширину одной клетки; это означает, что длительность неактивного состояния должна уменьшиться на ширину одной клетки, потому что несущая частота ШИМ (и, следовательно, период ШИМ) постоянна. В контексте нашего ЦАП на базе ШИМ нам не нужно знать абсолютное значение длительности активного и неактивного состояния; важно соотношение между этими длительностями, то есть коэффициент заполнения ШИМ сигнала:

Рисунок 2 ШИМ сигнал
Рисунок 2 – ШИМ сигнал

\[\text{коэффициент заполнения}=\frac{T_{ON}}{T_{ON}+T_{OFF}}\]

От коэффициента заполнения к аналоговому напряжению

Номинальное напряжение ЦАП, наблюдаемое на выходе фильтра нижних частот, определяется только двумя параметрами: коэффициентом заполнения и напряжением высокого логического уровня ШИМ сигнала; на схеме это напряжение высокого логического уровня обозначено буквой A как «амплитуда». Связь между коэффициентом заполнения, амплитудой и номинальным напряжением ЦАП довольно интуитивно понятна: в частотной области фильтр нижних частот подавляет высокочастотные составляющие входного сигнала. Эквивалентом этого эффекта во временной области является сглаживание или усреднение – таким образом, посредством фильтрации нижних частот ШИМ сигнала мы извлекаем его среднее значение. Предположим, что коэффициент заполнения составляет 50% (т.е. длительность активного состояния равна длительности неактивного состояния), и мы работаем с логикой 3,3 В. Вы, вероятно, можете догадаться, какое будет номинальное напряжение ЦАП: 1,65 В, потому что сигнал половину своего времени равен 3,3 В и половину 0 В, и, таким образом, сглаженная версия окажется прямо посередине. Мы можем обобщить это следующим образом:

\[\text{Необходимое напряжение ЦАП}=A\times \text{коэффициент заполнения}\]

Как насчет разрешения?

Одной из первых спецификаций, на которые вы обращаете внимание при выборе ЦАП, является «разрешение», которое является несколько непонятным термином, выраженным в несколько непонятной единице «биты». Что мы действительно подразумеваем под «разрешением», это «сколько различных выходных напряжений (или токов) может генерировать ЦАП». Число «битов» относится к регистру данных, который управляет цифро-аналоговой схемой, поэтому 10-битный ЦАП может генерировать 210 = 1024 различных выходных напряжений. Если вы это понимаете, вы увидите, что мы можем легко определить эквивалентное разрешение ЦАП на базе ШИМ.

Рисунок 3 Определение разрешения ЦАП
Рисунок 3 – Определение разрешения ЦАП

Предположим, что ШИМ сигнал, показанный на диаграмме, ограничен длительностью импульсов, кратной одной сетке. Это означает, что коэффициент заполнения может принимать 8 различных значений: 0%, ~14%, ~29%, ~43%, ~57%, ~71%, ~86% и 100%. Каждое значение коэффициента заполнения соответствует определенному выходному напряжению, поэтому мы имеем здесь 3-битный ЦАП, потому что 23 = 8.

Чтобы определить разрешение вашего реального ЦАП на базе ШИМ, просто примените тот же самый анализ: сколько значений коэффициента заполнения вы можете сгенерировать? Обычно ответить на этот вопрос не так уж сложно потому, что центральным элементом в стандартном аппаратном модуле ШИМ является N-разрядный счетчик, который контролирует ширину импульса, что означает, что эквивалентное разрешение ЦАП равно 2N. Например, техническое описание для серии микроконтроллеров SAM4S от Atmel включает следующие характеристики для его ШИМ-контроллера:

Рисунок 4 Фрагмент технического описания для серии микроконтроллеров SAM4S от Atmel
Рисунок 4 – Фрагмент технического описания для серии микроконтроллеров SAM4S от Atmel

Этот 16-разрядный счетчик означает 16-разрядное разрешение, или 216 = 65 536 различных значений напряжения в диапазоне от 0 В до VDDIO (которое может быть в диапазоне от 1,62 В до 3,6 В). Другой пример, микроконтроллеры EFM8UB1 от Silicon Labs имеют переменное разрешение ШИМ, и, следовательно, в справочном руководстве явно указаны характеристики разрешения:

Рисунок 5 Фрагмент технического описания микроконтроллеров EFM8UB1 от Silicon Labs
Рисунок 5 – Фрагмент технического описания микроконтроллеров EFM8UB1 от Silicon Labs

Заключение

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

Теги

DAC / ЦАП (цифро-аналоговый преобразователь)PWM / ШИМ (широтно-импульсная модуляция)ФНЧ (фильтр нижних частот)ШИМ модулятор

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.