AD7476 ацп и SPI

Я пытаюсь понять, могу ли я использовать AD7476 с Arduino и SPI:

технические данные

Моя грубая идея заключается в том, что я должен поставить CS низко, затем дважды прочитать два байта с помощью SPI.transfer (), а затем снова поднять CS высоко. Это правильно?

Но похоже, что AD7476 не имеет никакого буфера, так что я думаю, что время должно быть очень точным, чтобы не пропустить ни одного бита? что делать, если SPI.transfer() происходит слишком поздно после снижения CS?

, 👍1


1 ответ


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

2

Моя грубая идея заключается в том, что я должен поставить CS низко, затем дважды прочитать два байта с помощью SPI.transfer (), а затем снова поднять CS высоко. Это правильно?

Да, это верно.

Но похоже, что AD7476 не имеет никакого буфера, так что я думаю, что время должно быть очень точным, чтобы не пропустить ни одного бита?

Нет. Преобразование контролируется часами SPI. АЦП-это АЦП последовательного приближения. Это означает, что для каждого "выборочного такта" создается более точное приближение напряжения. В этом случае "часы выборки" совпадают с "часами SPI". Каждый раз, когда вы посылаете один тактовый импульс, создается новое, более точное приближение.

что делать, если SPI.transfer() происходит слишком поздно после снижения CS?

В пределах разумного, ничего предосудительного.

Способ работы АЦП SAR заключается в том, что он использует ЦАП, который управляется часами для создания напряжения. Это напряжение находится на полпути между 0В и "текущим расчетным напряжением" (в данном случае начиная с "vref" - 5В). Напряжение сравнивается с "дискретизированным" напряжением (хранящимся в крошечном конденсаторе). Это образует один бит результирующего значения. На следующих тактах напряжение ЦАП уменьшается вдвое (и, возможно, добавляется к предыдущему напряжению в зависимости от предыдущего результата сравнения) и повторяется. Это следующий бит результата. Он повторяется с напряжением, которое становится все меньше, меньше и меньше.

Каждый раз, когда вы синхронизируете один бит через интерфейс SPI, он генерирует и сравнивает следующее напряжение, генерируя следующий бит данных для чтения.

Детонационный эффект этого заключается в том, что существует как максимальная, так и минимальная частота, на которой вы можете использовать интерфейс SPI. Слишком быстро, и он не может генерировать сравнительные напряжения и проводить сравнение вовремя. Слишком медленно, и внутренний конденсатор теряет заряд из-за саморазряда и тока утечки. Вот почему на странице 8 спецификации указаны минимальная и максимальная частоты для интерфейса SPI (от 10 кГц до 20 МГц).

,

Спасибо! но как вы можете определить, являются ли прочитанные вами 2 байта фактическими данными или чтение произошло слишком поздно и вы пропустили первые биты? Отвечает ли библиотека SPI за это, синхронизируя только один раз, когда вы начинаете читать?, @Dimitri Petrucci

Вы не можете "пропустить" ни одного кусочка. Вы генерируете биты. Здесь нечего упускать. Если вы слишком медлительны (а вам придется быть *очень* медленным), то все, что у вас будет, - это снижение точности., @Majenko

Я бы добавил, что "слишком медленно" означает не слишком медленно между образцами, а во время SPI.transfer(). До тех пор, пока вы не установите скорость SPI слишком медленно, вы ничего не пропустите, @chrisl