Многие современные прецизионные АЦП имеют последовательный интерфейс (SPI) для связи с микроконтроллерами, микропроцессорами, сигнальными процессорами, в том числе на основе ПЛИС FPGA. Благодаря этому АЦП легко подключить к контроллеру со стандартным SPI-интерфейсом. Особенности такого подключения рассмотрены в этой статье.
С.Кси
Вопрос:
Можно ли подключить АЦП с нестандартным последовательным интерфейсом к микроконтроллеру со стандартным SPI-интерфейсом?
Ответ:
Да, можно, но при определенной доработке такого интерфейса.
Некоторые новые АЦП имеют стандартные SPI- интерфейсы, наряду с ними выпускаются АЦП, использующие нестандартный 3-проводной или 4-проводной SPI-интерфейс для обеспечения более высокой пропускной способности. Например, семейство AD7616, AD7606 и AD7606B имеет две или четыре линии (шины) для передачи данных с целью обеспечения более высокой пропускной способности в последовательном режиме обмена данными. Семейства AD7768, AD7779 и AD7134 имеют несколько линий передачи данных и работают в режиме ведущего устройства. Пользователи, как правило, сталкиваются с трудностями при сопряжении микроконтроллера с такими преобразователями.

Рис. 1. АЦП AD7768 в режиме ведущего устройства с двумя последовательными шинами данных
SPI-интерфейс – это синхронный полнодуплексный интерфейс, работающий в режиме master/slave (ведущего/ведомого устройства). Данные от ведущего устройства (master) или ведомого устройства (slave) синхронизируются по фронту или спаду тактового импульса. Как ведущие, так и ведомые устройства могут передавать данные по интерфейсу одновременно. На рис. 2 показано типовое 4проводное соединение АЦП с микроконтроллером по SPI-интерфейсу.
Чтобы начать считывание данных по стандартному SPI-интерфейсу, контроллер должен по тактовому импульсу выбрать АЦП (сигнал CS, низкий уровень которого обычно является активным). Поскольку SPI-интерфейс является полнодуплексным интерфейсом, контроллер и АЦП могут одновременно выводить данные по шинам MOSI/DIN и MISO/DOUT соответственно.

Рис. 2. Соединение АЦП и микроконтроллера по стандартному SPI-интерфейсу
SPI-интерфейс контроллера предоставляет пользователю гибкость в выборе фронта или спада тактового импульса для выборки и/или сдвига данных. Для надежной связи между ведущим и ведомым устройствами, пользователи должны следовать спецификациям по синхронизации цифрового интерфейса микроконтроллера и АЦП, которые приведены в технической документации (data sheet) на применяемые микросхемы.
Если SPI-интерфейс микроконтроллера и последовательный интерфейс АЦП имеют стандартный режим синхронизации, у пользователей не возникает проблем при проектировании печатной платы устройства в целом и разработке встроенного программного обеспечения для поддержки работы такого интерфейса. Но некоторые новые АЦП содержат нестандартные последовательные интерфейсы, которые не отвечают общепринятым требованиям к синхронизации работы SPI-интерфейса. На первый взгляд кажется невозможным, чтобы микроконтроллер или сигнальный процессор считывал данные через нестандартный последовательный порт АЦП AD7768, как показано на рис. 3.
Для преодоления такого неудобства, вызванного различиями в схемах последовательных интерфейсов АЦП и микроконтроллера (сигнального процессора) автором статьи предлагаются следующие подходы для организации связи таких устройств:
- Решение 1: Микроконтроллер (MCU) высту пает в качестве ведомого устройства и взаимодействует по одной шине DOUT с АЦП, который является ведущим устройством
- Решение 2: Микроконтроллер (MCU) выступает в качестве ведомого устройства и взаимодействует по двум шинам DOUTс АЦП, который является ведущим устройством
- Решение 3: Микроконтроллер (MCU) выступает в качестве ведомого устройства и взаимодействует через DMA-порт с АЦП, который является ведущим устройством
- Решение 4: Микроконтроллер (MCU) выступает в качестве ведущего и ведомого устройства для считывания данных по двум шинам DOUT.
В качестве примера рассмотрим считывание данных АЦП AD7768 по SPI-интерфейсу (шина DOUT) микроконтроллером STM32F429. Как видно из рис. 3, по каналу 0 – 7 данные считываются из АЦП только по шине DOUT, причем АЦП AD7768/AD7768-4 работает как ведущее устройство и передает данные, тактовые и служебные сигналы DCLK и DRDY в микроконтроллер, как в ведомое устройство. Отметим, что семейство микроконтроллеров STM32Fxxx широко используется во многих приложениях. Эти микроконтроллеры имеют несколько портов SPI, которые могут быть запрограммированы как ведущие или ведомые с стандартными режимами синхронизации. Представленные ниже рекомендации могут, кроме того, применяться в других микроконтроллерах с 8-битным, 16-битным или 32-битным размерами кадра.

