Полная версия этой страницы:
Троичный ЦАП
Генератор синуса 4bit без ступенек на базе интегратора, Atmega32, 1Мгц RC, TDA2030, резисторы в пропорции R-3R-9R-27R. Выход около 300Гц, амплитуда около 0,8Вольт. Превращение инвертирующей схемы в интегратор: резистор обратной связи ОУ заменен кондером 4,7мкФ, с выхода ОУ на минус 0,47мкФ. Синус неправильный, при формировании длительностей не учтены длительности чтения+выполнения самих команд. Помеха на дне отрицательной полуволны искусственная, закодирована.
Мой интерес: проггер я никудышный, прошу помощи в написании кодов для этой схемы. В моей проге тупая запись в DDR и PORT.
Последние две фотки без кондера 4bit 81step ternary DAC (остальные весовые резисторы отключены)
dimka76
May 4 2010, 07:27
Цитата(Karim @ May 4 2010, 09:06)

Мой интерес: проггер я никудышный, прошу помощи в написании кодов для этой схемы. В моей проге тупая запись в DDR и PORT.
Достаточно только в PORT писать, а DDR настроить один раз при инициализации.
Так Вы Hi-Z состояние не получите и вернетесь к двоичке.
Цитата(Karim @ May 4 2010, 16:41)

Так Вы Hi-Z состояние не получите и вернетесь к двоичке.
Использовать дискретные весовые резисторы и именно по схеме R-3R-9R-27R - это обязательное условие?
Почему бы не использовать ШИМ для генерации синуса? из схемы останется только интегратор или просто RC цепочка.
Честно говоря, точными номиналами не обойтись, придется подстраивать из-за неидентичности сопротивлений открытых ключей. Примерные пропорции сопротивлений обязательное условие, работаем в троичной системе счисления. ШИМ тоже хорошая, но не моя тема.
Хотелось попробовать Hi-Z состояние.
Одно важное замечание по сообщению #1. Простите, оплошал, поставил в обратку интегратора электролит. После замены на нормальный помехи в синусе должны уменьшиться, жалко, макетку раскидал, как соберу, перефоткаю.
Цитата(Karim @ May 7 2010, 03:00)

Одно важное замечание по сообщению #1. Простите, оплошал, поставил в обратку интегратора электролит. После замены на нормальный помехи в синусе должны уменьшиться, жалко, макетку раскидал, как соберу, перефоткаю.
Огрехов кроме 82!=81 не вижу, но это мелочь... хотя не совсем, разница равна весу младшего разряда.
проверить без фильтрации высоких гармоник, может и тут эти искажения возникать.
проверить все резисторы, какая у них точность?
счет должен быть до 3^5=243
следит чтоб при бите DDR = 0 в PORT не записать 1 а то внутреннаяя подтяжка в AVR все исказит.
в фрагменте данных вроде все правильно. данные в DDR и PORT по таймеру, в прерывании?
ну и с электролитами разобраться.
Без фильтации ОООчень страШШШШно. Настройка не то, что в R-2R матрице (впаял и забыл), повозиться придется (если нет возможности на kazus.ru ЦАП, DAC посмотреть скажите и я сюда выложу). У меня подстроечник в опорном, и на каждом разряде в макетке. Практически скорее придется после настройки подстроечниками набирать последовательный (параллельный) эквивалент из постоянных резисторов.
5 разрядный в подробностях я свом осциллом не вижу, хотя есть ступеньки которые не смог выровнять. Есть так же в планах несколько направлений дальнейших действий (попробовать использовать пины через один, посмотреть влияние периферии, при разных напругах питания, попробовать симметричную подтяжку из двух одинаковых резисторов в плюс и минус).
Цитата(Karim @ May 7 2010, 17:17)

Практически скорее придется после настройки подстроечниками набирать последовательный (параллельный) эквивалент из постоянных резисторов.
А самое веселое, если придется перепаивать после изменения температуры окружающей среды и температурного дрейфа сопротивлений открытых каналов.
Или у вас все в лаборатории при комнатной температуре будет стоять?
Согласен, мест тонких много.
82 не огрех, и 9,1 тоже, это кажется несбыточная мечта.
В моей проге таймер программный.
Цитата(Karim @ May 7 2010, 09:33)

