Управление Платой AD5780 EVAL через микроконтроллер

Хорошо, заранее спасибо, потому что я здесь новичок. Я читаю драйверы AD57XX здесь https://wiki.analog.com/resources/tools-software/uc-drivers/renesas/ad5780 и я изо всех сил пытаюсь понять, как заставить устройство работать и понимать его правильно.

Я использую код здесь https://github.com/maxgerhardt/arduino-ad57xx-driver/blob/master/src/main.cpp для того, чтобы проверить ЦАП. У меня есть несколько вопросов о драйверах и работе в целом. Я перечислю их по пунктам, если это нормально

  1. Где в драйверах я выполняю выбор ведомого устройства и где я определяю тактовую частоту? Я просмотрел C в библиотеке драйверов, и кажется, что каждая команда, будь то чтение или запись, каждый раз выбирает ведомое/ведущее устройство? Я не вижу никакой ссылки на то, какие контакты на микроконтроллере это ссылка, хотя я не знаю, правильно ли это.
  2. Зачем мне вообще нужно читать в контрольном регистре или что-то из ЦАПА? Почему это имеет значение? Все что я хочу это вывести напряжение
  3. Как мне выполнить правильное преобразование в напряжение, которое я хочу? Команда "AD57XX_SetDacValue()" занимает много времени, но я не понимаю, как это связано с плавающим значением напряжения. Скажем, я хочу 2,35 вольта или функцию синуса от -2 до 2 Вольт, как мне сделать это преобразование?
  4. Я не знаю, как отлаживать систему в целом. Когда я запускаю пример кода, который должен выводить треугольную волновую функцию, я получаю функцию sin, которая кажется просто шумом.

, 👍-1

Обсуждение

По моему опыту, программное обеспечение analog devices eval board-это дерьмо, у меня было несколько, которые я даже не мог работать с их программным обеспечением. В конце концов я выложил свою собственную плату с микропроцессором., @Voltage Spike

@laptop2d Есть ли у вас какие-либо предложения / альтернативы о том, как запустить ЦАП? Я не могу найти правильных githubов этого запуска и я немного запаниковал, @Andrew Hardy

Примечание для читателей, интересующихся этой темой: Тот же вопрос был задан на аналоговых устройствах "EngineerZone".[here](https://ez.analog.com/data_converters/precision_dacs/f/q-a/108916/operating-ad5780-eval-board-via-microcontroller). Поэтому там могут появиться ответы / новая информация / и т. Д., @SamGibson

Я использую AD5780, но с STM32 на моей собственной плате. Что бы я сделал, так это написал свой собственный код для eval board, если вы сможете найти способ его запрограммировать., @Voltage Spike

@laptop2d Есть ли у вас документированный код, который вы используете для STM32? Я понимаю, что будут различия, но любая ссылка для меня полезна? Я недостаточно компетентен, чтобы действительно писать свои собственные драйверы, @Andrew Hardy


1 ответ


0

Где в драйверах я выполняю Выбор ведомого устройства и где я определяю тактовую частоту? Я просмотрел C в библиотеке драйверов, и кажется, что каждая команда, будь то чтение или запись, каждый раз выбирает ведомое/ведущее устройство? Я не вижу ссылки на то, какие контакты на микроконтроллере являются ссылочными, поэтому я не знаю, правильно ли что-либо из этого.

Выбор подчиненного устройства управляется функцией SPI_Write(). Он использует функцию PinMgt_PinWrite() для управления выбором подчиненного устройства, которое, в свою очередь, выбирает контакт из таблицы поиска pinMapping [].

Тактовая частота установлена в AD5780_Init().

Зачем мне вообще нужно считывать данные в Контрольном регистре или что-либо из ЦАП? Почему это имеет значение? Все, что я хочу, - это вывести напряжение

А ты-нет. Код предназначен только для демонстрационных целей. Это показывает вам, как вы могли бы запросить эти регистры. Если тебе это не нужно, тогда не делай этого.

Как мне выполнить правильное преобразование в нужное мне напряжение? Команда "AD57XX_SetDacValue()" занимает много времени, но я не понимаю, как это связано с плавающим значением напряжения. Допустим, мне нужно 2,35 Вольта или функция синуса от -2 до 2 Вольт, как мне выполнить это преобразование?

Это значение является исходным значением для установки ЦАП. Вы обращаетесь к таблице данных DAC, чтобы узнать, к чему приравнивается это значение. В этом случае диапазон составляет от \$V_{REFN}\$ до \$V_{REFP}\$. Разделите этот диапазон на 218, и у вас будет напряжение на бит.

Я не знаю, как отлаживать систему в целом. Когда я запускаю пример кода, который должен выводить волновую функцию треугольника, я получаю функцию sin, которая кажется просто шумом.

Вам нужны некоторые инструменты отладки. Такие вещи, как логический анализатор, позволяющий быстро видеть, что делают выводы ввода-вывода вашего микроконтроллера. Осциллограф можно использовать для определения наличия сигнала, но чтобы увидеть все сигналы SPI вместе, вам действительно нужен логический анализатор.

,

Спасибо вам за ответ. Я понимаю уравнение для исходной стоимости. Я понимаю, что если я отправлю 0x3FFFF (18 1, я получу максимальное значение). Чего я не понимаю, так это того, что команда AD57XX_SetRegisterValue и AD57XX_SetDacValue оба используют "длинные строки без знака", но вместо этого код просто хранит двоичный код внутри этих длинных строк? Когда я адаптирую этот код, чтобы просто отправить значение AD57XX_SetDacValue(0x3FFFF), я не получу 10 вольт, @Andrew Hardy

Я читал таблицу снова и снова, я не хочу показаться ленивым, но, похоже, это мне не помогает, @Andrew Hardy

"но тогда код просто хранит двоичный код внутри этих лонгов вместо этого?"...Что это должно означать?, @Majenko

Также в pinMapping[] нет MOSI, МИСО или SCK, как это должно работать?, @Andrew Hardy

MOSI, MISO и SCK-это аппаратные контакты SPI. Вы не имеете над ними никакого контроля. Аппаратное обеспечение SPI управляет ими., @Majenko

Разве длина не является целочисленным значением? Почему он отправляет 0x3FFFF ? Я знаю, что должен отправлять 18 бит, но я не понимаю, почему команда запрашивает долгое, @Andrew Hardy

Long-это 4-байтовая область памяти для хранения информации. Мы выбираем использовать базу 10 для представления значения, хранящегося в этой памяти. Вы могли бы с таким же успехом использовать (как и там) базу 16. В любом случае, все это просто база 2 (двоичная) в памяти., @Majenko

Могу ли я следовать какому-то учебнику или другому репозиторию github или чему-то еще для этого? Без какого-либо формального опыта EE я довольно растерян и не знаю, как что-то делать на самом деле., @Andrew Hardy