Что тебе нужно знать

Как добавить АЦП в Raspberry Pi: что нужно знать Изображение 1

Однако не отчаивайтесь, у вас есть много других вариантов, которые стоит рассмотреть. Вы можете начать работу с Raspberry Pi и внешним АЦП.

Почему нам нужно больше информации?

Реальный мир полон явлений, которые при наличии подходящей схемы можно легко описать с помощью напряжения. Преобразуйте эти напряжения в цифровую форму, и вы сможете записывать их, манипулировать ими и использовать для управления другими параметрами и устройствами.

Возможно, вы хотите отслеживать влажность почвы, температуру в теплице или вес хомяка. Возможно, вы хотите добавить к своему Pi регулятор громкости, создать целый массив фейдеров или спроектировать джойстик с нуля… Возможности практически безграничны.

Опции АЦП

Итак, какой АЦП лучше всего подойдет новичкам?

Микросхема MCP3004 — один из самых популярных и простых вариантов от Microchip. У вас будет 4 или 8 10-битных каналов со скоростью чтения до 200 kSPS. С другой стороны, существуют устройства Texas Instruments ADS111x, которые читают 16 бит со скоростью 860 SPS. Таким образом, существует компромисс между скоростью и точностью (и, конечно, это включает в себя цену).

Многие микроконтроллеры оснащены встроенным АЦП. ATMega, которую вы найдете в обычном Arduino, обеспечивает несколько 10-битных каналов. Это то, что позволяет Arduino предоставлять аналоговые входы, чего не может сделать Raspberry Pi. Если в настройке задействован Arduino и 10 бит достаточно для точности, то это может быть самый простой способ.

Что такое усилитель с программируемым усилением?

Этот чип обладает некоторыми интересными функциями, включая усилитель с программируемым усилением (PGA). Он позволит установить нужный диапазон значений согласно спецификации, вплоть до долей вольта. Учитывая количество значений, которые могут представлять 16 бит, это позволяет обнаружить различия всего в несколько микровольт.

Преимущество здесь в том, что вы можете изменить усиление в середине программы. Другие чипы, такие как MCP3004, поставляются с дополнительной батареей, поэтому вы можете обеспечить опорное напряжение.

Что такое мультиплексирование?

Мультиплексор (или мультиплексор) — это переключатель, который позволяет считывать несколько входных сигналов с помощью одного АЦП. Если ваш чип АЦП имеет несколько входных контактов, будет происходить внутреннее мультиплексирование. Мультиплексор ADS1115 имеет четыре входа, которые можно выбрать через внутренние регистры.

Работа с регистрами

ADS1115 предлагает эти и некоторые другие возможности. Вы можете управлять мультиплексором, регулировать усиление, активировать встроенный компаратор, изменять частоту дискретизации и переводить устройство в спящий режим с низким энергопотреблением — и все это с помощью нескольких переключателей. .

Где находятся переключатели или кнопки активации? Они поставляются пакетами в виде очень маленьких кусочков памяти, называемых регистрами. Чтобы включить определенную функцию, вы просто устанавливаете соответствующий бит в 1, а не в 0.

Взгляните на таблицу данных ADS111x, вы обнаружите, что эти модели имеют 4 регистра, включая регистры конфигурации, которые управляют работой устройства.

Как добавить АЦП в Raspberry Pi: что нужно знать Рисунок 2

Например, биты с 14 по 12 управляют мультиплексором. Используя эти три бита, вы можете выбрать одну из восьми конфигураций. Вам нужно здесь число «100», которое будет определять разницу между входным нулем и землей. С другой стороны, биты с 7 по 5 управляют частотой дискретизации. Если вам нужна частота до 860 выборок в секунду, вы можете установить для них значение «111».

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

Здесь может возникнуть путаница. В этом случае двоичный файл представляет не значение, а значения отдельных переключателей. Вы можете выразить эти переменные в виде большого числа в десятичной или шестнадцатеричной форме. Но вам следует использовать двоичную версию, которую легче читать.

Подключите провод

Вы можете подключить это устройство прямо к макетной плате. Вход положительного напряжения принимает напряжение от 2 до 5,5 В, что означает, что линия 3,3 В на Raspberry Pi будет работать нормально.

