R 2R ЦАП. Практическое применение

Для преобразования цифрового сигнала в аналоговый, используют устройства под названием цифро-аналоговые преобразователи. Как правило, они существуют в виде отдельных микросхем которые порой труднодоставаемы. Если к ЦАПу не предъявляются серьёзные требования, то его можно сделать самостоятельно из обычных резисторов. Называется такой ЦАП — R 2R. Своё название он получил из-за номиналов применяемых в нём резисторов с сопротивлениями R и 2*R. Сопротивления по идее могут быть любыми, но в разумных пределах разумеется. Если поставить очень большие например по несколько мегаом, то нагрузка которая подключена к выходу, внесет существенные искажения в сигнал. Напряжение начнёт проседать. Я взял резисторы с сопротивлениями 1Ком и 2Ком (просто первое что попалось под руку).R 2R ЦАП схема Hint: Если есть много резисторов одного сопротивления, то получить сопротивление вдвое меньшее, можно просто запараллелив два одинаковых резистора. Для такого ЦАПа желательно использовать резисторы с 1%-м допуском. У меня к сожалению таких не нашлось, и я использовал обычные. На моей отладочной плате этот ЦАП выглядит так:

R 2R ЦАП

Как оно работает
Каждый вход ЦАПа имеет свой «вес». Входы расположены в порядке уменьшения веса слева направо. Т.е. левый вход оказывает самое большое влияние на выходной сигнал следующий за ним вдвое меньше итд. Ну а самый последний (правый)  вход изменяет выходной сигнал на ничтожные милливольты. Если известна комбинация бит поступающая на вход ЦАПа, то рассчитать напряжение очень легко. Предположим, что на входе у нас число 10010101 тогда выходное напряжение можно рассчитать по формуле

Uвых=Uпит * (1 * 1/2 + 0 * 1/4 + 0 *1/8+ 1*1/16 +0*1/32+1*1/64+0*1/128+1*1/256)

Формула простая, и мозг ни кому взорвать не должна. Согласно ей, напряжение на выходе будет равно 2.91 вольта. Uпит — напряжение питания микроконтроллера. При расчете использовалось значение 5 вольт. Таким образом, восьмибитный ЦАП способен выдать 256 различных напряжений с шагом около 20 милливольт, что вполне неплохо.

Применение
Применений у данного данного ЦАПа несколько. К примеру можно сделать генератор сигналов различной формы. Например пилы:

SAW

или скажем треугольника:

triangle

ну или можно вывести сигнал эротической экзотической формы:

tits

А можно еще выводить звук. Звук конечно не самого хорошего качества, но для создания какого-нибудь дверного звонка, его вполне достаточно. Проще всего воспроизводить звук формата WAV т.к. он не сжат ни какими аудиокодеками и не потребуется его декодировать перед воспроизведением. Из-за того что звук ни чем не сжат, размер звукового файла не внушает оптимизма. Во флеш микроконтроллера много не влезет. Для эксперимента по выводу звука через ЦАП было решено заюзать SD карту памяти на 2 гб. Не буду рассказывать всех тонкостей работы с картой, (возможно напишу об этом подробно в следующий раз) хочу лишь дать возможность оценить качество звучания такого ЦАПа (звук 8 бит 16 кГц моно):

Преимущества и недостатки
К преимуществам можно отнести:

  • Возможность увеличения разрядности
  • Неплохая частота дискретизации
  • Схемотехническая простота и повторяемость

Недостатки тоже есть :

  • Качество ЦАПа сильно зависит от применяемых резисторов
  • Сопротивление ключей порта микроконтроллера вносят искажения
  • Громоздкость на плате

Благодарности
Спасибо DiHalt’у за функцию выводящую последнюю осциллограмму ;-)

