Рассмотрим управление цифровым потенциометром X9C (X9C102, X9C103, X9C503, X9C104) с помощью Arduino, а также то, какие области применения могут быть у данного устройства.
Описание цифрового потенциометра типа X9C
Потенциометр, или переменный резистор – это электротехническое устройство, которое позволяет изменять сопротивление электрическому току. Классический (механический) потенциометр представляет собой два вывода, между которыми располагается третий – подвижный («скользящий»). Перемещая подвижный вывод, мы меняем сопротивление между ним и каждым из неподвижных вывода.
Электронный потенциометр – это аналог механического потенциометра, но с рядом преимуществ: он не имеет механических частей, он может управляться удалённо с помощью, например, микроконтроллера, и он существенно меньше по размеру.
Потенциометры широко применяются в различных электронных устройствах, где необходимо регулировать напряжение в процессе работы. Например, в роли подстроечных резисторов при настройке схем, в роли регуляторов громкости в аудио-устройствах, или регуляторов уровня освещения в осветительных приборах.
Будем использовать готовый модуль с цифровым потенциометром X9C102 (X9C103, X9C104, X9C503).
Цифровой потенциометр типа X9C может быть одного из следующих типов, различающихся максимальными сопротивлениями:
| Название | Максимальное сопротивление |
| X9C102 | 1 кОм |
| X9C103 | 10 кОм |
| X9C503 | 50 кОм |
| X9C104 | 100 кОм |
В названии потенциометра X9C три цифры означают: значение и количество нулей, которое нужно приписать к значению, чтобы получить номинал. Например: 102 это 10 и 2 нуля, или 1000 Ом (1 кОм); 503 – это 50 и 3 нуля, или 50000 (50 кОм) т.п.
Логика работы и схема подключения цифрового потенциометра X9C103 к Arduino
Между 0 и максимальным значением с шагом 1/100 от максимума можно регулировать сопротивление на третьем «подвижном» выводе.
Управление положением «подвижного» вывода осуществляется с помощью серии отрицательных импульсов. Каждый импульс смещает значение сопротивления на 1 шаг в сторону увеличения или уменьшения.
Потенциометр управляется по трём линиям:
| Название вывода | Назначение | Примечание |
|---|---|---|
| CS | Выбор устройства | LOW – устройство активно |
| INC | Изменение сопротивления выхода | Отрицательные импульсы |
| U/D | Направление изменения | U (вверх) – если напряжение на ножке микросхемы HIGH, D (вниз) – LOW |

Модуль требует питание +5 В.
Скетч управления цифровым потенциометром 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% от максимума потенциометра.
Опускаем линию CS в LOW, а также U/D в LOW (уменьшение выходного сопротивления). Когда на INC отсчитали 100 импульсов, поднимаем U/D в HIGH (изменяем сопротивление в сторону увеличения). С помощью INC относительно выставленного нулевого сопротивления начинаем отсчитывать нужное значение (в данном случае 10 импульсов равны 10% от максимума потенциометра).
Потенциометр X9C102/103/104 имеет 100 градаций сопротивления между минимальным и максимальным. Это позволяет не вводить никаких коэффициентов для пересчёта процентов в импульсы. Например: 10 импульсов INC изменяют текущее значение выходного сопротивления на 10%.
Распиновка и назначение контактов микросхемы:
1 INC – Increment контакт для управления “ползунком” когда на него поступает положительный сигнал “ползунок” перемещается в верх или в низ
а в какую сторону “ползунок” пойдёт, определяет пин
2 U/D – Up/Down при высоком уровне ползунок едет на верх а при низком в низ.
7 CS – Chip Select микросхема выбирается, когда на входе CS НИЗКИЙ уровень. когда CS переходит в ВЫСОКИЙ уровень, а вход INC также имеет ВЫСОКИЙ уровень, текущее положение “ползунка” сохраняется в энергонезависимой памяти.
После завершения операции сохранения X9C1ХХ будет переведен в режим ожидания с низким энергопотреблением, пока микросхема не будет выбрана еще раз.
5 VW — это тот самый контакт “ползунка” или центральный вывод потенциометра которым мы управляем, Последовательное сопротивление между контактами VW – VL и VW – VH не менее 40 Ом. это кстати тоже может накладывать некие ограничения для использования этой микросхемы.
3 VH и 6 VL – пины высокого (VH) и низкого (VL) сигнала X9CХХ эквивалентны фиксированным контактам механического потенциометра. Минимальное напряжение –5В, максимальное +5В.
Следует отметить, что терминология VL и VH относится к относительному положению клеммы по отношению к направлению движения “ползунка”, выбранному входом U/D, а не к потенциалу напряжения на клемме.
одно из самых важных ограничений это выходы потенциометра, максимальное напряжение проходящее через потенциометр не должно превышать 5V и ток в 8 мА.
Модуль цифрового потенциометра X9C104 100K

Этот Модуль имеет 10 контактов:
5 контактов с левой стороны:
VCC: Источник питания модуля – 5 В
GND: Заземление
INC: Команда изменения резистора
U/ D: ВВЕРХ / вниз. Регулировочный резистор
CS: Выбор микросхемы. Активный НИЗКИЙ уровень
5 контактов с правой стороны:
VCC: Источник питания модуля – 5 В
RH: Высокий резистор
RW: Регулируемый резистор
RL: Низкий резистор
GND: Заземление

Ссылка на Али
Ещё ссылка