Найти в Дзене
Electronics && Oleg Gorshkov

8-битный ЦАП с параллельным интерфейсом AD7524. Нужен ли он в эпоху Arduino?

AD7524 — это недорогой 8-разрядный КМОП (CMOS) цифро-аналоговый преобразователь (ЦАП) с умножением и встроенными буферными регистрами. Он разработан для прямого подключения к шинам данных большинства популярных микропроцессоров. Назначение выводов: Особенностью микросхемы является то, что она предназначена для работы совместно с операционным усилителем. Запись значения с шины данных происходит только при одновременном наличии логического нуля на пинах CS и WR. Значение напряжения на выходе рассчитывается по формуле: Vout = -Vref * Code / 256. Как видно, напряжение на выходе имеет полярность, обратную опорному напряжению. Резисторы R1, R2 нужны для точной подстройки выходного значения, а конденсатор C1 предотвращает возбуждение ЦАП. Для проверки возможностей микросхемы я собрал упрощенную схему, исключив резисторы и конденсатор. В качестве операционного усилителя использовал LM358. В качестве опорного напряжения использовал -5 В. Операционный усилитель запитал от двухполярного источника

AD7524 — это недорогой 8-разрядный КМОП (CMOS) цифро-аналоговый преобразователь (ЦАП) с умножением и встроенными буферными регистрами. Он разработан для прямого подключения к шинам данных большинства популярных микропроцессоров.

цоколевка
цоколевка

Назначение выводов:

  • Vref — вход опорного напряжения;
  • OUT1, OUT2 — токовые выходы ЦАП;
  • DB7–DB0 — шина данных (DB7 — старший бит MSB, DB0 — младший LSB);
  • CS — выбор чипа;
  • WR — запись данных;
  • VDD — питание (+5 В... +15 В);
  • RFB — вывод резистора обратной связи для работы с внешним ОУ.

Особенностью микросхемы является то, что она предназначена для работы совместно с операционным усилителем. Запись значения с шины данных происходит только при одновременном наличии логического нуля на пинах CS и WR. Значение напряжения на выходе рассчитывается по формуле: Vout = -Vref * Code / 256. Как видно, напряжение на выходе имеет полярность, обратную опорному напряжению.

типовая схема включения
типовая схема включения

Резисторы R1, R2 нужны для точной подстройки выходного значения, а конденсатор C1 предотвращает возбуждение ЦАП. Для проверки возможностей микросхемы я собрал упрощенную схему, исключив резисторы и конденсатор. В качестве операционного усилителя использовал LM358.

схема 1
схема 1

В качестве опорного напряжения использовал -5 В. Операционный усилитель запитал от двухполярного источника -5 В и +9 В. Девять вольт необходимы, так как простенький LM358 не способен выдавать на выходе напряжение, близкое к напряжению питания; то есть питание должно быть с запасом в несколько вольт относительно максимального выходного уровня. Все входы шины данных соединены с питанием +5 В. Собрал устройство на макетной плате. В качестве источника отрицательного напряжения использовал модуль из предыдущей статьи, добавив к нему "повышайку" на 5-9В.

на макетной плате
на макетной плате

Ожидаемое напряжение на выходе — 5 вольт, реально видим 4,839 В.

максимум, при опоре -5В
максимум, при опоре -5В

Аналогично можно регулировать напряжение от 0 до 5 вольт. Соединил все входы шины данных с землей — должен быть ноль, его и наблюдаем.

нуль,  при опоре -5В
нуль, при опоре -5В

Теперь проверим середину. Для этого все пины шины данных вернем на единицу, а DB7 оставим на нуле. Должно быть 2,5 В. Видим 2,408 В.

половина, при опоре -5В
половина, при опоре -5В

В проделанных выше трех экспериментах погрешность обусловлена прежде всего низкой точностью напряжения питания (-5 В), которое взято за опору. Кроме того, не всегда удобно работать с отрицательным значением источника опорного напряжения. Поэтому немного усложним схему.

схема 2
схема 2

Здесь в качестве источника опорного напряжения я использовал TL431, обеспечивающую +2,5 В. Чтобы на выходе получить положительное напряжение, собрал инвертор на втором операционном усилителе (их как раз два в корпусе LM358). Таким образом получаем возможность задавать напряжение от 0 до 2,5 вольт. Проведем аналогичные три замера для максимума, минимума и середины.

Видно, что теперь точность стала выше. Если же требуется идеальный результат, нужно добавить резисторы R1 и R2, указанные в даташите — тогда выходной уровень можно будет подстроить абсолютно точно.

Где же может сейчас оказаться полезна AD7524?

Прежде всего, она интересна тем, кто любит разрабатывать устройства без использования микроконтроллеров. Например, её можно подключить к выходу счетчика или шифратора. В качестве примера рассмотрим схему регулятора уровня звукового сигнала из журнала «Радио».

схема из журнала Радио
схема из журнала Радио

Здесь генератор на К155ЛЕ1 (SN7402) формирует импульсы, которые при нажатии кнопок поступают на разные входы реверсивных счётчиков К155ИЕ7 (SN74193), соединенных каскадом. Они и управляют ЦАП — К572ПА1 (AD7520). Регулируемый сигнал подаётся на вход опорного напряжения ЦАП, а выход снимается с операционного усилителя К544УД2.

Хотя здесь применена немного другая микросхема — AD7520 (10-битная), из схемы видно, что используется только 8 бит (два младших разряда «сидят» на земле). Следовательно, её смело можно заменить на более дешевую AD7524, разумеется, с учетом цоколевки.

Стоит ли использовать AD7524 совместно с Arduino или «голыми» микроконтроллерами? С одной стороны, сейчас доступны ЦАП, подключающиеся по шине I2C, которые значительно упрощают схемотехнику. С другой стороны, параллельный ЦАП обладает максимальной скоростью воспроизведения. Кроме того, его очень просто вписать в программу: не нужны никакие библиотеки — достаточно выделить один из портов под управление AD7524 и выводить на него любое число от 0 до 255.

Например, программный код будет выглядеть так:

void setup() {

// Настройка ПОРТА D (пины 0-7) на выход

DDRD = 0xFF;

PORTD = 0x00;

}

void loop() {

PORTD = (любое число от 0 до 255);

}

Кстати, существуют китайские платы Arduino на микроконтроллере LGT8F328P — это улучшенный аналог ATMega328P, который уже имеет ЦАП на борту. Но его использование осложняется необходимостью установки дополнительного ядра и риском того, что некоторые стандартные библиотеки проекта не будут с ним корректно работать.