R 2R ЦАП. Практическое применение: 28 комментариев

  1. Хех.. Лучше ещё добавь нормальную запись звука с ЦАПа:)
    Например повесить вывод ЦАПа на вход микрофона и записать и дать прослушать чтобы можно было понять:)

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

  3. дааа, помню самопальные «звуковухи», сделанные по такому принципу… вешались на LPT-порт.
    есть одно «но» — так как выходное сопротивление этой схемы больше, чем хотелось бы, буфер на выходе явно не помешает.
    касательно искажений — ну, до 8 бит звучит вполне ничего так. :) и работает быстро. для улучшения характеристик можно использовать 1% резисторы, что обычно и делают.

  4. Вот Вы заняли 8 ног микроконтроллера, и ножками дергаете. На мой взгляд, неэффективное рещение. Гораздо рациональнее было бы использовать ШИМ с усреднением через фильтр. А тут уже простор для фантазии: точность большая не нужна — берем RC-фильтр, а поточнее — можно Баттерворта 4 порядка рассчитать. Благо информации по ним хватает.

  5. почему не шим- на мой взгляд эта схема гораздо меньше потребляет тока.. да и сигнал глаже шима полюбому.. иногда надо не только музыку слушать но и задавать точные напряжения без помех от шима.
    еще один неявный плюс этой схемы экономия одного таймера.
    что касается съедания старшими нолями младших едениц, то можно просто переводить выводы в z-состояние.
    еще один вариант использования данной схемы-довольно таки высокоскоростной АЦп: если подключить его к компаратору.
    В общем, мне схема понравилась. сразу вспомнил молодость и первые ковоксы.

    1. увы всё стёр после того как сделал скриншоты. не подумал что это кому-то пригодится.там писать то нечего:
      Для пилы просто тупо в бесконечном цикле увеличиваем значение регистра на 1 и выводи в порт на котором висит ЦАП.
      Для треугольника чуть сложнее: Постоянно увеличиваем регистр на 1. После увеличения проверяем достигли ли мы 255. Если да то вместо увеличения начинаем с каждым шагом уменьшать содержимое регистра на единицу. Если достигли ноля то опять начинаем увеличивать и всё повторяется.
      С сиськами сложнее там вырисовывать надо. Я взял у ДиХальта исходник.
      Смотри на
      http://easyelectronics.ru/parallelnyj-cifro-analogovyj-preobrazovatel-po-sxeme-r-2r.html

  6. как я заметил, есть различия между схемой и платой:
    между R9 и выходом ЦАП стоит еще одно сопротивление в 2К
    а между выходом ЦАП и землей стоят 2 конденсатора (как видно из схемы mega_debug они по 22пФ) суммарной емкостью 44пФ

    зачем данные вещи нужны?
    а по поводу количества занимаемых ног — можно использовать сдвиговый регистр :)

  7. Знаете, я в начале писиместично относился к этому проекту. И я вполне согласен с человеком под псевдонимом «Derevo23RUS». Я сперва решил используя закон старого доброго Ома расчитать как это так выходит… Честно дурной труд, и запутаться легко. В результате решил собрать ЦАП.
    Получилось, работает???!!! Но я решил задать себе вопрос «Почему данный ризисторный делитель стоет фигню(мне он обошолся в 2-3 гр), а микросхема ЦАП фирмы AD стоит аж 40гр?».
    Я решил сравнить эти два устройства, на одинаковые параметры, с одинаковой скоростью и одинаковым уровнем. Я подключал оба устройства к аналоговому осилографу, затем к цифровому, разницу не вижу.
    Если кому то имтерестно посмотреть на осилограмму то обращайтель я перекину.
    НО при детальном расмотрении осилограмы при увеличении я заметил не схожесть осилограм. В ЦАП фирмы AD имеет чёткие ступени дискретизации, а вот данная схема имеет не совсем чёткие, скорее даже совсем не чёткие.
    Хотя учитывая что данная схема стоит не больше 3 гр. то я думаю что это просто чудестно. Но для чегото более серьёзного этот ЦАП не годится.

    1. Мне можете прислать :)
      И укажите плиз, что за ЦАП от АД у вас?
      На сколько я знаю, готовые ЦАП-ы идут со сглаживающим фильтром.
      А с отключаемой интерполяцией АЦП как-то редки.
      Если у ЦАП-а прослеживаютя ступеньки, то это либо очень плохой ЦАП
      либо он требует фильтр на выходе.

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