Подключите входы SDA и SCL к их аналогам на RPi и проделайте то же самое с землей и напряжением 3,3 В. Возьмите потенциометр между линиями земли и напряжения, затем поместите средний вывод на первый вход АЦП. Это все, что вам нужно, чтобы начать!

Обработка I2C

Разные АЦП работают по разным протоколам. В случае с ADS1115 мы будем использовать I2C.

В следующем примере взаимодействие с ADC будет осуществляться с использованием Python. Но прежде чем это сделать, вам нужно его настроить. Последние версии ОС Raspberry Pi сделали это очень просто. Перейдите в «Настройки» > «Конфигурация Raspberry Pi». Затем на вкладке «Интерфейсы» включите I2C.

Чтобы проверить, что все работает, откройте терминал и запустите:

судо i2cdetect -y 1

Эта команда выведет сетку. Предполагая, что все работает и вы все подключили правильно, вы должны увидеть новое значение в прицельной сетке. Это адрес АЦП. Помните, что это шестнадцатеричное значение, поэтому вам нужно добавить к префиксу «0x» при его использовании в приведенном ниже коде. Вот это 0x48:

Как добавить АЦП в Raspberry Pi: что нужно знать Рисунок 3

Получив адрес, вы можете использовать библиотеку SMBus для отправки команд I2C. Здесь вы будете иметь дело с двумя методами. Первый — write_word_data(), который принимает три аргумента: адрес устройства, регистр, в который вы записываете, и значение, которое вы хотите записать.

Второй — read_word_data(), который принимает только адреса устройств и регистров. АЦП будет непрерывно считывать напряжение и сохранять результаты в регистре преобразования. С помощью этого метода вы можете получить содержимое этого регистра.

Вы можете немного украсить результат, а затем распечатать его. Прежде чем вернуться к началу цикла, введите небольшую задержку. Это гарантирует, что вы не будете перегружены данными.

из импорта smbus Время импорта SMBus addr = 0x48 bus = SMBus(1) CONFIGREG = 1 CONVERSIONREG = 0 bus.write_word_data(addr, CONFIGREG, (0b00000100 # đọcthanh ghi
b = bus.read_word_data(адрес, CONVERSIONREG)
# hoán đổi hai byte
б = ((б и 0xFF) > 8) и 0xFF)
# trừ một nửa phạm vi để đặt tiếp đất về 0
б -= 0x8000
# Chia kết quả theo phạm vi để có giá trị nằm giữa 0 и 1
б /= ТОП
# гий хон 1
б = мин(б, 1)
# phía dưới cùng là 0
б = макс(б, 0)
#хай ву три тхп пхан
b = round(b, 2) print(b) time.sleep(.01)

Вы почти закончили. Сопоставьте диапазон значений, которые вы получаете, с нужным вам значением, а затем усеките желаемое количество десятичных знаков. Вы можете настроить функцию печати так, чтобы печатать новое значение только в том случае, если оно отличается от последнего значения.

Управление шумом

Это неотъемлемый недостаток использования 16 бит вместо 10 бит: небольшой шум более заметен.

Подключив соседний вход (вход 1) к земле и переключив режим, чтобы можно было сравнивать первый и второй входы, можно получить гораздо более стабильные результаты. Вы также можете заменить эти шумопоглощающие межблочные кабели на небольшие кабели и добавить несколько конденсаторов, пока вы это делаете. Значение вашего потенциометра также может иметь значение.

Кроме того, у вас есть варианты программного обеспечения. Вы можете создать скользящее среднее или просто игнорировать небольшие изменения. Недостаток заключается в том, что дополнительный код приведет к увеличению вычислительных затрат. Если вы пишете условные операторы на языке высокого уровня, таком как Python, и берете тысячи выборок в секунду, эти затраты быстро накапливаются.

Готово! Надеюсь, эта статья будет вам полезна!

В приведенной выше статье вы познакомились с «Как добавить АЦП в Raspberry Pi: что вам нужно знать». СоветыНадейтесь, что эта статья вам поможет! Если эта статья кажется вам интересной и полезной, не забудьте поделиться ею. Спасибо!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *