Преобразователь A/D
Преобразователь A/D построен на 24-битной микросхеме AD7712 компании Analog Devices и имеет восемь независимых каналов.
У каждого канала две дифференциальные входные линии. Максимальный входной диапазон - ±10V. Его можно сузить до 1/2, 1/4, ... 1/128, запрограммировав внутренний коэффициент усиления схемы A/D равным 2, 4, ...128. При коэффициенте усиления 1 и выбранном биполярном режиме подача +10V на вход A/D даёт результат преобразования «все единицы». Подача -10V даёт «все нули». Подача 0V даёт «1», за которой следуют нули (это «среднее» значение). Разумеется, это объяснение идеализировано: оно не учитывает неизбежных ошибок преобразования.
Преобразователь A/D рассчитан на относительно медленные, но очень точные измерения. При рекомендуемой конфигурации (см. ниже) преобразователь выдаёт 250 измерений в секунду для любого выбранного канала. В любой момент времени можно выбрать только один канал.
Преобразователь A/D полностью гальванически изолирован от остальной схемы IB1004 + SB1004: питание части A/D вырабатывается изолированным импульсным источником питания, а все линии управления используют оптроны.
Входы A/D
Входы преобразователя A/D выведены на клеммные колодки 1 и 2.
Клеммная колодка 1:
| Клемма # | Назначение |
| 9 | Канал A/D 4, отрицательный вход (-) |
| 8 | Канал A/D 4, положительный вход (+) |
| 7 | Канал A/D 3, отрицательный вход (-) |
| 6 | Канал A/D 3, положительный вход (+) |
| 5 | Канал A/D 2, отрицательный вход (-) |
| 4 | Канал A/D 2, положительный вход (+) |
| 3 | Канал A/D 1, отрицательный вход (-) |
| 2 | Канал A/D 1, положительный вход (+) |
| 1 | Земля A/D (изолирована от остальной части устройства) |
Клеммная колодка 2:
| Клемма # | Назначение |
| 9 | Канал A/D 8, отрицательный вход (-) |
| 8 | Канал A/D 8, положительный вход (+) |
| 7 | Канал A/D 7, отрицательный вход (-) |
| 6 | Канал A/D 7, положительный вход (+) |
| 5 | Канал A/D 6, отрицательный вход (-) |
| 4 | Канал A/D 6, положительный вход (+) |
| 3 | Канал A/D 5, отрицательный вход (-) |
| 2 | Канал A/D 5, положительный вход (+) |
| 1 | Земля A/D (изолирована от остальной части устройства) |
Линии управления A/D
Преобразователем A/D управляют девять линий модуля EM1000 (расположенного на сетевой плате NB10x0). В таблице ниже «выход» означает выход EM1000, а «вход» - вход EM1000:
| Линия | Назначение | Соответствующая линия ввода-вывода EM1000 | Линия кабеля IC1000 |
| DO (выход) | Последовательный выход данных | GPIO13 | 27 |
| DI (вход) | Последовательный вход данных | GPIO12 | 25 |
| CLOCK (выход) | Последовательный тактовый сигнал (в простое LOW) | GPIO2 | 5 |
| C/D (выход) | Выбор регистра:
| GPIO40 | 6 |
| RFS (выход) | Синхронизация кадра приёма (активный LOW) | GPIO32 | 30 |
| TFS (выход) | Синхронизация кадра передачи (активный LOW) | GPIO33 | 28 |
| CHS0 (выход) | Выбор канала, бит 0 | GPIO41 | 8 |
| CHS1 (выход) | Выбор канала, бит 1 | GPIO42 | 10 |
| CHS2 (выход) | Выбор канала, бит 2 | GPIO43 | 12 |
В преобразователе A/D есть 24-битный регистр конфигурации и 24-битный регистр данных, в котором хранится результат преобразования. Доступ к этим регистрам осуществляется через последовательный интерфейс из пяти линий ввода-вывода:
- Две линии - RFS и TFS - служат для выбора типа транзакции. В неактивном состоянии на них HIGH. Перед транзакцией чтения линию RFS нужно установить в LOW и удерживать в LOW всё время транзакции. Перед транзакцией записи в LOW нужно установить линию TFS и удерживать её в LOW всё время транзакции.
- Линия CLOCK используется и для записи в преобразователь, и для чтения из него. В неактивном состоянии на ней LOW. Каждая «транзакция» чтения или записи состоит из 24 тактовых импульсов, после чего на линии снова LOW. Микросхему можно также запрограммировать на 16-битное разрешение, и тогда каждая транзакция состоит из 16 импульсов.
- Линия DO служит для отправки данных в преобразователь (записи в регистр конфигурации). Каждый бит данных нужно выставлять на линии DO, пока на CLOCK держится LOW. Это значит, что первый, старший бит данных нужно выставить на DO до первого тактового импульса транзакции. Переход CLOCK из LOW в HIGH фиксирует бит в преобразователе.
- Линия DI выполняет двойную функцию. Пока линия RFS не переведена в LOW, вход DI показывает, готовы ли новые данные измерения. Пока преобразователь не готов, на DI - HIGH; когда новые данные становятся доступны, на ней появляется LOW. После перевода RFS в LOW линия DI служит для получения данных от преобразователя (чтения регистра данных). Старший бит считываемого значения появляется на DI сразу после того, как на RFS устанавливается LOW. Следующий бит данных преобразователь выдаёт при каждом переходе линии CLOCK из HIGH в LOW. Советуем записывать данные в приложении, пока на линии CLOCK держится HIGH.
- Линия C/D определяет, с каким регистром идёт обмен: с регистром конфигурации (C/D в LOW) или с регистром данных, содержащим результат преобразования (C/D в HIGH). Линия C/D должна оставаться неизменной (HIGH или LOW) всё время транзакции.
«Транзакции» чтения и записи показаны на диаграмме ниже.

У преобразователя A/D восемь входов, а для выбора канала служат три линии управления - CHS2, CHS1 и CHS0. В любой момент времени можно выбрать только один канал.
Подготовка к обмену с преобразователем A/D
Прежде чем начать обмен данными с преобразователем A/D, нужно настроить некоторые линии GPIO модуля EM1000 как выходы. Это линии CLOCK, DO, C/D, TFS, RFS, CHS0, CHS1 и CHS2. Иными словами, как выходы нужно настроить все линии, кроме DI.
Запись в регистр конфигурации
Чтобы записать данные в регистр конфигурации, выполните следующие шаги:
- Установите на линии C/D LOW: так выбирается доступ к регистру конфигурации.
- Установите на линии TFS LOW: так указывается, что это операция записи (на RFS должен оставаться HIGH).
- Выставьте на линии DO значение старшего бита слова конфигурации.
- Установите на линии CLOCK HIGH.
- Установите на линии CLOCK LOW. Это завершает первый тактовый импульс.
- Сформируйте ещё 23 тактовых импульса, каждый раз выставляя на линии DO следующий бит, пока на CLOCK держится LOW.
- Установите на линии TFS HIGH. Запись завершена.
Инициализация преобразователя A/D
В техническом описании AD7712 вы найдёте множество вариантов конфигурации. Не перепечатывая техническое описание, приводим краткую информацию:
| bit23 | bit22 | bit21 | bit20 | bit19 | bit18 | bit17 | bit16 | bit15 | bit14 | bit13 | bit12 |
| MD2 | MD1 | MD0 | G2 | G1 | G0 | CH | PD | WL | X | BO | BU |
| bit11 | bit10 | bit9 | bit8 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
| FS11 | FS10 | FS9 | FS8 | FS7 | FS6 | FS5 | FS4 | FS3 | FS2 | FS1 | FS0 |
- Поле MD2-0 равно 000 для нормальной работы или 001 для самокалибровки. Есть и другие режимы конфигурации, но IB1004 их не поддерживает.
- Поле G2-0 задаёт коэффициент усиления A/D. Измеряемый сигнал предварительно усиливается в соответствии с ним. Запись 000 выбирает усиление 1, 001 - усиление 2, ... 111 - усиление 128.
- Поле CH выбирает канал; для правильной работы IB1004 в нём должна быть 1. Не путайте этот выбор канала со входным селектором каналов IB1004, описанным выше.
- Бит отключения питания PD должен быть равен 0.
- Бит длины слова WL должен быть равен 0 для 16-битного разрешения (достаточного для большинства приложений) или 1 для 24-битного разрешения.
- Бит тока обрыва BO должен быть равен 0.
- Бит B/U должен быть равен 0, чтобы выбрать биполярный режим.
- Биты выбора фильтра FS11-0 нужно задать в соответствии с требованиями вашего приложения. Мы часто используем значение 4E (hex). Если прочитать страницу 10 технического описания микросхемы, станет ясно, что оно соответствует частоте данных 250Hz (раз в секунду) и эффективному разрешению 15 бит. Это хороший компромисс между скоростью и разрешением. Разрешение 15 бит выбрано потому, что часть D/A изделия имеет разрешение 14 бит.
Чтобы инициализировать преобразователь A/D, при запуске запишите нужное слово конфигурации. Для описанного выше эффективного разрешения 15 бит запишите шестнадцатеричное значение 22004E. Оно настроит преобразователь и запустит процесс самокалибровки (см. ниже).
Необязательная самокалибровка
Если сначала откалибровать преобразователь A/D, он будет работать точнее. Чтобы запустить самокалибровку, установите биты MD2-0 регистра конфигурации в 001. Самокалибровка, как следует из названия, - автоматический процесс, не требующий внешнего вмешательства. Калибровка занимает некоторое время. Чтобы определить, когда она закончилась, опрашивайте линию DI после записи в регистр конфигурации:
- Как только линия TFS переходит в HIGH, отмечая конец транзакции записи, линия DI начинает показывать состояние преобразователя.
- Пока преобразователь занят, на линии DI - HIGH.
- Когда калибровка завершена, на линии DI появляется LOW.
Устанавливать MD2-0 = 000 после калибровки не нужно - это происходит автоматически. Так что, по сути, вся настройка преобразователя A/D может состоять из записи 22004E hex (или другого подходящего слова конфигурации) и ожидания LOW на DI.
Смена каналов
Чтобы сменить канал, выполните следующие шаги:
- Если нужный канал ещё не выбран, выберите его линиями управления CHS2-0. Код 000 выбирает канал 1, 001 - канал 2, ... 111 - канал 8.
- После смены канала отбросьте результат первого преобразования: при смене канала измерение может оказаться неверным. Второе измерение будет содержать правильные данные. Можно также заставить программу подождать время, равное двум периодам измерения A/D. Период преобразования зависит от настройки фильтра. Для фильтра, настроенного на 250Hz, период преобразования равен 1/250Hz = 4ms. Значит, приложению нужно подождать 8ms, прежде чем станут доступны правильные данные для вновь выбранного канала.
Получение результата преобразования A/D
Регистр данных преобразователя A/D обновляется с частотой преобразования (для рекомендуемой нами настройки это 1/250Hz = 4ms). Таким образом, новый результат измерения доступен каждые 4ms. Вы всегда читаете самый свежий результат преобразования.
Считывание можно начинать только тогда, когда преобразователь A/D готов. Если начать транзакцию чтения, когда преобразователь не готов, данные будут недостоверными (вы прочитаете «все нули» или «все единицы»). Для чтения следуйте такому алгоритму:
- Пока на линии RFS HIGH, считывайте состояние линии DI. Если на ней HIGH, преобразователь A/D не готов, и нужно подождать.
- Продолжайте опрашивать линию DI, пока на ней не появится LOW. Это означает, что можно начинать транзакцию чтения.
- Установите на линии C/D HIGH: так выбирается доступ к регистру данных.
- Установите на линии RFS LOW: так указывается, что это операция чтения (на TFS должен оставаться HIGH).
- Установите на линии CLOCK HIGH и запишите состояние линии DI - это значение старшего бита.
- Установите на CLOCK LOW - это завершает первый такт.
- Выполните ещё 23 или 15 тактов (в зависимости от значения, заданного в бите WL регистра конфигурации), каждый раз записывая состояние линии DI, когда на CLOCK HIGH.
- Установите на линии RFS HIGH. Чтение завершено.
Помните, что обсуждавшееся выше «эффективное разрешение» никак не связано с числом бит, которое нужно считать из преобразователя. Это число равно 24 или 16 в зависимости от бита WL регистра конфигурации.
Ограничения тактовой частоты
Преобразователь A/D оптически изолирован от остальной части устройства, поэтому на всех линиях интерфейса стоят оптроны. Оптроны - относительно медленные приборы, что ограничивает скорость переключения тактовой линии. Минимальный период тактового сигнала - 200µs. Оба полупериода должны быть не короче 100µs. Это значит, что результат преобразования можно получить за 200µs * 24 = 4.8ms или 200µs * 16 = 3.2ms.