Управление с помощью Arduino цифровым потенциометром AD5206 через протокол SPI
В данном руководстве мы изучим, как управлять цифровым потенциометром AD5206 с помощью Arduino, используя последовательный периферийный интерфейс SPI. Для более подробной информации об этой библиотеке смотрите статью «Библиотека SPI для Arduino».
Цифровые потенциометры полезны, когда вам нужно изменять сопротивление в цепи электронным способом, а не вручную. Примеры применений цифровых потенциометров включают в себя управление яркостью светодиодов, обработку аудиосигналов и так далее. В данном примере мы будем использовать шестиканальный цифровой потенциометр для управления яркостью шести светодиодов. Этапы, через которые мы пройдем, реализуя связь по SPI, могут быть изменены для использования большинства других SPI устройств.
Необходимые комплектующие
- плата Arduino или Genuino;
- цифровой потенциометр AD5206;
- 6 светодиодов;
- 6 резисторов 220 Ом;
- перемычки;
- макетная плата.
Кратко о цифровом потенциометре AD5206
Ссылка на техническое описание AD5206
AD5206 – это 6-канальный цифровой потенциометр. Это означает, что он имеет шесть переменных резисторов (потенциометров), встроенных для независимого электронного управления. Для каждого из шести встроенных переменных резисторов на корпусе микросхемы выделено по три вывода, их можно подключить так же, как если бы вы использовали обычный механический потенциометр. Выводы отдельных переменных резисторов обозначены как Ax, Bx и Wx, например, A1, B1 и W1. В этом руководстве мы будем использовать каждый потенциометр в качестве делителя напряжения, подключив один крайний вывод (вывод A) к напряжению питания, второй крайний вывод (вывод B) – к шине земли, а со среднего вывода (Wiper) будем брать изменяющееся напряжение. В этом случае AD5206 обеспечивает максимальное сопротивление 10 кОм, сопротивление изменяется в 255 шагов (максимум при 255, минимум при 0).
Схема
Код программы
/*
Управление цифровым потенциометром.
Этот пример управляет цифровым потенциометром Analog Devices AD5206.
AD5206 включает в себя 6 каналов потенциометров. Выводы каждого канала, отмеченные как
A - подключен к напряжению питания
W - средний вывод потенциометра, положение которого мы будем менять
B - подключен к корпусу.
AD5206 управляется через SPI, и чтобы управлять им, необходимо послать команду
из двух байтов, один байт с номером канала (0 - 5), а другой байт со значением
сопротивления канала (0 - 255).
Схема:
* Все выводы A AD5206 подключены к +5В
* Все выводы B AD5206 подключены к земле
* Светодиод и последовательно соединенный с ним резистор 220 Ом подключен между каждым выводом W и землей
* CS - к цифровому выводу 10 (вывод SS)
* SDI - к цифровому выводу 11 (вывод MOSI)
* CLK - к цифровому выводу 13 (вывод SCK)
*/
// подключить библиотеку SPI:
#include <SPI.h>
// выбрать вывод 10 как вывод выбора ведомого для цифрового потенциометра:
const int slaveSelectPin = 10;
void setup() {
// настроить slaveSelectPin на выход:
pinMode(slaveSelectPin, OUTPUT);
// инициализация SPI:
SPI.begin();
}
void loop() {
// пройтись по шести каналам цифрового потенциометра:
for (int channel = 0; channel < 6; channel++) {
// изменить сопротивление на этом канале с минимума на максимум:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// немного подождать на максимуме:
delay(100);
// изменить сопротивление на этом канале с максимума на минимум:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}
}
void digitalPotWrite(int address, int value) {
// установить на выводе SS лог.0, чтобы выбрать чип:
digitalWrite(slaveSelectPin, LOW);
// отправить адрес и значение через SPI:
SPI.transfer(address);
SPI.transfer(value);
// установить на выводе SS лог.1, чтобы отменить выбор чипа:
digitalWrite(slaveSelectPin, HIGH);
}