82 не огрех, и 9,1 тоже.
Младший разряд там где сопротивление выше. Старший разряд там где 1кОм.
Поэтому 82кОм это +1,2% пятого младшего разряда, а 9,1кОм это +1,1% для третьего разряда, но для пятиразрядного это уже 9* 1,1=9,9%.
Не забываем, токи весовых резисторов суммируются в точке с нулевым входным сопротивлением (инвертирующая схема ОУ)
Уважаемые форумчане, сложно разве?
Цитата(Karim @ May 20 2010, 02:35)

Уважаемые форумчане, сложно разве?
Хотелось попробовать R-3R ЦАП ? - да, попробовали. Интересно ? - да, интересно, но с практической точки зрения:
- 8-бит (256 значений) ШИМ не хуже 5-бит троичного ЦАП (243 значения)
- нет весовых резисторов и нет необходимости их подбирать
- схема проще
- программа проще
- ресурсов МК расходуется меньше, т.к. ШИМ формируется таймером аппаратно
- легко можно поднять качество сигнала, перейдя на 10- или 16-бит ШИМ, т.к. выходная частота низкая - 300Гц.
- 16-бит ШИМ ЦАП хуже 1-бит интегрирующего троичного ЦАП на 1 резисторе и 1 кондере т.к. в первом всегда за увеличением напряжения следует уменьшение, от того и пульсации, во втором после любого изменения можно хранить напряжение Zом
Цитата(Karim @ May 20 2010, 20:33)

- 16-бит ШИМ ЦАП хуже 1-бит интегрирующего троичного ЦАП на 1 резисторе и 1 кондере т.к. в первом всегда за увеличением напряжения следует уменьшение, от того и пульсации, во втором после любого изменения можно хранить напряжение Zом
"Матан" говорит что пульсации в обоих нарисованных случаях будут одинаковыми с точностью до константы 2 =). Повышая частоту ШИМа в 2 раза пульсации будут уже одинаковыми.
Что ж Вы утаиваете не выгодные для обычного ШИМ результаты анализа? Во сколь раз палка от Тактовой деленной на два в степени 16 у 16-бит ШИМ ЦАП выше аналогичной 1-бит интегрирующего троичного ЦАП? Так не честно, а если я частоту ZШИМ в 2 раза подниму?
Кстати давайте на равных, Вы чем пользуетесь?
zltigo
May 21 2010, 03:41
Цитата(ae_ @ May 20 2010, 07:38)

- ресурсов МК расходуется меньше
А частота на которой работает контроллер, это ресурс или нет? это я в тому, что
Цитата
... 16-бит ШИМ, т.к. выходная частота низкая - 300Гц.
Даже на 300Hz у PWM (и соответственно в случае AVR) и ядра под 20MHz. Причем 300Hz это частота дискретизации. Сколько хотите ступенек на период? тоже соответствующие 16 бит разрядности? Что получаем? Получаем даже не пшик

ибо 300Hz/65536 это менее, чем 0.0046Hz. На 16MHz тактовой 8bit PWM и 256 отсчетах на период максимальная частота 244Hz. Это если атмеговский Fast PWM. Для 'точного' вдвое ниже. Занавес.
Можно конкретнее свою позицию, Вы За или Против PWM с использованием Z . Или Вы хотите выразить свое отношение к Троичному ЦАП?
Что Вы думаете по первому посту?
zltigo
May 21 2010, 09:47
Цитата(Karim @ May 21 2010, 08:15)

Что Вы думаете по первому посту?
Заколебаетесь изображать приличный DAC из фиг знает чего и крутить подстроечники. Возьмите контроллер с DAC на борту и не майтесь ни PWM для которого Вам, как уже выяснилось, банально не хватит мегагерцев, ни самодельщиной подверженной влиянию цены на дрова в Кабуле.
Dog Pawlowa
May 21 2010, 10:10
Цитата(Karim @ May 21 2010, 08:15)

Что Вы думаете по первому посту?
Хотя к ЦАПу на ШИМ испытываю недоверие, Ваше решение тоже не вдохновляет.
Дешевый STM32 обеспечивает два канала синуса с точностью процентов на частоте несколько десятков килогерц без загрузки контроллера.
Так что Ваше решение годится в качестве учебной задачи, не более того.
zltigo
May 21 2010, 11:33
Цитата(Dog Pawlowa @ May 21 2010, 13:10)

