Оглавление:
- Шаг 1:
- Шаг 2: Регистр конфигурации
- Шаг 3: Регистрация данных
- Шаг 4: режим несимметричного АЦП
- Шаг 5:
- Шаг 6: Дифференциальный режим АЦП
Видео: Arduino и 16-битный АЦП TI ADS1110: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В этом уроке мы рассмотрим использование Arduino для работы с Texas Instruments ADS1110 - невероятно крошечной, но полезной 16-битной ИС аналого-цифрового преобразователя.
Он может работать в диапазоне от 2,7 до 5,5 В, поэтому он также подходит для Arduino Due и других плат для разработки с более низким напряжением. Прежде чем продолжить, загрузите технический паспорт (pdf), так как он будет полезен и упоминается в этом руководстве. ADS1110 дает вам возможность получить более точный АЦП, чем 10-разрядные АЦП Arduino, и он относительно прост в использовании. Однако в SOT23-6 он доступен только как голая деталь.
Шаг 1:
Хорошей новостью является то, что вы можете заказать ADS1110 установленным на очень удобной коммутационной плате. ADS1110 использует для связи шину I2C. А поскольку имеется только шесть контактов, вы не можете установить адрес шины - вместо этого вы можете выбрать один из шести вариантов ADS1110 - каждый со своим собственным адресом (см. Вторую страницу спецификации).
Как вы можете видеть на фотографии выше, у нас есть маркировка «EDO», которая соответствует адресу шины 1001000 или 0x48h. А в примерах схем мы использовали подтягивающие резисторы 10 кОм на шине I2C.
Вы можете использовать ADS1110 как несимметричный или дифференциальный АЦП - но сначала нам нужно проверить регистр конфигурации, который используется для управления различными атрибутами, и регистр данных.
Шаг 2: Регистр конфигурации
Перейдите на одиннадцатую страницу спецификации. Регистр конфигурации имеет размер один байт, и поскольку ADS1110 сбрасывается при выключении питания, вам необходимо сбросить регистр, если ваши потребности отличаются от значений по умолчанию. В технических данных это изложено довольно четко… биты 0 и 1 определяют настройку усиления для PGA (усилителя с программируемым усилением).
Если вы просто измеряете напряжения или экспериментируете, оставьте их равными нулю для усиления 1 В / В. Затем скорость передачи данных для ADS1110 регулируется битами 2 и 3. Если у вас включена непрерывная выборка, это определяет количество выборок в секунду, снимаемых АЦП.
После некоторых экспериментов с Arduino Uno мы обнаружили, что значения, возвращаемые АЦП, были немного неверными при использовании максимальной скорости, поэтому оставьте 15 SPS, если не требуется иное. Бит 4 устанавливает либо непрерывную выборку (0), либо однократную выборку (1). Игнорируйте биты 5 и 6, однако они всегда равны 0.
Наконец, бит 7 - если вы находитесь в режиме одноразовой выборки, установка его в 1 запрашивает выборку - и его чтение сообщит вам, являются ли возвращенные данные новыми (0) или старыми (1). Вы можете проверить, что измеренное значение является новым значением - если первый бит байта конфигурации, который идет после данных, равен 0, он новый. Если возвращается 1, преобразование АЦП не завершено.
Шаг 3: Регистрация данных
Поскольку ADS1110 является 16-битным АЦП, он возвращает данные в двух байтах, а затем следует значение регистра конфигурации. Так что, если вы запросите три байта, все вернется. Данные представлены в форме «дополнения до двух», которая представляет собой метод использования чисел со знаком в двоичном формате.
Преобразование этих двух байтов выполняется простой математикой. При выборке на 15 SPS значение, возвращаемое ADS1110 (не напряжение), находится между -32768 и 32767. Старший байт значения умножается на 256, затем добавляется к младшему байту, который затем умножается на 2,048 и, наконец, делится на 32768. Не паникуйте, так как мы сделаем это в следующем примере скетча.
Шаг 4: режим несимметричного АЦП
В этом режиме вы можете считывать напряжение, которое находится в диапазоне от нуля до 2,048 В (что также является встроенным опорным напряжением для ADS1110). Схема примера проста (из техпаспорта).
Не забудьте подтягивающие резисторы 10 кОм на шине I2C. В следующем скетче ADS1110 используется в режиме по умолчанию и просто возвращает измеренное напряжение:
// Пример 53.1 - односторонний вольтметр ADS1110 (0 ~ 2,048 В постоянного тока) #include "Wire.h" #define ads1110 0x48 float Voltage, data; byte highbyte, lowbyte, configRegister; void setup () {Serial.begin (9600); Wire.begin (); } void loop () {Wire.requestFrom (ads1110, 3); while (Wire.available ()) // гарантируем, что все данные поступают в {highbyte = Wire.read (); // старший байт * B11111111 lowbyte = Wire.read (); // младший байт configRegister = Wire.read (); }
данные = старший байт * 256;
данные = данные + младший байт; Serial.print («Данные >>»); Serial.println (данные, DEC); Serial.print ("Напряжение >>); напряжение = данные * 2,048; напряжение = напряжение / 32768,0; Serial.print (напряжение, DEC); Serial.println ("V"); задержка (1000); }
Шаг 5:
После загрузки подключите сигнал для измерения и откройте монитор последовательного порта - вам будет представлено что-то похожее на изображение монитора последовательного порта, показанное на этом шаге.
Если вам нужно изменить коэффициент усиления внутреннего усилителя с программируемым коэффициентом усиления АЦП, вам нужно будет записать новый байт в регистр конфигурации, используя:
Wire.beginTransmission (ads1110); Wire.write (байт конфигурации); Wire.endTransmission ();
перед запросом данных АЦП. Это будет 0x8D, 0x8E или 0x8F для значений усиления 2, 4 и 8 соответственно - и используйте 0x8C для возврата ADS1110 к значениям по умолчанию.
Шаг 6: Дифференциальный режим АЦП
В этом режиме вы можете прочитать разницу между двумя напряжениями, каждое из которых находится между нулем и 5 В. Схема в качестве примера проста (из таблицы данных).
Мы должны отметить здесь (и в таблице данных), что ADS1110 не может принимать отрицательные напряжения на любом из входов. Вы можете использовать предыдущий эскиз для тех же результатов - и результирующее напряжение будет значением Vin-, вычтенным из Vin +. Например, если у вас было 2 В на Vin + и 1 В на Vin-, результирующее напряжение было бы 1 В (с усилением, установленным на 1).
Еще раз мы надеемся, что вы нашли это интересным и, возможно, полезным. Этот пост предоставлен pmdway.com - все для производителей и любителей электроники с бесплатной доставкой по всему миру.
Рекомендуемые:
Как сделать АЦП текущим значением: 5 шагов
Как измерить ток АЦП: в этой инструкции мы опишем, как реализовать 8-битный аналого-цифровой преобразователь (АЦП) в SLG46855V, который может определять ток нагрузки и взаимодействовать с MCU через I2C. Эта конструкция может использоваться для различных приложений измерения тока, таких как
7-сегментный для отображения значений АЦП #Arduino, #Arduino: 4 шага
7 сегментов для отображения значений АЦП #Arduino, #Arduino: в этой статье я сделаю проект, который все еще связан с предыдущей статьей. А именно обработка данных АЦП. Поэтому вам не нужен последовательный монитор, чтобы увидеть значение данных АЦП. В этой статье я сделаю дисплей для просмотра значений ADC. так что ты не
Знаете ли вы о настройке АЦП ESP32 ?: 29 шагов
Знаете ли вы о регулировке АЦП ESP32? Сегодня я собираюсь поговорить о более технической проблеме, но я думаю, что каждый, кто работает с ESP32, должен знать: проблема регулировки чтения АЦП (аналого-цифровой преобразователь). Я считаю это важным, потому что при выполнении " измерения " особенно
Перезаряжаемый цифровой вольтметр с использованием АЦП ICL7107: 7 шагов (с изображениями)
Перезаряжаемый цифровой вольтметр с использованием АЦП ICL7107: в этом уроке я покажу вам, как сделать супер простой цифровой вольтметр, который может измерять напряжения от 20 мВ до 200 В. В этом проекте не будет использоваться микроконтроллер, подобный Arduino. Вместо этого будет использоваться АЦП, то есть ICL7107 с некоторыми пасс
Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов
Введение в АЦП в микроконтроллере AVR | для начинающих: в этом руководстве вы узнаете все, что есть АЦП в микроконтроллере AVR