В данном уроке мы рассмотрим реализацию цифроаналогового преобразователя по принципу 2R2. Схема реализации довольно проста:
Выходное напряжение описывается следующей формулой:
Uвых=V*(А0*1/64+А1*1/32+А2*1/16+А3*1/8+А4*1/4+А5*1/2),
где:
А0…Аn — принимает значение 0 или 1.
V — уровень логической единицы.
Таким образом если мы будем использовать целый порт микроконтроллера (8 бит), мы получим 254 вариантов уровня напряжения, что в принципе достаточно для многих решений. Так же всегда можно добавить еще один бит, что увеличит разрядность и качество DAC.
К положительным моментам можно отнести его скорость и простату, к отрицательным моментам это то, что мы используем входа/выхода микроконтроллеров, которые могут быть очень нужны.
В качестве проверки работы DAC мы напишем небольшую программу и посмотрим, что у нас будет на осциллографе. В качестве среды программирования выберем Arduino IDE, в качестве микроконтроллера Atmega 328, которая расположена на плате Arduino Nano.
Для начало, мы с Вами сформируем таблицу данных для Sin сигнала, для этого пропишем следующий программный код:
Давай те рассмотрим откуда мы взяли данную формулу, общая формула у нас для Sin():
y=a+d*sin(c*x),
так как у нас 254 это максимальное значение при котором Uвых=5В, мы берем нулевую отметку для сигнала = 127, то есть относительно значения 2,5В мы будем увеличивать и уменьшать амплитуду нашего сигнала. Таким образом мы получим сигнал с амплитудой от 0В до 5В. Период сигнала = 2Pi, так как у нас будет 255 шагов (мы должны от 0 пройти до 1), нам нужно (2Pi /255)*х, где х наши шаги. Упрощаем формулу и в место 2/255 пишем 0.007843. Теперь запустив нашу программу мы получим массив данных для вывода нашей sin в ЦАП.
Далее пропишем программный код, который будет брать данные с нашего массива и выводить в наш порт:
Выполнив данную программу на экране осцилографа Вы увидите Sin:
Дальше мы можем немного изменить нашу схему и добавить сдвиговый регистр, тем самым уменьшить количество занимаемых ножек на микроконтроллере. Конечно, большую частоту мы не получим на выходе, но для низко частотных сигналов вполне допустимо:
**// схема подключения.
Как работать с сдвиговым регистром у меня есть отдельные уроки.