Простой цифро-аналоговый преобразователь (ЦАП) для Arduino

Цифро-аналоговый преобразователь (ЦАП) представляет собой устройство для преобразования цифрового кода в аналоговый сигнал. Цифро-аналоговые преобразователи являются интерфейсом между дискретным цифровым миром и аналоговыми сигналами.

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

В нашем проекте ЦАП мы, просто изменяя значение переменной от 0 до 255, сможем обеспечить изменяющееся на выходе напряжение в диапазоне от 0 до 5V.

Необходимые компоненты

  1. Плата Arduino Leonardo, Uno (купить на AliExpress) или любая другая.
  2. Операционный усилитель TLV2451 (купить на AliExpress).
  3. Можно использовать любой другой тип операционного усилителя, лишь бы он относился к типу rail-to-rail.
  4. Конденсатор 22 мкФ (купить на AliExpress).
  5. Резистор 3,3 кОм (купить на AliExpress).

Основные принципы работы проекта

Любая плата Arduino имеет возможности формирования ШИМ (PWM) сигнала. С помощью функции analogWrite на ряде ее выходных контактов можно сформировать прямоугольную последовательность импульсов с изменяем коэффициентом заполнения (циклом занятости).

Коэффициент заполнения представляет собой отношение времени импульса в состоянии ON к периоду прямоугольной последовательности импульсов. Для плат Arduino состояние ON подразумевает присутствие на выходе напряжения 5V.

При использовании функции AnalogWrite вы можете задать коэффициент заполнения (duty cycle) ШИМ сигнала в диапазоне от 0 до 100%, передавая в качестве второго параметра этой функции число от 0 до 255.

DC = ON TIME/(OFF TIME + ON TIME)

Иллюстрация коэффициента заполнения ШИМВ данном случае среднее значение (mean value) прямоугольной волны равно среднему значению напряжения на выходе за период волны, которое, в свою очередь, равно произведению максимальной амплитуды волны (в нашем случае 5V) на коэффициент заполнения. То есть среднее значение этой волны мы можем легко изменять с помощью функции analogWrite.

К примеру, если мы установим коэффициент заполнения равный 0 с помощью команды analogWrite(pin,0), то среднее значение волны будет равно нулю, если мы установим коэффициент заполнения равный 50% (analogWrite(pin,127)), то мы получим среднее значение волны 2.5V.

Иллюстрация среднего значения для ШИМТеперь, когда мы знаем как изменять среднее значение прямоугольной волны, нам осталось только выяснить как это можно с пользой использовать.

Из теории приема и передачи сигналов нам известно, что каждый сигнал является суммой простых сигналов, отличающихся друг от друга амплитудой и частотой. Среднее значение волны – это один из этих простых сигналов и он известен как постоянная составляющая сигнала (нулевая гармоника, DC value)

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

Схема проекта

Схема простейшего цифро-аналогового преобразователя для Arduino представлена на следующем рисунке.

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

Исходный код программы (скетча)

Для работы нашего проекта нам нужно всего лишь сконфигурировать ШИМ контакт платы Arduino в качестве цифрового выхода и использовать функцию analogWrite для формирования ШИМ сигнала. В представленном фрагменте кода мы формируем на контакте 5 ШИМ сигнал с коэффициентом заполнения 50%, поэтому на выходе нашего ЦАП будет напряжение примерно 2.5V.

На следующем рисунке показан ШИМ сигнал с контакта платы Arduino и фильтрованный сигнал на выходе нашего ЦАП.

Тестирование работы ЦАП

(Проголосуй первым!)
Загрузка...
33 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *