Резистор – это электрическое устройство, которое сопротивляется потоку электрического тока. Существуют как обычные (постоянные) резисторы с неизменным сопротивлением, так и переменные, сопротивление которых можно задавать в определенном пределе. Такие резисторы еще называют потенциометрами. Благодаря прогрессу сегодня мы можем использовать не только аналоговые потенциометры, сопротивление которых задается ручкой или ползунком, но и цифровые, в которых сопротивление определяется цифровым кодом.
Цифровые потенциометры являются довольно простыми устройствами, которые можно без проблем использовать в проектах с Arduino.
В основе цифрового потенциометра лежит резистивная лестница с электронными переключателями на каждом шаге. В один момент времени закрывается только один электронный выключатель, и, таким образом, закрытый переключатель определяет положение цифрового «ползунка» и величину сопротивления. Количество шагов в лестнице, в свою очередь, определяет разрешение цифрового потенциометра. Цифровые потенциометры, как правило, представляют собой интегральные схемы с начальным положением цифрового «ползунка» в середине шкалы. Однако некоторые варианты имеют встроенную (энергонезависимую) память, которая запоминает последнее положение цифрового «ползунка» и может восстановить это положение при последующем включении. Когда вы начнете работать с цифровыми потенциометрами, следует учесть два момента: большинство из них имеют номинал 5 , а 10 КОм – самое популярное значение.
Одним из самых популярных цифровых потенциометров на сегодняшний день является микросхема MCP41010. MPC41010 – это одноканальный 256-позиционный цифровой потенциометр компании Microchip с максимальным сопротивлением 10 кОм (минимальное значение 100 Ом). Он доступен в 8-выводном корпусе PDIP или SOIC. Ниже представлен внешний вид и приведена распиновка MPC41010.
PA0: вывод A потенциометра
PB0: вывод B потенциометра
PW0: контакт цифрового «ползунка» потенциометра
CS: линия выбора микросхемы
SCK: тактовый сигнал SPI
SI: линия входных последовательных данных SPI
VDD и VSS: линии питания 2.7 В-5.5 В (плюс и ноль соответственно)
Подключение цифрового потенциометра к Arduino осуществляется с использованием порта SPI. Ниже представлена схема подключения Arduino и MCP41010.
Ниже приведен достаточно простой код (скетч), который циклически проходит через все 256 положений (около 39 Ом на шаг), Напряжение на аналоговом выводе затем считывается и отображается в последовательном мониторе.
#include <SPI.h> // подключаем библиотеку SPI
const int CS = 10;
int PotWiperVoltage = 1;
int RawVoltage = 0;
float Voltage = 0;
void setup() {
pinMode (CS, OUTPUT);
Serial.begin(9600);
SPI.begin(); // инициализация SPI
}
void loop() {
// move the wiper in one direction
for (int level = 0; level < 255; level++)
{
MCP41010Write(level);
delay(100);
RawVoltage = analogRead(PotWiperVoltage);
Voltage = (RawVoltage * 5.0 )/ 1024.0;
Serial.print("Level = " );
Serial.print(level);
Serial.print("\t Voltage = ");
Serial.println(Voltage,3);
}
delay(2000); // задержка
// перемещаем цифровой ползунок в новое положение
for (int level = 255; level > 0; level--)
{
MCP41010Write(level);
delay(100);
RawVoltage = analogRead(PotWiperVoltage);
Voltage = (RawVoltage * 5.0 )/ 1024.0;
Serial.print("Level = " );
Serial.print(level);
Serial.print("\t Voltage = ");
Serial.println(Voltage,3);
}
delay(2000);
}
void MCP41010Write(byte value)
{
digitalWrite(CS,LOW); // выбор микросхемы
SPI.transfer(B00010001); // командный байт
SPI.transfer(value); // байт данных
digitalWrite(CS,HIGH); // снимаем выбор с микросхемы
}