Рис. 3. Временные диаграммы сигналов считывания данных по DOUT0-шине АЦП AD7768
Преобразователи AD7768 / AD7768-4 – это 8- и 4-канальные сигма-дельта АЦП с модулятором и цифровым фильтром на канал, что позволяет синхронизировать выборку сигналов на входах АЦП. Они имеют динамический диапазон входного сигнала до 108 дБ при максимальной входной полосе пропускания 110.8 кГц, интегральную нелинейность не хуже ±2 ppm, погрешность смещения нуля не более ±50 мкВ и погрешностью усиления не более ± 30 ppm. Пользователь AD7768 / AD7768-4 может зада вать ширину полосы пропускания входного сигнала, скорость передачи выходных данных и один из трех режимов питания, чтобы оптимизировать его исходя из допустимых шумов и энергопотребления. Гибкость АЦП AD7768/AD7768-4 позволяет им стать базовыми устройствами для измерения сигналов низкого уровня. К сожалению, последовательный интерфейс AD7768 является нестандартным, поэтому АЦП AD7768 работает как ведущее устройстве при связи с микроконтроллером. Как правило, разработчики при сопряжении такого АЦП с микроконтроллером должны использовать дополнительный промежуточный контроллер, выполненный на ПЛИС типа FPGA/CPLD. Пример такой реализации приведен на рис. 4, где АЦП AD7768 и дополнительный контроллер на ПЛИС типа 32F429IDISCOVERY расположены на общей оценочной плате, причем данные, снимаемые с 8-канального АЦП, выводятся на одну шину DOUT0.

Рис. 4. Пример вывода данных АЦП AD7768 на микроконтроллер STM32F429 по шине данных DOUT0
Проблемы, которые необходимо учесть при организации такой связи, состоят в следующем:
- АЦП AD7768 работает как ведущее устройство, поэтому микроконтроллер STM32F429Iдолжен быть запрограммирован как ведомое устройство
- высокий уровень сигнала DRDY- это один период длительности тактового сигнала DCLK, который не является типичным сигналом CS.

Рис. 5. Считывание данных с выхода АЦП AD7768 по нестандартному последовательному интерфейсу
- по сигналу DCLKданные непрерывно выводятся из АЦП, а сигнал DRDYимеет низкий уровень, когда завершен вывод всех разрядов последовательных данных, рис. 5.
Решение 1: Микроконтроллер используется в качестве ведомого устройства, а АЦП – в качестве ведущего с одной шиной данных DOUT:
- Необходимо настроить микроконтроллер STM32F429, его SPI-порт, например, SPI4, в качестве ведомого устройства для считывания данных.
- Необходимо подключить вывод сигнала DRDYАЦП AD7768 к входному выводу внешнего прерывания микроконтроллера STM32F429 (EXTI0 и NSSSPICS). Фронт сигнала DRDYзапустит обработчик EXTI0 для разрешения начала приема данных микроконтроллером через SPI-порт по первому спаду сигнала DCLKс момента, когда уровень сигнала DRDYперейдет в низкое состояние.
- После приема всех данных от каналов 0 – 7 SPI-порт следует отключить, чтобы запретить чтение иных дополнительных данных.
Листинг программы, поддерживающей работу связи АЦП с микроконтроллером в этом режиме, содержится в оригинале статьи
Решение 2: Микроконтроллер используется в качестве ведомого устройства, а АЦП – в качестве ведущего с двумя шинами данных DOUT:
В первом случае (решение 1) шина данных DOUT0 используется для вывода всех данных, снимаемых с 8 входов АЦП. Таким образом, чтение данных ограничено частотой 8 кГц. Как следует из рис. 1, выходы каналов 0…3 подключены к шине DOUT0 и выходы каналов 4…7 подключены к шине DOUT1, что позволяет увеличить частоту съема данных с выхода АЦП в два раза. Схема подключения АЦП к микроконтроллеру для этого случая приведена на рис. 6. При этом частота передачи данных увеличивается до 16 кГц. Листинг программы, поддержи вающей работу в таком режиме, содержится в оригинале статьи.

Рис. 6. Схема подключения АЦП AD7768 к микроконтроллеру STM32F429 с выводом данных по двум шинам DOUT0 и DOUT1
Решение 3: Микроконтроллер используется в качестве ведомого устройства, а АЦП – в качестве ведущего устройства и связан с микроконтроллером через DMA-порт:
Прямой доступ к памяти (DMA) используется для обеспечения высокоскоростной передачи данных между периферийными устройствами и памятью, а также между памятью и памятью двух цифровых устройств. Данные могут быть быстро записаны в память микроконтроллера через DMA-порт без обращения к микроконтроллеру. Листинг программы, поддерживающей работу с DMA-портом, содержится в оригинале статьи.
Решение 4: Микроконтроллер используется как ведущее и ведомое устройство для считывания данных с двух шин DOUT:
АЦП с высокой пропускной способностью поддерживает работу с внешними устройствами по двум, четырем и даже восьми линиям для ускорения считывания данных в последовательном режиме, рис. 7. Для микроконтроллеров с двумя или более SPI-портами предусмотрен режим быстрого чтения данных. В этом случае частота считывания данных может составить 800 кГц. Листинг программы, поддерживающей такой режим работы преобразователя и микроконтроллера, содержится в оригинале статьи.

Рис. 7. Схема контроллера для считывания данных АЦП с шин DOUTA и DOUTB по нескольким SPI-портам
На рис. 8 приведена осциллограмма с визуализацией сигналов данных и служебных сигналов BUSY и SCLK для АЦП AD7606B при считывании данных микроконтроллером.

Рис. 8. Осциллограмма сигналов данных и служебных сигналов BUSY и SCLK при работе АЦП по последовательному SPI-интерфейсу
ВЫВОДЫ
В статье рассмотрены подходы и даны рекомендации к использованию SPI-интерфейса микроконтроллера для считывания данных высокоточных и высокопроизводительных АЦП с нестандартными последовательными интерфейсами. Эти подходы целесообразно использовать при работе с новыми сигма-дельта АЦП, например, семейства AD7616, AD7606 и семейства AD7768, AD7779 и AD7134 для повышения пропускной способности канала связи.