AD7476 ацп и SPI
Я пытаюсь понять, могу ли я использовать AD7476 с Arduino и SPI:
технические данные
Моя грубая идея заключается в том, что я должен поставить CS низко, затем дважды прочитать два байта с помощью SPI.transfer (), а затем снова поднять CS высоко. Это правильно?
Но похоже, что AD7476 не имеет никакого буфера, так что я думаю, что время должно быть очень точным, чтобы не пропустить ни одного бита? что делать, если SPI.transfer() происходит слишком поздно после снижения CS?
1 ответ
Лучший ответ:
Моя грубая идея заключается в том, что я должен поставить CS низко, затем дважды прочитать два байта с помощью SPI.transfer (), а затем снова поднять CS высоко. Это правильно?
Да, это верно.
Но похоже, что AD7476 не имеет никакого буфера, так что я думаю, что время должно быть очень точным, чтобы не пропустить ни одного бита?
Нет. Преобразование контролируется часами SPI. АЦП-это АЦП последовательного приближения. Это означает, что для каждого "выборочного такта" создается более точное приближение напряжения. В этом случае "часы выборки" совпадают с "часами SPI". Каждый раз, когда вы посылаете один тактовый импульс, создается новое, более точное приближение.
что делать, если SPI.transfer() происходит слишком поздно после снижения CS?
В пределах разумного, ничего предосудительного.
Способ работы АЦП SAR заключается в том, что он использует ЦАП, который управляется часами для создания напряжения. Это напряжение находится на полпути между 0В и "текущим расчетным напряжением" (в данном случае начиная с "vref" - 5В). Напряжение сравнивается с "дискретизированным" напряжением (хранящимся в крошечном конденсаторе). Это образует один бит результирующего значения. На следующих тактах напряжение ЦАП уменьшается вдвое (и, возможно, добавляется к предыдущему напряжению в зависимости от предыдущего результата сравнения) и повторяется. Это следующий бит результата. Он повторяется с напряжением, которое становится все меньше, меньше и меньше.
Каждый раз, когда вы синхронизируете один бит через интерфейс SPI, он генерирует и сравнивает следующее напряжение, генерируя следующий бит данных для чтения.
Детонационный эффект этого заключается в том, что существует как максимальная, так и минимальная частота, на которой вы можете использовать интерфейс SPI. Слишком быстро, и он не может генерировать сравнительные напряжения и проводить сравнение вовремя. Слишком медленно, и внутренний конденсатор теряет заряд из-за саморазряда и тока утечки. Вот почему на странице 8 спецификации указаны минимальная и максимальная частоты для интерфейса SPI (от 10 кГц до 20 МГц).
- Arduino/ESP8266 нет данных SPI, поступающих от MCP3008
- Взаимодействие ADS8319 с Arduino UNO
- Тактовая частота 2,4 МГц для 3-проводного SPI с использованием Arduino Mega 2560
- Проблема с настройкой Arduino Due SPI на АЦП.
- Использование Arduino для записи аналоговых сигналов с помощью SPI ADC + проблема с частотой дискретизации
- SPI-подключения к ЦАП
- Получение неправильного вывода от АЦП через SPI в Arduino Uno
- Библиотека AD7768-1 "Ардуино"
Спасибо! но как вы можете определить, являются ли прочитанные вами 2 байта фактическими данными или чтение произошло слишком поздно и вы пропустили первые биты? Отвечает ли библиотека SPI за это, синхронизируя только один раз, когда вы начинаете читать?, @Dimitri Petrucci
Вы не можете "пропустить" ни одного кусочка. Вы генерируете биты. Здесь нечего упускать. Если вы слишком медлительны (а вам придется быть *очень* медленным), то все, что у вас будет, - это снижение точности., @Majenko
Я бы добавил, что "слишком медленно" означает не слишком медленно между образцами, а во время
SPI.transfer()
. До тех пор, пока вы не установите скорость SPI слишком медленно, вы ничего не пропустите, @chrisl