SPI-подключения к ЦАП

Я надеюсь построить контур обратной связи для лазера, используя набор микросхем UC32 и аналого-цифровой преобразователь (у меня есть оценочная плата AD5780). Я читал библиотеку Digilint SPI, но, признаюсь, я довольно растерян.

(Я думаю, что это относится к Arduino, потому что я использую API Arduino. Микроконтроллер, который я использую, по сути, представляет собой Arduino, поэтому я не вижу никакой разницы.)

Я хотел бы вывести на ЦАП что-то простое, например цифровое переменное напряжение, и заставить его преобразовать его, но, насколько я понимаю, это здесь я просто использую команду digitalWrite, которая по сути является двоичной. Как передать что-то более сложное, чтобы ЦАП преобразул его?

Аналогично, как мне заставить ЦАП делать обратное, АЦП, где он считывает напряжение и отправляет Arduino цифровой сигнал через контакты SPI?

, 👍2

Обсуждение

Какое это имеет отношение к Ардуино? Мне кажется, что у вас есть UC32 с микроконтроллером PIC32, и вам нужно написать библиотеку для AD5780, используя периферийное устройство SPI чипа., @Maximilian Gerhardt

Кроме того, зачем вам писать свой собственный драйвер, если у Analog Devices есть эталонный драйвер по адресу https://wiki.analog.com/resources/tools-software/uc-drivers/renesas/ad5780#driver_description, где вам нужно только реализовать SPI_Init , SPI_Write и SPI_Read самостоятельно, используя библиотеку SPI вашей платы/платформы? :), @Maximilian Gerhardt

@MaximilianGerhardtchipKIT использует API Arduino. Это такой же Arduino, как esp8266 или крошечный., @Majenko

@MaximilianGerhardt Пробовали ли вы раньше использовать драйвер AD? Я здесь, потому что попробовал это, и оно кажется сломанным. Он запрашивает файлы, которые не включены. Они кажутся бесполезными, но даже если вы удалите эти команды #include, они будут ссылаться на множество неопределенных функций. Возможно, это просто отсутствующий файл, но он кажется непригодным для использования. Если у вас есть какой-либо опыт с этим, я мог бы открыть другую тему и попытаться исправить это., @Andrew Hardy

@AndrewHardy Конечно, я загружу библиотеку и интерфейс с классом Arduino SPI, чтобы теоретически вы могли сразу же добавить результат. Я сообщу вам, если столкнусь с проблемой. Если библиотека требует функций, выходящих за рамки того, что они говорят, это плохая библиотека., @Maximilian Gerhardt

@AndrewHardy Готово. https://github.com/maxgerhardt/arduino-ad57xx-driver, @Maximilian Gerhardt

Итак, вы что-то компилируете или делаете по-другому, чего я не понимаю. Когда я нажимаю «Проверить» ваш код, я получаю ошибки https://imgur.com/BKsIk2K, связанные с неопределенными ссылками на команды в драйверах. Это отличается от ошибок, если у меня просто нет файла, поэтому я не знаю, что они означают., @Andrew Hardy

Чтобы это работало, вы должны поместить папку ad57xx_generic_driver https://github.com/maxgerhardt/arduino-ad57xx-driver/tree/master/lib в папку библиотеки вашего Arduino. (Кстати, изначально это проект PlatformIO) @AndrewHardy, @Maximilian Gerhardt

Нет, проблема не в этом. Если бы его не было в папке библиотек, я бы получил ошибку в строке #include<AD57XX.h>. Мне пришлось удалить эти файлы из каталога «include», чтобы Arduino распознал их. https://imgur.com/a/QVxW0hi Это моя файловая структура на данный момент, @Andrew Hardy

@AndrewHardy Тогда по какой-то причине файлы cpp не компилируются. Он находит заголовки, но не компилирует их при реализации. Что-то все еще не так со структурой папок. Попробуйте поместить все исходники и заголовки непосредственно в один файл, как показано в https://www.arduino.cc/en/hacking/libraries., @Maximilian Gerhardt

@MaximilianGerhardt, https://imgur.com/a/WPskxYP Я ушел от этого, чтобы поработать над другими вещами, но сейчас вернулся. Подключив ЦАП, я получаю функцию греха. Кажется, он не реагирует на числа, которые я меняю в приведенном вами примере кода. Как мне отладить подобные вещи? Я считаю, что это изображение не то, что я должен видеть., @Andrew Hardy


1 ответ


Лучший ответ:

3

Я хотел бы вывести на ЦАП что-то простое, например цифровое переменное напряжение, и заставить его преобразовать его, но, насколько я понимаю, я просто использую команду digitalWrite, которая по сути является двоичной. Как передать что-то более сложное, чтобы ЦАП его конвертировал?

SPI — это протокол. Для передачи информации он использует цифровые сигналы в сочетании с временем.

Чтобы использовать DSPI, вам необходимо сначала определить объект SPI

DSPI0 SPI;

С этого момента это то же самое, что использование библиотеки SPI Arduino.

Начни

SPI.begin();

Затем передайте правильные команды (найденные в таблице данных ЦАП), чтобы установить выходное напряжение

digitalWrite(10, LOW);
SPI.transfer(0x43);
SPI.transfer(0x1A);
digitalWrite(10, HIGH);

Значения приведены только в качестве примера. Номер 10 — это контакт выбора микросхемы ЦАП, и значения, используемые при передаче (сколько бы их ни было необходимо), необходимо найти в таблице данных.

Если вы хотите использовать только контакты, связанные с DSPI0, вместо этого вы можете использовать библиотеку SPI (которая поддерживает только один канал SPI — у uC32 их два), и в этом случае это идентично работе с библиотекой SPI Arduino.< /п>

Аналогично, как мне заставить ЦАП делать обратное, АЦП, где он считывает напряжение и отправляет Arduino цифровой сигнал через контакты SPI?

Вы этого не делаете. ЦАП есть ЦАП, а АЦП есть АЦП. Они не взаимозаменяемы.

Для работы АЦП просто используйте любой из контактов от A0 до A11 и функцию analogRead().

,

спасибо за ответ! Вы уже помогали мне раньше, поэтому я ценю терпение. Я читаю уже некоторое время, могу ли я рассказать вам кое-что? Я ничего не нашел в таблице данных, но какие байты я записываю, они просто получают bit_number = (Pos REF V - Neg REF V) / 2^(18) и преобразуются в байты? Кажется, тоже нет команды для фактического преобразования? Судя по тому, что я читал, когда я отправляю байты, они автоматически преобразуются в аналоговое напряжение и выводят его?, @Andrew Hardy

Во-вторых, как вы думаете, стоит ли пытаться запустить драйверы AD? Отсутствующий файл — ior5f100le.h. Это стандартная библиотека Arduino, которой мне не хватает? В драйвере тоже есть команды чтения данных из реестра, смысл которых мне не совсем понятен., @Andrew Hardy

Этот ЦАП использует 3-байтовый (24-битный) протокол управления. На странице 21 и далее в таблице данных описаны команды. Вам необходимо сначала отправить правильные команды для включения ЦАП (используя «Регистр управления»). Однажды вы отправляете значение в определенный регистр (не реальный регистр, поэтому оно не указано в списке регистров) и переключаете LDAC (либо вывод, либо бит регистра) для вывода этого значения. Я никогда не слышал о ior5f100le.h. Вероятно, что-то связано с конкретной платой разработки., @Majenko