Дешевый STM32 обеспечивает два канала синуса с точностью процентов на частоте несколько десятков килогерц
Несколько это 20KHz? 20KHz*256(разрядность PWM)*256(количество отсчетов на период) = 1.3GHz Дешовые STM уже дошли и перешли за ГИГАГЕРЦ???
Либо в каком месте будем осетра урезать?
Dog Pawlowa
May 21 2010, 11:45
Цитата(zltigo @ May 21 2010, 14:33)

Либо в каком месте будем осетра урезать?
Не будем. Сорри, неудачно сформулировал, мыслей оказалось больше, перепрыгнул

Я не имел ввиду ШИМ, я имел ввиду Таймер + ПДП + ЦАП.
Что ж Вы так, к своему времени неуважительно. Я ж не спрашиваю Вас " что будет если?", я написал "то-то работает, нужна помощь". А Вы мне что в ответ? Кто не хочет помогать, вон, соседних веток море. Хотим помогать- обсуждаем алгоритм. А кто хочет и схему готовую и прогу пусть ждет в тряпочку. Устроили дискуссию как в доме опытных-переопытных ветеранов с замерзшими паяльниками. Мы же с Вами электронщики, у нас всегда было есть и будет здоровая конкуренция в упряжке с взаимопомощью.
Кому понятен первый пост, отвечаем по существу, пожалуйста.
Давайте лучше сравним случай записи в DDR PORT готовых кодов из тела программы, когда вся сложность ПО- в предварительном переводе двоички в троичку. Любой для себя это сделает раз в жизни (вдумываясь, дальше на автомате)
.....................................троичка......двоичка
Комбинаций при 8 битах.......6561.......256
проигрыш в объеме.......... ...2........1
проигрыш в скорости...........2........1
6561:2:2:256=6.4... При одинаковой значимости объема, скорости и количества ступенек выигрыш был бы таким, если бы не помехи переключений. Это отдельный разговор. Но мы же знаем, значимость параметра - это понятие пластилиновое.
................................... троичка....двоичка
Комбинаций при 3 битах........27.......8
проиг.в объеме.....................2........1
проиг.в скорости..................2........1
28:2:2:8= 0.875 Это проигрыш если только значимость параметров по 0.333. Даже при явном проигрыше 3 битного при одинаковой значимости параметров, думаю найдется приложение или чел, которым параллельны скорость и объем.
Прошу не удивляться если на других форумах найдете меня с одинаковым содержанием постов.
Цитата(Karim @ May 21 2010, 16:28)

...
Вы уже осознали источники погрешностей своего ЦАП? Если да, то к чему эти среднепотолочные расчёты? Если нет, то ... продолжайте.
Такие ЦАПы пытались использовать, когда объём кода считался в корпусах логики.

Сейчас они могут быть интересны в плане теоретическом (студентам, изучающим метрологию), но не практическом.
Dog Pawlowa
May 21 2010, 12:58
Цитата(Karim @ May 21 2010, 15:28)

Хотим помогать- обсуждаем алгоритм. А кто хочет и схему готовую и прогу пусть ждет в тряпочку.
Алгоритм вообще-то зависит от требований к быстродействию.
Естественно напрашивается массив значений PORTA/DDRA/константа в таймер.
Загрузили константу в таймер ->
пришло прерывание ->
записали значение PORTA ->
записали значение DDRA ->
инкремент индекса массива и проверка
выход из прерывания
поделали что-то полезное
прерывание повторяется.
Требуется подготовка таблицы, вполне удобен EXEL.
Успехов.
А от схемы и проги увольте, они никому не нужны.
zltigo
May 21 2010, 14:30
Цитата(Karim @ May 21 2010, 15:28)

