Рейтинг@Mail.ru

Как подключить цифровой потенциометр X9C102, X9C103, X9C104 к Arduino

8 комментарии Arduino
Print Friendly, PDF & Email

Рассмотрим управление цифровым потенциометром X9C (X9C102, X9C103, X9C503, X9C104) с помощью Arduino, а также то, какие области применения могут быть у данного устройства. Воспользуемся готовым модулем, который стоит меньше 1 доллара.

Нам понадобится:

1Описание цифрового потенциометратипа X9C

Потенциометр, или переменный резистор – это электротехническое устройство, которое позволяет изменять сопротивление электрическому току. Классический (механический) потенциометр представляет собой два вывода, между которыми располагается третий – подвижный («скользящий»). Перемещая подвижный вывод, мы меняем сопротивление между ним и каждым из неподвижных вывода.

Принцип работы механического потенциометра
Принцип работы механического потенциометра

Электронный потенциометр – это аналог механического потенциометра, но с рядом преимуществ: он не имеет механических частей, он может управляться удалённо с помощью, например, микроконтроллера, и он существенно меньше по размеру.

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

Будем использовать готовый модуль с цифровым потенциометром X9C102 (X9C103, X9C104, X9C503). Китайские друзья продают их меньше чем за 100 рублей.

Модуль с цифровым потенциометром X9C102, X9C103, X9C104
Модуль с цифровым потенциометром X9C102, X9C103, X9C104
Модуль с цифровым потенциометром X9C103S
Модуль с цифровым потенциометром X9C103S

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

НазваниеМаксимальное сопротивление
X9C1021 кОм
X9C10310 кОм
X9C50350 кОм
X9C104100 кОм

В названии потенциометра X9C три цифры означают: значение и количество нулей, которое нужно приписать к значению, чтобы получить номинал. Например: 102 это 10 и 2 нуля, или 1000 Ом (1 кОм); 503 – это 50 и 3 нуля, или 50000 (50 кОм) т.п.

2Логика работы и схема подключения цифрового потенциометра X9C103 к Arduino

Между 0 и максимальным значением с шагом 1/100 от максимума можно регулировать сопротивление на третьем «подвижном» выводе.

Управление положением «подвижного» вывода осуществляется с помощью серии отрицательных импульсов. Каждый импульс смещает значение сопротивления на 1 шаг в сторону увеличения или уменьшения.

Потенциометр управляется по трём линиям:

Название выводаНазначениеПримечание
CSВыбор устройстваLOW - устройство активно
INCИзменение сопротивления выходаОтрицательные импульсы
U/DНаправление измененияU (вверх) – если напряжение на ножке микросхемы HIGH, D (вниз) – LOW

Вот так выглядит временная диаграмма управляющих сигналов:

Временная диаграмма управления потенциометром X9C102, X9C103, X9C104
Временная диаграмма управления потенциометром X9C102, X9C103, X9C104

Здесь VW – напряжение на центральном выводе.

Давайте соберём схему, как показано на рисунке:

Схема подключения цифрового потенциометра X9C102, X9C103, X9C104 к Arduino
Схема подключения цифрового потенциометра X9C102, X9C103, X9C104 к Arduino

Модуль требует питание +5 В.

3Скетч управления цифровым потенциометром X9C102, X9C103, X9C104

Теперь напишем вот такой скетч:

const int CS = 10;
const int INC = 9;
const int UD = 8;

void setup() {
  pinMode(CS, OUTPUT);
  pinMode(INC, OUTPUT);
  pinMode(UD, OUTPUT);
  digitalWrite(CS, HIGH);  // X9C в режиме низкого потребления
  digitalWrite(INC, HIGH); 
  digitalWrite(UD, HIGH); 
}

void loop() {
   for (int i=0; i<=100; i+=10) {
    setResistance(i);
    delay(100);
  }
}

// Задаёт сопротивление на "подвижном" выводе.
// Уровень percent - от 0 до 100% от максимума.
void setResistance(int percent) { 
  // Понижаем сопротивление до 0%:
  digitalWrite(UD, LOW); // выбираем понижение
  digitalWrite(CS, LOW); // выбираем потенциометр X9C
  for (int i=0; i<100; i++) { // т.к. потенциометр имеет 100 доступных позиций
    digitalWrite(INC, LOW);
    delayMicroseconds(1);
    digitalWrite(INC, HIGH);
    delayMicroseconds(1);
  }

  // Поднимаем сопротивление до нужного:
  digitalWrite(UD, HIGH);
  for (int i=0; i<percent; i++) {
    digitalWrite(INC, LOW);
    delayMicroseconds(1);
    digitalWrite(INC, HIGH);
    delayMicroseconds(1);
  }

  digitalWrite(CS, HIGH); /* запоминаем значение 
  и выходим из режима настройки */
}

Данный скетч содержит такой алгоритм: повышаем каждые 100 мс с шагом 10% сопротивление от 0 до 100% от максимума потенциометра.

Загрузим данный скетч в память платы Arduino.

4Проверка работы цифрового потенциометра X9C102/103/104

С помощью логического анализатора посмотрим, получилось ли соблюсти временную диаграмму управления потенциометром:

Временная диаграмма управления цифровым потенциометром X9C
Временная диаграмма управления цифровым потенциометром X9C

Видно, что вполне. Опускаем линию CS в LOW, а также U/D в LOW (уменьшение выходного сопротивления). Когда на INC отсчитали 100 импульсов, поднимаем U/D в HIGH (изменяем сопротивление в сторону увеличения). С помощью INC относительно выставленного нулевого сопротивления начинаем отсчитывать нужное значение (в данном случае 10 импульсов равны 10% от максимума потенциометра).

Потенциометр X9C102/103/104 имеет 100 градаций сопротивления между минимальным и максимальным. Это позволяет не вводить никаких коэффициентов для пересчёта процентов в импульсы. Например: 10 импульсов INC изменяют текущее значение выходного сопротивления на 10%.

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

Для наглядности я подам напряжение 5 вольт между конечными выводами потенциометра, а к центральному контакту подключу осциллограф DSO138. Фотографии и видео ниже иллюстрируют результат.

Изменение напряжения с помощью цифрового потенциометра X9C
Изменение напряжения с помощью цифрового потенциометра X9C
Изменение напряжения с помощью цифрового потенциометра X9C
Изменение напряжения с помощью цифрового потенциометра X9C

Неплохая достаточно подробная статья про виды и устройство потенциометров тут.

Кстати, для экспресс-тестирования работы с потенциометром X9C103 отлично подходят микросхемы фирмы FTDI (FT2232 или другие) и программа SPI via FTDI. Для этого мы пин "CS" модуля подключаем к CS микросхемы FT2232, пин "U/D" – к пину DO, и записываем в режиме SPI нужное число байтов. Так, чтобы послать 10 импульсов потенциометру, можно послать 10 байтов 0x01 или 5 байтов 0x0A (в двоичном виде это 0101), и т.д.

Управление цифровым потенциометром X9C103 с помощью микросхемы FT2232H
Управление цифровым потенциометром X9C103 с помощью микросхемы FT2232H
Демонстрация работы цифрового потенциометра
Последнее изменениеВоскресенье, 03 Январь 2021 17:13 Прочитано 38723 раз

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

8 комментарии

  • Дмитрий
    Дмитрий 21.09.2019 12:09 Комментировать

    Здравствуйте! Подскажите пожалуйста, есть ли способ установить нужное сопротивление в потенциометре при включении микроконтроллера? Например, при включении необходимо, что бы сопротивление потенциометра всегда устанавливалось на 50%. При этом мы не знаем, в каком состоянии (с каким сопротивлением) потенциометр был выключен - он ведь сохраняет состояние. Так вот каким образом установить необходимое сопротивление при включении? Есть ли способ считать текущее состояние потенциометра при включении, и открутить (или докрутить) до нужного сопротивления? Или может быть его можно резко сбросить в ноль, а потом накрутить до 50%?

  • aave1
    aave1 23.09.2019 20:09 Комментировать

    Дмитрий! Если вам нужно в иметь определённое сопротивление потенциометра X9C103, то, как вариант, необходимо реализовать поэтапную схему включения. То есть сначала вы выставляете все нужные условия (сопротивление и т.д.), а затем включаете основную схему.

  • Александр
    Александр 18.05.2020 13:38 Комментировать

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

  • aave1
    aave1 18.05.2020 17:59 Комментировать

    Александр, конечно можно! Схема такого устройства будет тривиальная. Необходимо CS цифрового потенциометра X9C подключить к земле, а линии INC и U/D подтянуть к питанию. Одна кнопка при нажатии должна притягивать линию INC на землю - это будет изменение сопротивления. А вторая кнопка будет выбором направления: уменьшать или увеличивать сопротивление. Ну и конечно подать питание на микросхему потенциометра. Подключение кнопки рассмотрено в одной из предыдущих статей: https://soltau.ru/index.php/arduino/item/376-kak-podklyuchit-knopku-k-arduino (только ардуино не нужно).

  • Вадим
    Вадим 23.11.2020 09:50 Комментировать

    Здравствуйте, не хочу казаться глупым, но можно ли сделать управление энкодером?

  • aave1
    aave1 23.11.2020 19:18 Комментировать

    Вадим, можно уточнить, каким именно энкодером? И что именно вы хотите с ним сделать?

  • Владимир
    Владимир 09.02.2021 06:19 Комментировать

    Здравствуйте! Имеется датчик, резистивное сопротивление которого изменяется в диапазоне от 2 до 110 Ом. Необходимо преобразовать этот диапазон в границы 2-220 ОМ. Видится такое решение: по входу Ардуино реализуем цифровой омметр, по выходу - цифровой потенциометр. То есть скетч имеет три блока - омметр-преобразователь-потенциометр, причем преобразование можно осуществить достаточно грубо (просто удваивая входное сопротивление). Реализуемо?

  • aave1
    aave1 13.02.2021 18:08 Комментировать

    Владимир, добрый день! Вполне реализуемо!

Оставить комментарий