AD5667 - ЦАП с интерфейсом I2C |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Микросхемы AD5627R/AD5647R/AD5667R компании Analog Devices это 12-/14-/16-bit DAC (ЦАП) со встроенным опорным напряжением 1.25V/2.5V, обладающим стабильностью 5 ppm/°C. Микросхемы AD5627/AD5667 (без буквы R) отличаются тем, что имеют разрядность 12-/16-bit, и работают только от внешнего источника опорного напряжения. Рис. 1. AD5627R/AD5647R/AD5667R. Рис. 2. AD5627/AD5667. Микросхемы выпускаются в миниатюрных корпусах: 3x3 мм LFCSP и 10-выводном MSOP. Есть встроенный сброс при включении питания, возвращающий DAC к нулевой шкале, каждый канал имеет функцию выключения. Аппаратные сигналы ~LDAC и ~CLR служат для синхронизации процесса установки выхода. I2C-совместимый последовательный интерфейс поддерживает режимы стандартной скорости (standard speed 100 кГц), повышенной скорости (fast speed 400 кГц) и high speed (3.4 МГц). [Общее описание] Модели AD5627R/AD5647R/AD5667R, AD5627/AD5667 представляют семейство nanoDAC - ЦАП с низким потреблением, двухканальный, разрядностью 12, 14, 16 бит с буферизацией, со встроенным источником опорного напряжения (AD5627/AD5667 работают от внешнего источника опорного напряжения). Все устройства могут работать от одного источника напряжения питания в диапазоне 2.7V .. 5.5V. У моделей AD5627R/AD5647R/AD5667R встроенный источник опорного напряжения. Модель AD56x7RBCPZ имеет встроенный источник опорного напряжения 1.25V, поддерживающий температурный уход 5ppm/°C, что обеспечивать диапазон изменения выходного напряжения 2.5V; модель AD56x7RBRMZ снабжена опорным напряжением 2.5 V, точность 5ppm/°C, и дает диапазон изменения на выходе 5V. При включении питания встроенный источник опорного напряжения выключен, что позволяет использовать внешний источник опорного напряжения. Внутренний источник опорного напряжения разрешается программной записью. Модели AD5667 и AD5627 требуют внешний источник опорного напряжения для установки выходного диапазона DAC. В AD56x7R/AD56x7 встроена схема сброса при подаче питания (power-on reset circuit), что гарантирует появление 0V на выходе DAC при включении питания, и это состояние сохраняется, пока не будет выполнена правильная операция записи. Функция выключения каналов позволяет снижать потребление энергии до 480 nA от 5V, и предоставляет программно выбираемую выходную нагрузку в режиме выключения (power-down mode). Низкое энергопотребление делает микросхему идеально подходящей для устройств с питанием от батареи. Встроенный точный выходной усилитель обеспечивает изменение выходного напряжения во всем рабочем диапазоне (rail-to-rail output swing). Таблица 1. Варианты моделей DAC от Analog Devices.
Примечание: электрические и другие параметры, параметрические графики см. в оригинале даташита [1], в этом переводе приведена только основная информация по применению и программированию микросхем DAC. [Используемая терминология] Relative Accuracy or Integral Nonlinearity (INL). Относительная точность или интегральная нелинейность - для DAC этот параметр оценивает максимальную девиацию выходного уровня в единицах младших разрядов LSB от прямой линии передаточной функции DAC (зависимости входные данные - выходное напряжение). Differential Nonlinearity (DNL). Дифференциальная нелинейность - разница между измеренным изменением и идеальным изменением при смене входного кода на 1 LSB, когда изменение происходит между двумя соседними входными кодами. Указанная DNL, равная ±1 LSB максимум, гарантирует монотонность передаточной функции DAC. Дизайн этой серии DAC обеспечивает монотонность передаточной функции преобразование код - напряжение. Zero-Code Error. Ошибка нуля - показывает отклонение выходного уровня от 0V, когда в регистр данных DAC записано 0x0000. В идеальной ситуации на выходе при этом должно быть 0V. Ошибка нуля AD5667R всегда положительная, потому что уровень на выходе не может опуститься ниже 0V из-за комбинации ошибок смещения DAC и схемы построения выходного усилителя. Ошибка нуля выражается в mV. Full-Scale Range, FSR. Полный диапазон входных кодов и выходных напряжений, с которыми работает ЦАП. Full-Scale Error. Ошибка полной шкалы - отклонение уровня от максимального ожидаемого выходного, когда во входной регистр DAC загружен код полной шкалы (0xFFFF). Для идеального случая на выходе должен быть при этом уровень VDD минус вес 1 LSB. Ошибка полной шкалы выражается в % от полного диапазона изменения выходного напряжения (full-scale range, FSR). Gain Error. Ошибка усиления DAC. Параметр оценивает уровень отклонения передаточной характеристики DAC от идеальной, выраженный в % от FSR. Zero-Code Error Drift. Оценивает изменение ошибки нуля в зависимости от изменения температуры. Выражается в mkV/°C. Gain Temperature Coefficient. Температурный коэффициент изменения усиления в зависимости от изменения температуры. Выражается в ppm от FSR/°C. Offset Error. Ошибка смещения оценивает разницу на выходе между VOUT реального от VOUT идеального DAC, выраженную в mV. Измерение разницы производится посередине линейного участка передаточной функции DAC. Ошибка смещения AD5667R оценивается при загрузке кода 512 в регистр DAC, она может быть положительной или отрицательной. DC Power Supply Rejection Ratio (PSRR). Коэффициент подавления влияния изменения питания - параметр оценивает, как на выход DAC влияет уровень напряжения питания. PSRR это коэффициент изменения VOUT к изменению VDD для full-scale output DAC, измеряется в dB. VREF удерживается на уровне 2V и VDD изменяется в пределах ±10%. Output Voltage Settling Time. Время установки выходного напряжения - количество времени, за которое происходит установка выходного уровня DAC между изменением от 1/4 до 3/4 FSR. Это время измеряется от фронта нарастания события STOP шины I2C. Digital-to-Analog Glitch Impulse. Импульс помехи, инжектируемый на выход DAC, когда меняется значение входного кода в регистре DAC. Обычно указывается как область уровня помехи в nV, и измеряется, когда входной код меняется на 1 LSB при переходе от 0x7FFF к 0x8000 (см. рис. 42 из даташита [1]). Digital Feedthrough. Наводка цифровой помехи - измеренный импульс на выходе, инжектируемый на аналоговый выход DAC, когда происходит изменение уровня на цифровых входах, однако это измерение производится, когда выход DAC не обновляется. Параметр указывается в nV, и измеряется при изменение входного кода по всей шкале, т. е. от всех нулей до всех единичек, и наоборот. Reference Feedthrough. Наводка помехи на опорное напряжение - соотношение амплитуды сигнала на выходе DAC ко входу опорного напряжения, когда напряжение на выходе DAC не обновляется. Параметр выражается в dB. Output Noise Spectral Density. Спектральная плотность шума на выходе - параметр оценивает уровень шума, генерируемого внутри микросхемы. Случайный шум характеризуется спектральной плотностью. Измеряется на выходе при загрузке в DAC среднего уровня, единицы nV / корень Гц. График спектральной плотности можно увидеть на рис. 48 даташита [1]. DC Crosstalk. Параметр оценивает перекрестные помехи между каналами DAC. Измеряется при изменении по полной шкале на выходе одного DAC (или при программном выключении и включении), когда на выходе другого канала удерживается средний уровень FSR. Выражается в mkV. DC crosstalk из-за изменения тока нагрузки показывает влияние изменения тока нагрузки одного канала DAC, когда на выходе другого канала удерживается средний уровень FSR. Выражается в mkV/mA. Digital Crosstalk. Оценивает импульс помехи, который передается на выход одного из каналов DAC, когда на его выходе средний уровень, от другого канала DAC, когда его входной код меняется от всех нулей до всех единиц и наоборот. Измерятся в режиме standalone и выражается в nV. Analog Crosstalk. Аналоговый импульс помехи, передаваемый на выход одного DAC при изменении уровня на другом DAC. Измеряется загрузкой одного из входных регистров изменением кода по всей шкале (от всех нулей до всех единиц и обратно), затем выполнением программного ~LDAC и мониторингом выхода DAC, когда цифровой код не меняется. Диапазон помехи выражается в nV. DAC-to-DAC Crosstalk. Аналоговый импульс помехи, передаваемый на выход одного DAC при изменении цифрового кода и последующего изменения уровня на другом DAC. Измеряется при изменении наводящего помеху канала по полной шкале (от всех нулей до всех единиц и обратно) при уровне лог. 0 на ~LDAC путем мониторинга выхода на другом канале, на выходе которого уровень половины шкалы. Энергия помехи выражается в nV. Multiplying Bandwidth. Оценка конечной полосы пропускания внутренних усилителей DAC. Синусоидальный сигнал на опорном напряжении (с кодом FSR, загруженном в DAC) появится на выходе. Multiplying Bandwidth это частота, с которой амплитуда выхода падает на 3dB ниже амплитуды входа. Total Harmonic Distortion (THD). Общий коэффициент гармонических искажений - оценивает разницу между идеальной синусоидой и её версией, полученной с помощью DAC. Синусоидальный сигнал используется как опорное напряжение для DAC, и THD измеряет гармоники, присутствующие на выходе DAC. Измеряется в dB. Таблица 4. Параметры указаны для VDD = 2.7V .. 5.5V, температура между TMIN и TMAX, fSCL = 3.4 МГц, если не указано нечто другое1.
Примечания: 1. См. рис. 3. Параметры режима high speed применимы только для микросхем AD5627RBRMZ-2/AD5627BRMZ-2REEL7 и AD5667RBRMZ-2/AD5667BRMZ-2REEL7. Рис. 3. Диаграмма времени сигналов 2-проводной шины I2C. Рис. 4. Цоколевка AD5627/AD5667, вид сверху. Рис. 5. Цоколевка AD5627R/AD5647R/AD5667R, вид сверху. Примечание: нижняя металлическая площадка корпуса LFCSP накоротко соединяется с GND. Таблица 6. Функциональное описание выводов.
[Принцип работы] Схема цифро-аналогового преобразования. AD56x7R/AD56x7 DAC производятся по техпроцессу CMOS. Схема построена на основе линейки резисторов и ключей, за которым идет буферный усилитель. Рис. 52. Блок-схема архитектуры DAC. Рис. 53. Цепочка резисторов DAC, выполняющая цифро-аналоговое преобразование. Выходное напряжение идеального DAC при использовании внешнего опорного напряжения вычисляется по формуле (VOUT выходное напряжение, VREFIN опорное напряжение, D это входной цифровой код, N это разрядность DAC): VOUT = VREFIN x (D / 2N) Выходное напряжение идеального DAC при использовании внутреннего опорного напряжения вычисляется по формуле (VOUT выходное напряжение, VREFOUT опорное напряжение, D это входной цифровой код, N это разрядность DAC): VOUT = 2 x VREFOUT x (D / 2N) Значение кода D может быть в диапазоне от 0 до 4095 для AD5627R/AD5627 (12-bit DAC), в диапазоне от 0 до 16383 для AD5647R (14-bit DAC) и в диапазоне 0 .. 65535 для AD5667R/AD5667 (16-bit DAC). Выходной усилитель. Выходной буферный усилитель может генерировать выходной уровень во всем диапазоне напряжений (rail-to-rail voltages), от 0V до VDD. Он может выдавать сигнал на параллельно соединенную цепочку из 2 кОм резистора и 1000 pF конденсатора (один конец цепочки подключен к выходу усилителя, второй к GND). Возможности по втекающему и вытекающему току выходного усилителя показаны на рисунках 33 и 34 (см. даташит [1]). Скорость изменения выходного напряжения составляет 1.8V/мкс с временем установки 7 мкс при изменении уровня на выходе от 1/4 до 3/4 FSR. Внутреннее опорное напряжение. AD5627R/AD5647R/AD5667R снабжены встроенным источником опорного напряжения. Версии без суффикса R требуют внешнего опорного напряжения. Встроенное опорное напряжение выключено при подаче питания, и включается специальной командой записи в регистр управления (подробности см. далее в секции "Настройка внутреннего опорного напряжения"). Версии в 10-выводных корпусах LFCSP имеют опорное напряжение 1.25V, что дает выход FSR 2.5V. Эти микросхемы могут работать при напряжении питания в диапазоне от 2.7V до 5.5V. Версии в 10-выводном корпусе MSOP имеют опорное напряжение 2.5V, что дает выход FSR 5V. Эти микросхемы функциональны в диапазоне напряжений питания от 2.7V до 5.5V, однако когда напряжение питания VDD становится меньше 5V, уровень на выходе обрезается до уровня VDD. Полный список моделей микросхем см. разделе "Ordering Guide" даташита [1]. Уровень внутреннего опорного напряжения выводится на ножку VREFOUT микросхемы. Если на этот сигнал должна быть подключена внешняя нагрузка, то для неё требуется буферный усилитель. При использовании внутреннего опорного напряжения рекомендуется использовать блокирующий конденсатор 100 nF между выводом VREFOUT и GND. Внешнее опорное напряжение. AD5627/AD5667 требуют внешнего опорного напряжения, поданного на вывод VREFIN. Вывод VREFIN микросхем AD56x7R позволяет использовать внешнее опорное напряжение, если того требует приложение. По умолчанию при включении питания встроенный источник опорного напряжения выключен. Все устройства могут работать от одного источника в диапазоне от 2.7V до 5.5V. [Последовательный интерфейс] AD56x7R/AD56x7 работает как подчиненное (slave) I2C-устройство. Поддерживаются скорости передачи данных standard (100 кГц), fast (400 кГц) и high speed (3.4 МГц). Режим high speed доступен только для определенных моделей (см. "Ordering Guide" даташита [1]). Не предоставляется поддержка для 10-битной адресации и адресации general call (отдельные функции протокола I2C/TWI). Каждая AD56x7R/AD56x7 имеет 7-битный slave-адрес. 5 старших бит 00011, и два младших (A1, A0) определяются состоянием подключения вывода ADDR, что дает возможность подключить параллельно на одну шину I2C до трех микросхем. Значение бит адреса A1 и A0 в зависимости от состояния подключения вывода ADDR показано в таблице 7. Таблица 7. Выбор адреса для A1 и A0.
2-проводный последовательный протокол шины I2C/TWI работает следующим образом: 1. Master инициирует передачу данных событием START, когда SDA переходит 1 -> 0 при уровне 1 на SCL. Затем идет байт адреса, в котором находится 7-битный slave-адрес устройства. Slave-устройство, соответствующее переданному адресу, отвечает подтяжкой SDA к лог. 0 во время 9-го тактового импульса (это так называемый бит подтверждения, acknowledge bit, сокращенно ACK). На этой стадии все другие устройства, подключенные к шине (если они есть), остаются в состоянии не активности по шине, в то время как адресованное slave-устройство ждет поступления данных для записи в него или для чтения из него. 2. Данные передаются по шине друг за другом, при прохождении 9 тактовых импульсов (8 бит данных, за которым идет бит ACK). Изменения уровня на SDA должны происходить, когда на SCL присутствует уровень лог. 0, и на SDA должен оставаться стабильный уровень, когда на SCL присутствует лог. 1. 3. Когда все биты данных были записаны или прочитаны, передается сигнал STOP. Для этой цели в режиме записи master подтягивает SDA к лог. 1 во время 10-то тактового импульса. В режиме чтения master выдает no acknowledge (NACK) во время 9-го тактового импульса (т. е. SDA остается в лог. 1). Затем master переводит SDA в лог. 0 во время 10-го тактового импульса, чтобы выдать сигнал STOP. Операция записи (WRITE). При записи в AD56x7R/AD56x7 master должен выдать START, за которым идет байт адреса с битом R/W равным 0, после чего DAC подтверждает, что готов принимать данные, путем подтяжки SDA к лог. 0. AD56x7R/AD56x7 требует двух байт данных для DAC и байта команды, который управляет различными функциями DAC. Таким образом, в DAC должны быть записаны 3 байта: байт команды, за которым идет старший байт, и затем идет младший байт, как показано на рис. 54. Все эти байты подтверждаются AD56x7R/AD56x7. Затем идет сигнал STOP. Рис. 54. Операция записи I2C. Операция чтения (READ). Когда данные вычитываются обратно из AD56x7R/AD56x7, пользователь выдает START, за которым идет байт адреса с битом R/W = 1, после чего DAC подтверждает, что готов передавать данные путем подтяжки SDA к лог. 0. Затем из DAC вычитываются 3 байта, которые подтверждаются master, как показано на рис. 55. Затем идет сигнал STOP. Рис. 55. Операция чтения I2C. HIGH SPEED MODE. AD5627RBRMZ b AD5667RBRMZ предоставляют режим последовательного обмена с тактовой частотой 3.4 МГц (см. раздел "Ordering Guide" даташита [1]). Режим обмена high speed начинается после того, как master адресует все подключенные к шине устройства кодом 00001XXX, чтобы показать начало высокоскоростной передачи (см. рис. 56). Этот код не разрешается подтверждать ни одному устройству, подключенному к шине, поэтому в ответ на этот код придет NACK. Затем master должен выдать повторный START (repeated START), за которым идет адрес устройства. Выбранное устройство подтвердит этот адрес. Рис. 56. Перевод AD5627RBRMZ-2/AD5667RBRMZ-2 в High Speed Mode. Все устройства продолжат работать в режиме high speed до тех пор, пока master не выдаст сигнал STOP. Кода будет выдан сигнал STOP, все устройства вернутся в режим standard/fast. Микросхема также вернется в режим standard/fast, когда активируется сигнал ~CLR, когда микросхема находится в режиме high speed. Входной регистр сдвига. Этот регистр имеет ширину 24 бита. Данные загружаются в устройство как 24-битное слово под управлением сигнала тактов SCL. Физическая диаграмма времени этой операции и её параметры показаны во врезке "Параметры I2C" выше (таблица 4 и рис. 3). Старшие 8 бит этого регистра это байт команды. Бит DB23 зарезервирован, и всегда должен быть установлен в 0, когда происходит запись в устройство. Бит DB22 (S) используется для выбора многобайтного режима работы (Multiple Block Write). Следующие 3 бита это биты команды C2C1C0, которые управляют режимом работы устройства (см. таблицу 8). Последние 3 бита первого байта это биты адреса A2A1A0 выбора канала A и/или B (см. таблицу 9). Оставшиеся данные это словао данных (2 байта), в которых значимыми (полезными) будут 16, 14 или 12 бит (в зависимости от модели DAC). Полезные биты всегда идут первыми, начиная с самого значащего бита, и последние 2 или 4 бита из 16 бит могут быть ничего не значащими в случае 14-битного или 12-битного DAC соответственно (т. е. соответственно для AD5647R и для AD5627R/AD5627, см. рисунки 59 .. 61, ничего не значащие младшие биты данных показаны крестиками X). Таблица 8. Определение команд.
Таблица 9. Команда адреса DAC.
Multiple Block Write. Этот режим поддерживается AD56x7R/AD56x7, он полезен для приложений, требующих быстрого обновления DAC, когда не надо менять байт команды. В этом случае каждая выборка данных передается только двумя байтами, без выдачи сигнала STOP после каждой переданной пары байт. Бит S (DB22) в байте команды для многобайтного режима должен быть установлен в 1 (см. рис. 57). Для стандартных режимов 3-байтного и 4-байтного бит S (DB22) в байте команды должен быть установлен в 0 (см. рис. 58). Рис. 57. Multiple Block Write только с начальным байтом команды (S = 1). Рис. 58. Multiple Block Write c байтом команды в каждом блоке (S = 0). Рис. 59. Входной регистр сдвига микросхем AD5667R/AD5667 (16-битный DAC). Рис. 60. Входной регистр сдвига микросхем AD5647R (14-битный DAC). Рис. 61. Входной регистр сдвига микросхем AD5627R/AD5627 (12-битный DAC). Синхронный ~LDAC. Регистры DAC обновляются после того, как были введены новые данные. В этом случае ~LDAC может находиться постоянно в лог. 0 или на него могут приходить импульсы. Асинхронный ~LDAC. Выходы не обновляются одновременно с записью входных регистров. Когда ~LDAC переходит в лог. 0, регистры DAC обновляются содержимым входного регистра. Регистр ~LDAC дает пользователю полную гибкость и управление через аппаратный вывод ~LDAC. Этот регистр позволяет выбрать, какая комбинация каналов одновременно обновляется, когда управляется аппаратный вывод ~LDAC. Установка в 0 бита ~LDAC регистра означает, что обновление этого канала управляется выводом ~LDAC. Если этот бит установлен в 1, то этот канал обновляется синхронно, т. е. регистр DAC обновляется после того, как будут введены новые данные, независимо от состояния вывода ~LDAC. Это выглядит так, как если бы вывод ~LDAC был бы подтянут к лог. 0. См. таблицу 10 для режима работы регистра ~LDAC. Эта гибкость полезна в приложениях, когда пользователь хочет одновременно обновить каналы, в то время как остальная часть каналов синхронно обновляется. Таблица 10. Режим работы регистра ~LDAC: загрузка регистра ~LDAC.
Запись в DAC команды 110 загрузит 2-битный регистр LDAC [DB1:DB0]. По умолчанию для каждого канала тут 0, т. е. вывод ~LDAC работает в нормальном режиме. Установка этих бит в 1 означает, что регистр DAC обновляется независимо от состояния вывода ~LDAC. См. рис. 63 для содержимого входного регистра сдвига во время команды настройки регистра ~LDAC. Рис. 63. ~LDAC Setup Command. Команда 100 зарезервирована для функции power-up/down (включение/выключение). Режимы power-up/down программируются установкой бит DB5 и DB4. Это определяет выходное состояние усилителя DAC, как показано в таблице 11. Таблица 11. Режимы работы AD56x7R/AD56x7.
Биты DB1 и DB0 определяют, какому DAC или каким DAC применяется команда power-up/down. Установка одного из этих бит в 1 применяет состояние power-up/down, определенное битами DB5 и DB4 для соответствующего DAC. Если этот бит установлен в 0, то состояние DAC не изменится. Рис. 65 показывает содержимое входного регистра сдвига для команды power up/down. Рис. 65. Power Up/Down Command. Когда бит DB5 и бит DB4 установлены в 0, микросхема работает в нормальном режиме, потребляя ток 0.4 mA от 5V. Однако для трех режимов power-down ток потребления падает до 480 nA при 5V. Падает не только ток потребления, но еще выходной каскад внутри микросхемы переключает выход усилителя на резисторную цепь с известным сопротивлением. Это дает возможность знать выходное сопротивление микросхемы, когда её канал находится в режиме power-down. Выходы могут быть либо подключены внутри микросхемы к GND через резистор 1 кОм или 100 кОм, или же могут остаться не подключенными (третье состояние), как показано на рис. 62. Рис. 62. Состояние выходного каскада во время выключения (power-down). Когда активируется режим power-down, выключаются генератор смещения (bias generator), выходной усилитель, цепочка резисторов DAC и другие линейные схемы, которые в рабочем режиме потребляли ток. Однако выключение не влияет на содержимое регистра DAC. Время выходя из power-down обычно составляет 4 мкс для VDD = 5V. Power-on reset и software reset. AD56x7R/AD56x7 содержит схему сброса при включении питания (power-on reset), которая управляет выходным напряжением в момент подачи на микросхему питания. Это обеспечивает появление на выходе 0V при включении питания, и выход остается в таком состоянии до тех пор, пока не произойдет правильная последовательность записи данных в DAC. Это полезно в приложениях, где важно знать состояние выхода DAC, когда происходит включение питания. Любые события на сигналах ~LDAC или ~CLR игнорируются во время power-on reset. Также есть функция программного сброса (software reset), выполняемая командой 101. Эта команда программного сброса имеет 2 режима сброса, программируемых установкой бита DB0 во входном регистре сдвига. Таблица 12 показывает состояния бита и работу соответствующих режимов сброса устройства. Рис. 64 показывает содержимое входного регистра сдвига во время режима программного сброса. Таблица 12. Режимы программного сброса AD56x7R/AD56x7.
Рис. 64. Software Reset Command. Вход очистки ~CLR. У AD56x7R/AD56x7 есть асинхронный вход сброса ~CLR. Для этого входа моментом активации является спад уровня (переход 1 -> 0). Когда ~CLR находится в лог. 0, все импульсы на ~LDAC игнорируются. Когда ~CLR активирован, во все входные регистры и регистры DAC загружаются нули, это переводит выход в уровень 0V. Микросхема выходит из режима очистки по спаду уровня 9-го тактового импульса последнего байта правильной записи. Если ~CLR был активирован во время последовательности записи, то запись будет оборвана. Если ~CLR был активирован во время режима high speed, то микросхема выйдет из режима high speed, перейдя в нормальный режим скорости (standard/fast speed mode). Настройка внутреннего опорного напряжения. Эта настройка применима только к версиям R микросхем. По умолчанию при включении питания встроенный источник опорного напряжения выключен. Он может быть включен командой настройки опорного напряжения 111 (reference setup command) и установкой бита DB0 во входном регистре сдвига. Таблица 13 показывает состояния бита и соответствующие режимы работы. Рис. 66 показывает содержимое регистра сдвига во время выполнения команды настройки внутреннего опорного напряжения. Таблица 13. Reference Setup Command.
Рис. 66. Reference Setup Command. [Информация по применению] Использование в качестве питания источника опорного напряжения. Из-за того, что ток потребления AD56x7R/AD56x7 чрезвычайно мал, то как вариант для его питания можно использовать микросхему источника эталонного опорного напряжения (см. рис. 67). Рис. 67. Применение REF195 в качестве источника питания для AD56x7R/AD56x7. Это особенно полезно, если основной источник питания довольно зашумленный, или если системные напряжения питания имеют значения, отличающиеся от 5V или 3V, например 15V. Напряжение микросхемы опорного напряжения даст стабильное питание для AD56x7R/AD56x7. Если используется low dropout REF195, то она должна предоставить для AD56x7R/AD56x7 ток порядка 0.45 mA, когда на выходе DAC нет нагрузки. Когда на выходе DAC есть нагрузка, то от REF195 будет потребляться больше тока. Общий требуемый ток потребления с нагрузкой 5 кОм на выходе DAC вычисляется по формуле: 450 мкА + (5 V/5 кОм) = 1.45 мА Характеристика регулирования REF195 обычно соответствует 2 ppm/mA, что дает ошибку 2.9 ppm (14.5 mkV) для тока потребления 1.45 мА. Это соответствует ошибке 0.191 LSB. Биполярное включение. AD56x7R/AD56x7 была разработана для работы в однополярном включении, однако можно также реализовать биполярный режим работы выхода по схеме на рис. 68. Эта схема дает выходное напряжение в диапазоне ±5 V. Работа rail-to-rail на выходе достигается использованием операционного усилителя AD820 или OP295 в качестве выходного усилителя. Рис. 68. Работа AD56x7R/AD56x7 для генерации биполярного выходного напряжения. Выходное напряжение для любого входного кода можно вычислить по формуле: VO = [VDD x (D / 65536) x ((R1+R2)/R1) - VDD x (R2/R1)] Здесь D это входной код (в десятичной форме 0 .. 65535, в HEX-форме 0x0000 .. 0xFFFF). При VDD = 5V, R1 = R2 = 10 кОм выходное напряжение составит: VO = ( 10 x D / 65536 ) - 5V Это дает диапазон изменения напряжения на выходе ±5 V, когда D = 0x0000 соответствует -5V на выходе, и D = 0xFFFF соответствует +5V на выходе. Фильтрация питания и заземление. Когда необходимо достичь высокой точности DAC, на печатной плате следует тщательно реализовать разводку питания и земли. Печатная плата, где применяется AD56x7R/AD56x7, должна иметь раздельные секции цифровых и аналоговых цепей, каждая из которых занимают отдельные область на плате. Если AD56x7R/AD56x7 находится в системе, где другие устройства также требуют соединения цепей AGND и DGND, то это соединение должно быть реализовано только в одной точке. Эта точка заземления должна находиться как можно ближе к AD56x7R/AD56x7. Напряжение питания AD56x7R/AD56x7 должно быть отфильтровано блокировочными конденсатором 10 мкф, параллельно которому стоит конденсатор 0.1 мкф. Эти конденсаторы должны находиться максимально близко к микросхеме, идеальный вариант - когда конденсатор 0.1 мкф стоит в непосредственной близости с устройством. Конденсатор 10 мкф должен быть танталовым. Важно, чтобы конденсатор 0.1 мкф имел низкое эффективное последовательное сопротивление (effective series resistance, ESR) и эффективную последовательную индуктивность (effective series inductance, ESI), например это должен быть качественный керамический конденсатор SMD. Такой конденсатор предоставит низкое сопротивление для замыкания на землю токов пульсаций, генерируемых переключениями внутренней логики. Шина питания должна иметь максимально возможную ширину, чтобы обеспечить низкое сопротивление цепи питания и снизить импульсы провалов по питанию. Такты и другие быстро переключающиеся цифровые сигналы должны быть экранированы цифровой землей DGND от других частей печатной платы. По возможности избегайте пересечения и параллельного пролегания цифровых и аналоговых сигналов на плате. Когда проводники проходят по противоположным сторонам печатной платы, постарайтесь обеспечить их ориентировку под прямым углом друг к другу, это снизит перекрестные наводки между сигналами. Лучшая техника разводки - microstrip, когда для каждой стороны выделен отдельный внутренний слой земли, и сигнальные проводники проходят по верхней стороне платы. Однако это не всегда возможно для двухслойных плат. Применяйте заливку медью земли для всех свободных от цепей участков печатной платы. [Пример программирования AD5667] Ниже описывается библиотека Blackfin и пример её применения - тестовая программа, которая формирует синусоидальный сигнал на выходе ЦАП. Код запускался на макетной плате Simple Blackfin ADSP-BF538 Board [3]. ЦАП подключался к коннектору J11 I2C1. В примере есть только одно прерывание - от таймера, управление аппаратурой I2C/TWI происходит без использования прерываний. Для упрощения понимания работы кода текст заголовочных файлов опущен. Полный исходный код (проект VisualDSP) можно скачать по ссылке [4]. Модуль twi.c: /****************************************************
Подпрограммы для работы с TWI на низком уровне.
*****************************************************/
#include "init_platform.h"#include "TWI.h" static void twi_clear_all_stat (void) { /* Очищает все биты состояния */ //*pTWI_MASTER_STAT = ( BUFWRERR | BUFRDERR | DNAK | ANAK | LOSTARB); *pTWI_MASTER_STAT = *pTWI_MASTER_STAT; ssync(); /* Очищает все флаги прерываний, ожидающих обработки */ //*pTWI_INT_STAT = ( SINIT | SCOMP | SERR | SOVF | MCOMP | MERR | XMTSERV | RCVSERV ); *pTWI_INT_STAT = *pTWI_INT_STAT; ssync(); /* Сброс буферов передачи и приема */ *pTWI_FIFO_CTRL = ( XMTFLUSH | RCVFLUSH ); ssync(); } // Процедура сбрасывает интерфейс TWI.
void twi_reset(void) { /* Сброс контроллера TWI */ *pTWI_CONTROL = TWI_RESET_VAL; ssync(); twi_clear_all_stat(); } Модуль AD5667.c: #include "AD5667.h"
#include "TWI.h"
#include "timer.h"
// Подпрограммы для управления ЦАП AD5667. Реализованы только
// функции записи. Каждая функция (кроме DAC_multiple_start
// и DAC_multiple_stop) осуществляет одиночную запись
// по следующему алгоритму:
// Отправка сигнала START
// Передача 7-битного адреса и бита W
// Передача байта команды
// Передача 2 байт данных
// Отправка сигнала STOP.
volatile u8 twistate = TWI_IDLE; u8 channelDAC = DAC_A; static inline void START (u8 stop_or_not) { // Очистка бит вручную: *pTWI_FIFO_CTRL = 0; // Настройка скорости: *pTWI_CONTROL = ( TWI_ENA | PRESCALE_VALUE ); // CLKDIV = (1/SCL)/(1/10MHz): *pTWI_CLKDIV = ( ((CLKDIV_HI) << 8) | (CLKDIV_LO) ); // Целевой адрес устройства (7-битный адрес без бита R/~W): *pTWI_MASTER_ADDR = AD5667_I2C_ADDR; // Если stop_or_not == 0xFF, то генерации STOP по завершению // передачи не будет: *pTWI_MASTER_CTRL = (stop_or_not << 6) | MEN; ssync(); } void DAC_init (void) { // Сброс железа I2C: //twi_reset(); } // Записывает слово в регистр данных (0 .. 65535), чтобы
// на выходе ЦАП появилось соответствующее напряжение.
void DAC_write_value (u16 data) { if (TWI_IDLE == twistate) { twi_reset(); // После передачи адреса и 3 байт будет сгенерирован STOP: START(GENERATE_STOP); // Передача команды и номера канала: *pTWI_XMT_DATA8 = CMD_WRITE_AND_UPDATE_CHNL | channelDAC; ssync(); // Передача данных выборки: while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); } *pTWI_XMT_DATA16 = (data << 8) | (data >> 8); ssync(); // Ожидание окончания передачи: *pTWI_INT_STAT = *pTWI_INT_STAT; while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); } } } // Устанавливает либо внутреннее, либо внешнее
// опорное напряжение ЦАП. По умолчанию, после
// включения питания, используется внешний источник
// опорного напряжения.
void DAC_set_reference (u8 ref) { if (TWI_IDLE == twistate) { twi_reset(); START(GENERATE_STOP); // Передача команды установки источника опорного напряжения: *pTWI_XMT_DATA8 = CMD_REFERENCE; ssync(); while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); } // Передача настройки внутренний/внешний источник опоры: *pTWI_XMT_DATA16 = ref << 8; ssync(); // Ожидание окончания передачи: *pTWI_INT_STAT = *pTWI_INT_STAT; while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); } } }
void DAC_softreset (void) { // Остановка многословной передачи, если она активна: DAC_multiple_stop(); twi_reset(); START(GENERATE_STOP); // Передача команды сброса: *pTWI_XMT_DATA8 = CMD_RESET; ssync(); while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); } // Передача данных, которые ничего не значат: *pTWI_XMT_DATA16 = 0; ssync(); // Ожидание окончания передачи: *pTWI_INT_STAT = *pTWI_INT_STAT; while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); } }
void DAC_multiple_start (void) { if (TWI_IDLE == twistate) { // Запись на выход ЦАП среднего значения: DAC_write_value(SHIFT); // Подача команды Multiple Block Write, после которой // каждая 16-битная выборка передается двумя байтами // бесконечно в цикле, без генерации STOP: START(WITHOUT_STOP); *pTWI_XMT_DATA8 = S_MULTIBYTE | CMD_WRITE_AND_UPDATE_CHNL | channelDAC; ssync(); // Ожидание опустошения FIFO передачи: while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); } twistate = TWI_RUNNING; // Запуск прерываний таймера: Timer0init(); } }
void DAC_multiple_stop (void) { if (TWI_RUNNING == twistate) { // Переключение конечного автомата таймера // на остановку: twistate = TWI_STOP; // Ожидание остановки таймера: while (twistate != TWI_IDLE){} } } // Установка текущего канала ЦАП, A или B.
void DAC_set_channel (u8 channel) { if (TWI_RUNNING == twistate) { // Если таймер находится в режиме многобайтной // передачи, то требуется его остановка. DAC_multiple_stop(); channelDAC = channel; DAC_multiple_start(); } else channelDAC = channel; } Модуль timer.c, используется для передачи выборок в ЦАП с частотой дискретизации 20 кГц для формирования аналогового сигнала: #include < sys/exception.h >
#include "pins.h"
#include "timer.h"
#include "TWI.h"
#include "AD5667.h"
u8 ampl256 = MAX; u16 voltage = 600;
static void Timer0stop (void) { // Запрет работы таймера: *pTIMER_DISABLE = TIMEN0; // Передача завершающей выборки с генерацией STOP: *pTWI_MASTER_CTRL = (2 << 6) | MEN; u16 val16 = SHIFT; *pTWI_XMT_DATA16 = (val16 >> 8)|(val16 << 8); // Ожидание завершения передачи I2C: *pTWI_INT_STAT = *pTWI_INT_STAT; while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); } twistate = TWI_IDLE; } // Обработчик прерывания таймера 0, который срабатывает
// с частотой 20 кГц (зависит от SAMPLERATE). При каждом
// срабатывании прерывания таймера в ЦАП AD5667R передается
// одна 16-битная выборка данных. При частоте тактов I2C
// 400 кГц максимальная частота прерываний таймера
// ограничена 20 кГц. EX_INTERRUPT_HANDLER(Timer0ISR) { *pTIMER_STATUS = TIMIL0; // Счетчик фазы: static float phase = 0; // Указатель на таблицу синуса в SDRAM: s16 *ptr = 0; u16 val16phase; u16 val16; switch (twistate) { case TWI_IDLE: break; case TWI_RUNNING: LED(1); // Запись одной выборки: val16phase = (u16)phase; val16 = SHIFT + (ptr[val16phase] * (float)ampl256/600)*voltage; *pTWI_XMT_DATA16 = (val16 >> 8)|(val16 << 8); // Инкремент фазы для 375 Гц: phase += 512.0/((float)SAMPLERATE/375); if (phase > 512.0) phase = phase - 512.0; LED(0); break; case TWI_STOP: Timer0stop(); break; } }
{ // Настройка таймера на частоту 20 кГц:
*pTIMER0_PERIOD = T0PERIOD; *pTIMER0_WIDTH = T0WIDTH; *pTIMER0_CONFIG = PWM_OUT | PULSE_HI | PERIOD_CNT | IRQ_ENA; // Привязка периферии к IVG:
*pSIC_IAR2 |= PX_IVG(TIMER0_PERIPH_INT_ID, ik_ivg7); // Регистрация обработчика прерывания:
register_handler_ex(ik_ivg7, Timer0ISR, EX_INT_ENABLE); // Установка маски прерываний:
*pSIC_IMASK0 |= TIMER0_IRQ; // Разрешение работы таймера:
*pTIMER_ENABLE = TIMEN0; } Пример применения библиотеки (фрагмент модуля main.c): void main (void) { ... // Создание таблицы синуса в SDRAM: GenSinusTable(); // Запуск ЦАП AD5667R: DAC_init(); TPT(); DAC_set_reference(REF_EXTERNAL); DAC_multiple_start(); // Главный цикл ничего не делает, только меняет амплитуду ampl256 // от 0 до 255 и обратно. Эта амплитуда используется для регулирования // синуса, данные которого посылаются в ЦАП AD5667R в обработчике // прерываний EX_INTERRUPT_HANDLER(Timer0ISR). while(true) { delay_ms(10); ChangeAmplitude(); UARTconsolePoll(); } } Тест-программа управляется командами консоли UART: [Ссылки] 1. Dual, 12-/14-/16-Bit nanoDACs® with 5 ppm/°C On-Chip Reference, I2C® Interface site:analog.com. |