Arduino PCF8591
тел. +7(499)347-04-82
Описание Arduino PCF8591
Вот подробное описание модуля Arduino PCF8591 (ЦАП/АЦП на базе микросхемы NXP/Philips PCF8591T), его характеристики, парт-номера и совместимость.
1. Общее описание
PCF8591 — это 8-битный низкопотребляющий АЦП (аналогово-цифровой преобразователь) и ЦАП (цифро-аналоговый преобразователь) с интерфейсом I2C. Модуль позволяет:
- Считывать до 4 аналоговых сигналов и преобразовывать их в цифровой код (8 бит, от 0 до 255).
- Выводить 1 аналоговый сигнал (8-битное напряжение) через ЦАП.
- Выбирать адрес на шине I2C (4 возможных адреса:
0x48,0x49,0x4A,0x4B). - Управлять светодиодом и подстроечным резистором, входящими в состав модуля.
Модуль особенно полезен, когда стандартного числа аналоговых входов Arduino (например, A0…A5 у Uno) не хватает.
2. Технические характеристики
| Параметр | Значение |
|---|---|
| Микросхема | PCF8591T (NXP/Philips) |
| Напряжение питания | 2.5 В … 6.0 В (обычно 5 В для Arduino) |
| Интерфейс | I2C (max 400 кГц в стандартном режиме) |
| Разрядность АЦП | 8 бит (0…255) |
| Разрядность ЦАП | 8 бит |
| Количество аналоговых входов | 4 (AIN0…AIN3) |
| Количество аналоговых выходов | 1 (AOUT) |
| Опорное напряжение Δ (Vref) | Напряжение питания (VDD) – обычно 5 В, регулируется внешним резистором |
| Адрес на шине I2C | По умолчанию 0x48, настраивается перемычками A0, A1, A2 |
| Ток потребления (working) | Около 1 мА (зависит от частоты преобразования) |
| Размеры модуля | ~ 24×20 мм (2x1, у разных продавцов может отличаться) |
3. Назначение выводов модуля (типовой)
| Пин | Назначение | |---|---| | VCC / + | Питание (3.3–5.5 В) | | GND / - | Земля | | SDA (или DATA) | Линия I2C данных | | SCL (или CLK)| Линия I2C тактовой частоты | | AIN0 | Аналоговый вход 0 | | AIN1 | Аналоговый вход 1 | | AIN2 | Аналоговый вход 2 | | AIN3 | Аналоговый вход 3 | | AOUT | Аналоговый выход (0–5/3.3 В) |
Примечание: на некоторых модулях есть выносной потенциометр и фоторезистор – они подключены к входам AIN0 и AIN1.
4. Парт‑номера (MPN/PN) микросхемы PCF8591
- PCF8591T/2,512 — SO‑16 корпус (наиболее часто встречается у дешёвых модулей из Китая)
- PCF8591T/2,518 — другой упаковочный код той же микросхемы (NXP)
- PCF8591P — корпус DIP‑16 (подходит для макетных плат)
При заказе самой микросхемы ищите по любому из этих номеров — они функционально одинаковы.
5. Совместимые модели контроллеров / микроконтроллеров
Модуль совместим с любой микроконтроллерной платформой, которая поддерживает I2C, в том числе:
- Arduino:
- Uno, Nano, Mini, Pro Mini
- Leonardo, Micro, Due (только уровень 3.3 В или делитель)
- Mega 2560, Mega ADK
- ESP8266 (Wemos D1, NodeMCU)
- ESP32, ESP32‑C3, ESP32‑S2
- Teensy (3.x, 4.x)
- STM32 (Blue Pill, Black Pill, Discovery)
- Raspberry Pi Pico / RP2040
- Galileo, Particle Photon и т.д.
Важно: учитывайте напряжение логики – многие платы (кроме Due и ESP32) работают от 5 В, а сам PCF8591 может работать от 3.3 В, но не все модули корректно понижают опорное напряжение. Рекомендуется питать модуль от напряжения, соответствующего расчётам ЦАП/АЦП (обычно 5 В для Arduino).
6. Типичные проблемы / примечания
- Подтяжка I2C – на большинстве модулей стоит по одному резистору на SDA и SCL (2.2 кОм…10 кОм), подключающихся к VCC. Лишняя подтяжка не нужна, если вы не удлиняете линию сильно.
- ЦАП выдаёт только напряжение, НЕ ТОК. Максимальный ток выхода – около 100 мкА напрямую (на вход нужно подавать потенциометры или референсный ОУ).
- Не подходит для высокочастотной выборки – АЦП делает примерно 1.9…6.8 ксемплов/сек (зависит от тактовой I2C), поэтому не годится для аудио или осциллографов.
- Иногда встречаются бракованные копии или повреждённые выводы, работающие непредсказуемо – покупайте у проверенных брендов (NXP, или возвратные модули).
7. Краткий пример подключения и код (Arduino)
Подключение (Uno/Nano):
- VCC → 5V
- GND → GND
- SDA → A4 (на Uno) / D4 (на Nano)
- SCL → A5 (на Uno) / D5 (на Nano)
- (AIN0 подключить, например, к потенциометру питания)
Код (чтение АЦП + вывод на ЦАП):
#include <Wire.h>
#define PCF8591_ADDR 0x48
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(PCF8591_ADDR);
Wire.write(0x00); // Установить адрес регистра АЦП
Wire.endTransmission();
Wire.requestFrom(PCF8591_ADDR, 2);
Wire.read(); // мусорный байт
int val = Wire.read();
Serial.print("ADC Value: ");
Serial.println(val);
delay(500);
}
Для вывода на ЦАП:
Wire.beginTransmission(PCF8591_ADDR);
Wire.write(0x40); // управление D2 и D1/0 – цифро-аналоговый режим
Wire.write(analogCtrl); // выходное значение 8‑битное (0–255, 8‑битный ЦАП)
Wire.endTransmission();
8. Конструкторский список покупки (BoM для Arduino Kit)
| Наименование | Парт‑номер / общее |
|---|---|
| Модуль PCF8591 ADC/DAC | – у продавца: MOD‑ADC‑4ch |
| Сама микросхема (DIP‑запас) | PCF8591P – NXP |
| Отдельный резистор потенциометра ручки | B100k (подпружиненный) |
| Платка адаптера с кнопками / прерыванием | Нет необходимости – у модуля уже стоит I2C‑слот |
Если вам нужно углублённое руководство по библиотекам (например, Adafruit_PCF8591 vs собственная реализация) – скажите, помогу расширить.