Как подключить цифровой потенциометр 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), и т.д.