Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что нужно знать

Raspberry Pi — отличное устройство для различных электронных проектов, но, используя преобразователь АЦП, вы можете расширить его возможности для измерения аналоговых сигналов и взаимодействия с более широким спектром устройств.

В Raspberry Pi стандартно отсутствуют аналоговые входы. Это ставит его в невыгодное положение по сравнению с платами на базе микроконтроллеров, такими как Arduino.

Но не отчаивайтесь: есть много вариантов, которые стоит рассмотреть. Вы можете начать с Raspberry Pi и внешнего АЦП. В этом руководстве мы дадим вам подробный обзор того, как использовать преобразователь АЦП с Raspberry Pi, уделив особое внимание ключевым шагам и потенциальным преимуществам. Читайте дальше, чтобы узнать, как максимально эффективно использовать свое устройство и эффективно интегрировать его в свои электронные проекты. Проверять Что такое аналого-цифровой преобразователь (АЦП)? Поймите его работу и ее важность в век цифровых технологий..

Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что вам нужно знать - Raspberry Pi

Почему вы хотите добавить записи?

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

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

Опции АЦП

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

Среди наиболее популярных и простых вариантов — чипсеты. MCP3004MCP3008) от Микрочипа. Вы получите четыре (или восемь) 10-битных каналов, которые могут считывать до 200 тыс. SPS. С другой стороны, существуют устройства ADS111x от Texas Instruments, которые читают 16 бит со скоростью 860 SPS. Следовательно, существует компромисс между скоростью и точностью (и, конечно же, ценой).

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

Здесь мы поступим проще и воспользуемся ADS1115 от Adafruit. Проверять Плюсы и минусы использования клона Arduino в ваших проектах.

Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что вам нужно знать - Raspberry Pi

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

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

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

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

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

Обработка записей

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

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

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

Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что вам нужно знать - Raspberry Pi

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

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

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

Соединительные провода

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

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

Работа с I2C

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

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

Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что вам нужно знать - Raspberry Pi

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

sudo i2cdetect -y 1

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

Расширение возможностей Raspberry Pi с помощью преобразователя АЦП: что вам нужно знать - Raspberry Pi

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

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

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

from smbus import SMBus
import time
addr = 0x48
bus = SMBus(1)

# set the registers for reading
CONFIGREG = 1
CONVERSIONREG = 0

# set the address register to point to the config register
# write to the config registers
bus.write_word_data(addr, CONFIGREG, (0b00000100 << 8 | 0b10000010)) 

# define the top of the range
TOP = 26300

while True:
    # read the register
    b = bus.read_word_data(addr, CONVERSIONREG)

    # swap the two bytes
    b = ((b & 0xFF) << 8) | ((b >> 8) & 0xFF)
    
    # subtract half the range to set ground to zero
    b -= 0x8000

    # divide the result by the range to give us a value between zero and one
    b /= TOP

    # cap at one
    b = min(b, 1)

    # bottom is zero
    b = max(b, 0)

    # two decimal places
    b = round(b, 2)
    print(b)
    time.sleep(.01)

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

Борьба с шумом

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

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

Также есть варианты программного обеспечения. Вы можете создать скользящее среднее или просто игнорировать небольшие изменения. Обратной стороной является то, что дополнительный код потребует вычислительных затрат. Если вы пишете условные операторы на языке высокого уровня, таком как Python, беря тысячи выборок каждую секунду, эти затраты быстро возрастут. Проверять Руководство по мониторингу температуры Raspberry Pi и Sense HAT: лучшие шаги и советы.

Общие вопросы

Вопрос 1. Что такое преобразователь АЦП и как он работает с Raspberry Pi?

АЦП (аналогово-цифровой преобразователь) — это устройство, которое преобразует аналоговые сигналы в цифровые сигналы. К Raspberry Pi можно подключить АЦП, чтобы он мог считывать аналоговые сигналы от таких источников, как датчики и переменные окружающей среды.

В2. Каковы основные преимущества использования преобразователя АЦП с Raspberry Pi?

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

Вопрос 3. Как подключить преобразователь АЦП к Raspberry Pi?

Преобразователь АЦП можно подключить к Raspberry Pi через интерфейс GPIO, используя соответствующие кабели и разъемы. Вы должны быть осторожны и следовать руководству по связи, прилагаемому к преобразователю АЦП.

Вопрос 4. Могу ли я использовать преобразователь АЦП со всеми версиями Raspberry Pi?

Да, АЦП можно использовать с большинством версий Raspberry Pi. Однако вам может потребоваться подключить адаптер к соответствующему порту GPIO для вашей конкретной версии оборудования.

Вопрос 5. Требует ли использование преобразователя АЦП опыта программирования?

Это зависит от масштаба проекта. В простых случаях можно использовать готовые библиотеки. Однако в некоторых проектах для эффективного использования данных могут потребоваться навыки программирования.

Продвижение вперед с несколькими потенциальными следующими шагами

Снимать показания через I2C очень просто, и то же самое применимо и к другим методам, таким как SPI. Хотя может показаться, что между доступными вариантами АЦП существуют существенные различия, правда в том, что, запустив один из них, можно легко применить полученные знания к другим.

Так почему бы нам не пойти дальше? Соедините несколько потенциометров вместе или попробуйте измерить свет, звук или температуру. Разверните только что созданный контроллер и создайте действительно функциональную установку Raspberry Pi! Вы можете просмотреть сейчас Потенциальные проблемы самостоятельного размещения ваших проектов Raspberry Pi.

Перейти к верхней кнопке