Как подключить цифровой потенциометр X9C102, X9C103, X9C104 к Arduino
Рассмотрим управление цифровым потенциометром X9C (X9C102, X9C103, X9C503, X9C104) с помощью Arduino, а также то, какие области применения могут быть у данного устройства. Воспользуемся готовым модулем, который стоит меньше 1 доллара.
Нам понадобится:
- Arduino UNO или иная совместимая плата;
- цифровой потенциометр серии X9C;
- макетная плата (breadboard);
- соединительные провода (рекомендую вот такой набор);
- персональный компьютер со средой разработки Arduino IDE.
1Описание цифрового потенциометратипа X9C
Потенциометр, или переменный резистор – это электротехническое устройство, которое позволяет изменять сопротивление электрическому току. Классический (механический) потенциометр представляет собой два вывода, между которыми располагается третий – подвижный («скользящий»). Перемещая подвижный вывод, мы меняем сопротивление между ним и каждым из неподвижных вывода.
Электронный потенциометр – это аналог механического потенциометра, но с рядом преимуществ: он не имеет механических частей, он может управляться удалённо с помощью, например, микроконтроллера, и он существенно меньше по размеру.
Потенциометры широко применяются в различных электронных устройствах, где необходимо регулировать напряжение в процессе работы. Например, в роли подстроечных резисторов при настройке схем, в роли регуляторов громкости в аудио-устройствах, или регуляторов уровня освещения в осветительных приборах.
Будем использовать готовый модуль с цифровым потенциометром X9C102 (X9C103, X9C104, X9C503). Китайские друзья продают их меньше чем за 100 рублей.
Цифровой потенциометр типа X9C может быть одного из следующих типов, различающихся максимальными сопротивлениями:
Название | Максимальное сопротивление |
X9C102 | 1 кОм |
X9C103 | 10 кОм |
X9C503 | 50 кОм |
X9C104 | 100 кОм |
В названии потенциометра 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 |
Вот так выглядит временная диаграмма управляющих сигналов:
Здесь VW – напряжение на центральном выводе.
Давайте соберём схему, как показано на рисунке:
Модуль требует питание +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
С помощью логического анализатора посмотрим, получилось ли соблюсти временную диаграмму управления потенциометром:
Видно, что вполне. Опускаем линию CS в LOW, а также U/D в LOW (уменьшение выходного сопротивления). Когда на INC отсчитали 100 импульсов, поднимаем U/D в HIGH (изменяем сопротивление в сторону увеличения). С помощью INC относительно выставленного нулевого сопротивления начинаем отсчитывать нужное значение (в данном случае 10 импульсов равны 10% от максимума потенциометра).
Потенциометр X9C102/103/104 имеет 100 градаций сопротивления между минимальным и максимальным. Это позволяет не вводить никаких коэффициентов для пересчёта процентов в импульсы. Например: 10 импульсов INC изменяют текущее значение выходного сопротивления на 10%.
Если теперь с помощью мультиметра проконтролировать сопротивление между центральным и одним из конечных выводов, то мы зафиксируем изменения сопротивления.
Для наглядности я подам напряжение 5 вольт между конечными выводами потенциометра, а к центральному контакту подключу осциллограф DSO138. Фотографии и видео ниже иллюстрируют результат.
Неплохая достаточно подробная статья про виды и устройство потенциометров тут.
Кстати, для экспресс-тестирования работы с потенциометром X9C103 отлично подходят микросхемы фирмы FTDI (FT2232 или другие) и программа SPI via FTDI. Для этого мы пин "CS" модуля подключаем к CS микросхемы FT2232, пин "U/D" – к пину DO, и записываем в режиме SPI нужное число байтов. Так, чтобы послать 10 импульсов потенциометру, можно послать 10 байтов 0x01 или 5 байтов 0x0A (в двоичном виде это 0101), и т.д.
Download attachments:
Поблагодарить автора:
Поделиться
8 comments
-
Дмитрий Суббота, 21 Сентябрь 2019 12:09 Ссылка на комментарий
Здравствуйте! Подскажите пожалуйста, есть ли способ установить нужное сопротивление в потенциометре при включении микроконтроллера? Например, при включении необходимо, что бы сопротивление потенциометра всегда устанавливалось на 50%. При этом мы не знаем, в каком состоянии (с каким сопротивлением) потенциометр был выключен - он ведь сохраняет состояние. Так вот каким образом установить необходимое сопротивление при включении? Есть ли способ считать текущее состояние потенциометра при включении, и открутить (или докрутить) до нужного сопротивления? Или может быть его можно резко сбросить в ноль, а потом накрутить до 50%?
-
aave1 Понедельник, 23 Сентябрь 2019 20:09 Ссылка на комментарий
Дмитрий! Если вам нужно в иметь определённое сопротивление потенциометра X9C103, то, как вариант, необходимо реализовать поэтапную схему включения. То есть сначала вы выставляете все нужные условия (сопротивление и т.д.), а затем включаете основную схему.
-
Александр Понедельник, 18 May 2020 13:38 Ссылка на комментарий
Подскажите пожалуйста как можно реализовать регулировку сопротивления на этой микросхеме на двух кнопках (плюс/минус или больше/меньше). Можно ли вообще? Если да, то есть ли схема? Или может быть какая нибудь аналогичная микросхема? Только чтобы без ардуино, а просто на двух кнопках...?
-
aave1 Понедельник, 18 May 2020 17:59 Ссылка на комментарий
Александр, конечно можно! Схема такого устройства будет тривиальная. Необходимо CS цифрового потенциометра X9C подключить к земле, а линии INC и U/D подтянуть к питанию. Одна кнопка при нажатии должна притягивать линию INC на землю - это будет изменение сопротивления. А вторая кнопка будет выбором направления: уменьшать или увеличивать сопротивление. Ну и конечно подать питание на микросхему потенциометра. Подключение кнопки рассмотрено в одной из предыдущих статей: https://soltau.ru/index.php/arduino/item/376-kak-podklyuchit-knopku-k-arduino (только ардуино не нужно).
-
Вадим Понедельник, 23 Ноябрь 2020 09:50 Ссылка на комментарий
Здравствуйте, не хочу казаться глупым, но можно ли сделать управление энкодером?
-
aave1 Понедельник, 23 Ноябрь 2020 19:18 Ссылка на комментарий
Вадим, можно уточнить, каким именно энкодером? И что именно вы хотите с ним сделать?
-
Владимир Вторник, 09 Февраль 2021 06:19 Ссылка на комментарий
Здравствуйте! Имеется датчик, резистивное сопротивление которого изменяется в диапазоне от 2 до 110 Ом. Необходимо преобразовать этот диапазон в границы 2-220 ОМ. Видится такое решение: по входу Ардуино реализуем цифровой омметр, по выходу - цифровой потенциометр. То есть скетч имеет три блока - омметр-преобразователь-потенциометр, причем преобразование можно осуществить достаточно грубо (просто удваивая входное сопротивление). Реализуемо?
-
aave1 Суббота, 13 Февраль 2021 18:08 Ссылка на комментарий
Владимир, добрый день! Вполне реализуемо!