Прошу не удивляться если на других форумах найдете меня с одинаковым содержанием постов.
Прошу не удивляться, что там Вам расскажут много более доходчиво, что думают о таком DAC. Практический смысл равен 0. Все разговоры за экономию тактов и выводов полностью гробятся двухполярным питанием, которое заодно является и опорным, дивным набором резисторов и непредсказуемостью утечек и переходных процессов. Если Вы лично или кто другой загнали себя в угол, например, количеством выводов у контроллера и вместо того того, что-бы взять другой контроллер пусть даже не с DAC, а с количеством выводов достаточным для банальной R-2R матрицы, и вместо этого начали городить дивный набор резисторов и двухполярное питание, то .... воздержусь от дальнейших комментариев.
xemul, кроме недостатков вижу способы преодоления некоторых.
Dog Pawlowa, спасибо за пожелания и пересказ вложения первого поста. А я юзаю Excel.
zltigo, не удивляюсь, всегда знал, что дубину можно рычагом, чтоб подтолкнуть, можно спицей деревянного не совсем круглого колеса, но чтоб катилось, можно поперек этих спиц, а можно и в черно-белую полоску использовать, Вы могли помочь, но не только не помогли, но еще ...
За меня не беспокойтесь, не сверну.
Чем объяснить, то что гуру, профессионалы и знающие, которые уже помогли сотням и тысячам, ни один не предложил помощи здесь? Некоторым из них времени потребуется в тысячу раз меньше, чем мне. Кроме высказанных ими причин может еще отсутствие библиотечных заготовок? Высшим пилотажем у микроконтроллерщиков считается быстро из либы достать и подладить под себя в эксклюзивном алгоритме. Говоря словами zltigo, заколебался клянчить, наверно придется в однеху маяться.
В заключении хочу поблагодарить ARV с форума Радиокот, который просто взял и написал прогу перевода двоички в троичку.
Спасибо всем. Кому интересно, что дальше, обращайтесь majorka65@mail.ru
zltigo, можно закрывать ветку.
Dog Pawlowa
May 21 2010, 18:01
Цитата(Karim @ May 21 2010, 20:44)

ни один не предложил помощи здесь
Подобный случай описан у Конан Дойля.
Вы, видимо, решили, что когда нищий говорит колкости, ему больше дают.
Цитата(zltigo @ May 21 2010, 17:30)

.. дивным набором резисторов ...
Мне кажется, тут есть один интересный момент. Если этот ЦАП предназначен только для синуса, то можно установить переменный индивидуальный интервал между моментами установки параллельных данных, компенсируя тем самым особенность набора резисторов.
Ностальгия. Мой диплом 30 лет назад был - генерация синуса в цифре
zltigo
May 21 2010, 18:30
Цитата(Karim @ May 21 2010, 20:44)

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

.
Цитата
За меня не беспокойтесь, не сверну.
Дык, это и печально.
Цитата(Dog Pawlowa @ May 21 2010, 21:01)

Если этот ЦАП предназначен только для синуса, то можно установить переменный индивидуальный интервал между моментами установки параллельных данных, компенсируя тем самым особенность набора резисторов.
А почему синус? Любой сигнал - просто подстройка шириной импульса, т.е. ШИМом нелинейности. Проблема в том, что разрешающую способность таймера надо будет иметь, как у ШИМ.
Просто будет ШИМ работающий не на весь диапазон. Круг замкнулся.
Цитата(Karim @ May 21 2010, 21:44)

xemul, кроме недостатков вижу способы преодоления некоторых.
Чтобы удобнее было преодолевать, разделите проблемы на смехотехнические и алгоритмические.
Смехотехнические одинаковы для ЦАПов и на R-2R, и на R-3R матрицах - точность матриц, опор, влияние сопротивлений ключей. Здесь у R-3R никаких преимуществ (кроме рукопашного подбора резисторов

) нет.
Алгоритмические...
Dog Pawlowa уже описАл алгоритм формирования произвольного сигнала с помощью ЦАП. Основные проблемы - целочисленность таймера и ЦАП, и джиттер выдачи кода в ЦАП. Здесь R-3R от R-2R тоже ничем не отличается.
Поэтому и было сказано, что интерес к ЦАПу на R-3R матрице может быть теоретический (типа - так тоже можно), но практического смысла в его реализации чуть да маленько.
(все вышенатоптанные буквы - не более, чем хо (humble opinion), не должное остановить полёт мысли)
zltigo
May 21 2010, 21:18
Цитата(xemul @ May 21 2010, 22:58)

Смехотехнические одинаковы для ЦАПов и на R-2R, и на R-3R матрицах
Отнюдь не одинаковы. Троичный принципиально требует ДВУХ опорных в данном случае еще и РАЗНЫХ полярностей, причем в данной схеме от этих опорных еще все питается. Муть.
Цитата(zltigo @ May 22 2010, 01:18)

Отнюдь не одинаковы.
одинаковы.
Цитата
Троичный принципиально требует ДВУХ опорных
четверичный - трёх, пятеричный - четырёх, ... И то при условии, что одно из опорных напряжений = 0, что в общем случае не обязательно.
Цитата
в данном случае еще и РАЗНЫХ полярностей,
не обязательно.
Цитата
... Муть.
целиком и полностью согласен.
zltigo
May 22 2010, 17:03
Цитата(xemul @ May 22 2010, 10:30)

одинаковы.
Ну-ну... Закрываем оба глаза?
Цитата
не обязательно.
Да ну? Вперед - рассказывайте
как данная конкретная реализация работает без опорных разных полярностей.
and_007
Jun 9 2010, 18:50
Если можно продолжить тему...Возникла схожая задача.
ТЗ - имеется микроконтроллер atmega8535, надо сформировать синус частотой 2кгц, коэффициент гармоник предельный 0.5%, желаемый <=0.3%, амплитуда 2.5В эфф, стабильность амплитуды в диапазоне -45..+85 предельная 0.5%, желаемая <=0.4% Сопротивление нагрузки высокое (буферный ОУ).
Способ формирования синуса по минимуму стоимости и наиболее простой настройке схемы.
Не знаю, что выбрать или R2R (С2-29В) или же ШИМ формирование с RC фильтром?
Если R2R то можно наверно применить 4-х битовый ШИМ (16 ступенчатый сигнал частота дискретизации 64 кГц)
Или же можно применить ШИМ 32 отсчета на период , величина коэффициентов шим от 0 до 64, частота "тиков" шим 32 х 64 =4096 кГц
Что посоветуете?
Цитата(and_007 @ Jun 9 2010, 21:50)

ТЗ - имеется микроконтроллер atmega8535,
На белом свете, вообще-то имеется много разных контроллеров. Под Вас имеются и с DAC на борту и отдельные DAC
и источники опорных напряжений.
Цитата
желаемый <=0.3%,
ЛЮБЫЕ несколькоступенчатые генерилки по любому потребуют солидной фильтрации.
Цитата
амплитуда 2.5В эфф,
Очень мило, и как Вы мыслите получить 7 с гаком вольт размах на выходе контроллера с 5V питанием?
Цитата
стабильность амплитуды в диапазоне -45..+85 предельная 0.5%, желаемая <=0.4%
На этом пункте сразу забываем и о PWM и о обвесках пинов из резисторами.
and_007
Jun 10 2010, 03:04
Контроллер менять не могу по заданию

Генерация синуса его побочная функция по мимо всего прочего.
Фильтрация будет активным ФНЧ 1-го или 2-го порядка, пока не считал. Хотелось бы обойтись первым порядком.
Коэффициент усиления ФНЧ 1,41
Если температурная стабильность матрицы резисторов С2-29В 50ppm то это грубо составит 5e-05*60=0.3% т.е. должны уложиться.
С ШИМ сигналом и RC цепочкой стабильность амплитуды должна быть хорошей, если частота среза в несколько раз превышает частоту сигнала.
Если можно, такой вопрос, учебник или хорошую статью по аналитическому расчету спектра ШИМ сигналов не посоветуйте?
zltigo
Jun 10 2010, 07:02
Цитата(and_007 @ Jun 10 2010, 06:04)

Контроллер менять не могу по заданию

Даже, если Вас съели, у Вас есть ДВА выхода.
Цитата
Генерация синуса его побочная функция по мимо всего прочего.
Ах еще и побочная

типа с частотой дискретизации, которую Вы хотите иметь в 64KHz этот контроллер должен между делом забрасывать, не особо важно куда в PWM или DAC отсчеты синусоиды, пусть даже она и будет фиксированной частоты и амплитуды и их не надо будет считать.
Цитата
Фильтрация будет активным ФНЧ 1-го или 2-го порядка, пока не считал. Хотелось бы обойтись первым порядком.
Да, Да, "пока не считал", это пять баллов!
Цитата
Если температурная стабильность матрицы резисторов С2-29В 50ppm то это грубо составит 5e-05*60=0.3% т.е. должны уложиться.
Да, а о том, что на этой матрице напряжение берется с пинов контроллера и в свою очередь от некоего блока питания, об этом Вы пока и не подозревали

.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.