Довольно часто встречаю подобные схемки в различных радиолюбительских конструкциях, но далеко не всегда они используются достаточно осмысленно. Попробую объяснить.
Такие ЦАП используются для преобразования цифрового кода разрядности "n" в напряжение от 0 до, практически, напряжения питания, а точнее до (2^n-1)/(2^n)*VCC с шагом VCC/2^n.
Если, например, на такой ЦАП подать линейно возрастающий код, то на выходе (OUT), мы должны увидеть такой сигнал:
Но это все в идеале, в реальной жизни все может выглядеть несколько иначе.
Нюанс первый - используемые в реальной схеме резисторы имеют какую-то конечную точность.
В качестве примера рассмотрим конкретный случай - восьмиразрядный (n=8)
ЦАП на резисторах 1ком/2ком. Для количественной оценки влияния точности
резисторов примем следующее допущение: все резисторы, кроме самого старшего (2R), подключенного к выходу Qn-1(MSB) идеальные, т.е. имеют абсолютно точные
значения своих номиналов. В таком случае, если задаться максимальным отклонением выходного сигнала,скажем, не более половины одного бита (VCC/2^n/2), то отклонение номинала старшего резистора должно быть не более чем 2R/2^n.
В нашем случае - 2ком/256=7.8 ом. Далее, если предположить, что все остальные резисторы не идеальные, а имеют такую-же точность как и самый старщий, то это значение нужно еще разделить на 2. В итоге, для того, чтобы получить максимальное отклонение не более половины одного бита, точность резисторов должна быть не хуже 3.9/2000=0.2% (!)
На практике достичь такой точности довольно сложно. Обычно для решения этой
проблемы используют резисторы одного номинала ,например 1ком (для R) и два
резистора 1ком последовательно (для 2R) или наоборот, 2ком(для 2R) и два
резистора на 2ком паралельно(для R). В данном случае ставка делается не на
абсолютную точность, а на одинаковость номиналов в конкретной партии резисторов. Хорошо-бы эту одинаковость еще и проверить каким-нибудь подходящим приборчиком.
Нюанс второй - выходное сопротивление ключей (Rc), которое в данном случае
получается подключенным последовательно к резисторам 2R - не равно нулю. Кроме того, у разных микросхем, микроконтроллеров, ПЛИС , ТТЛ ИЛИ КМОП-логики его величина разная и может быть довольно большой.
В частности у EPM240 сопротивление канала 20ом. Есть два метода решения этой проблемы.
Первый - минимизировать его влияние, например включить несколько ключей паралельно, тем самым уменьшив его величину, или увеличить значение R, например поставить вместо 1ком/2ком - 10ком/20ком (при этом увеличится выходное сопротивление, оно = R).
Второй - попытаться измерить его величину и учесть ее в схеме,
включив дополнительные резисторы последовательно с R:
Нюанс третий - значение напряжения на выходе ЦАПа напрямую зависит от напряжения VCC. Поэтому, для достижения все той-же точности в половину одного бита, величина всякого рода шумов и помех на VCC не должна превышать VCC/2^n.
Вобщем не стоит экономить на качественном стабилизаторчике и блокировочных конденсаторах.
Если подвести краткий итог вышесказанного, то на резиках с 5% точностью можно
с успехом делать 4х-битные цапики, на 1%ных смело рассчитывать на 6 бит (и в глубине души надеяться на 7), а чтобы сделать хороший 8-битный, придется потрудится.
Подробнее...