Если вам нужно быстро и недорого преобразовать двоичное число в пропорциональное аналоговое напряжение, есть один отличный (и легко реализуемый удаленно) способ сделать это:
- Преобразуйте двоичное число в битовый поток младшим битом (LSB) вперед.
- Введите результирующий поток в RC-цепочку с постоянной времени
- RC = T/ln2, где T – интервал между битами.
- Зафиксируйте конечное интегрированное напряжение в конце входной строки битов с помощью устройства выборки-хранения (УВХ).
Этот метод концептуально представлен в виде ЦАП на основе декодера Шеннона (Shannon decoder DAC, SDD) [1] на Рисунке 1.
Рисунок 1. | Концепция ЦАП на основе декодера Шеннона. |
Применение концепции декодера Шеннона к реализации ЦАП (или нескольких ЦАП) выгодно отличается рядом полезных фактов:
- Преобразование двоичных чисел в битовый поток и вывод младшим битом вперед – это именно то, что выполняет функция стандартного универсального асинхронного приемопередатчика (UART).
- UART недороги и широко доступны либо как внешние периферийные устройства RS-232 для ПК с управлением от USB (обычно с использованием популярных наборов микросхем, подобных FTDI, или же в виде готовых кабельных сборок), либо как внутренние периферийные устройства популярных микроконтроллеров (в TM4C123x их целых восемь!)
Рисунок 2. | SDD с 5-вольтовыми уровнями асинхронных последовательных данных. |
На Рисунке 2 показан SDD для асинхронных последовательных данных c 5-вольтовыми уровнями, которые мог бы выводить UART микроконтроллера, а на Рисунке 3 – его временная диаграмма. Вот как это работает.
Рисунок 3. | Временная диаграмма преобразования SDD для 5-вольтовых логических уровней. |
Последовательная передача байтов (при T = 8.68 мкс = 115200 бод) для цифро-аналогового преобразования выполняется в соответствии со стандартным форматом UART и начинается со стартового бита «0». Это запускает таймер U2 555 через коммутатор U1a и начинает цикл преобразования
переключая коммутатор U1b для изоляции запоминающего конденсатора C2 (который хранит результат предыдущего преобразования) и подключения конденсатора выборки C1 к входному интегрирующему резистору R1. Обратите внимание, что постоянная времени
по существу идентична теоретической постоянной времени Шеннона T/ln(2) и при использовании компонентов с указанными номиналами отличается от идеальной всего на 0.13%. (Здесь поправка RON(U1c + U1b) учитывает сопротивления открытых коммутаторов U1c и U1b).
Коммутатор U1c преобразует логические уровни в уровни, определяемые опорным напряжением микросхемы U4, и подает результирующий битовый поток с точными уровнями 0/+5.0 В в цепь R1C1. Процесс преобразования продолжается в течение времени 8T = 69.4 мкс. Затем уровень сигнала CNV на выходе таймера U2 вновь становится низким, заставляя коммутатор U1b передать накопленный на C1 заряд результата преобразования в конденсатор C2, а оттуда на выход повторителя напряжения U3 с единичным усилением.
После этого U2 сбрасывается, подготавливая схему к ответу на следующий цикл ввода данных, когда приходит следующий стартовый бит, завершающий процесс:
Легко достижимы более высокие скорости передачи данных и меньшее время преобразования.
Рисунок 4. | SDD, модифицированный для уровней и полярности сигналов интерфейса RS-232. |
Биполярные уровни сигналов интерфейса RS-232 с их превосходной помехоустойчивостью также могут быть легко адаптированы с помощью другой конфигурации интерфейсных коммутаторов U1a и U1c, показанной на Рисунке 4.
Получившаяся в результате этих изменений временная диаграмма преобразования приведена на Рисунке 5.
Рисунок 5. | Временная диаграмма преобразования SDD для сигналов с уровнями RS-232. |