Рейтинг@Mail.ru

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

автор:
2 comments 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 вольт между конечными выводами потенциометра, а к центральному контакту подключу осциллограф. Фотографии и видео ниже иллюстрируют результат.

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

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

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

Управление цифровым потенциометром X9C103 с помощью микросхемы FT2242H
Управление цифровым потенциометром X9C103 с помощью микросхемы FT2242H
Демонстрация работы цифрового потенциометра
Last modified onПонедельник, 23 Сентябрь 2019 20:35 Read 11228 times

Поделиться

Print Friendly, PDF & Email

2 comments

  • Дмитрий
    Дмитрий Суббота, 21 Сентябрь 2019 12:09 Ссылка на комментарий

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

  • aave1
    aave1 Понедельник, 23 Сентябрь 2019 20:09 Ссылка на комментарий

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

Leave a comment

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev