¿Qué es un digipot?
Un potenciómetro digital (o digipot) es un dispositivo capaz de variar su resistencia desde una señal digital proporcionada por un procesador como Arduino.
El nombre técnico es un conversor resistivo digital a analógico (RDAC), aunque frecuentemente se denomina potenciómetro digital porque presentan un comportamiento similar a un potenciómetro convencional, pero en el que el control se realiza electrónicamente.
Típicamente un digipot está constituido internamente por múltiples resistencias conformando etapas, cuyo encendido está controlado por transistores. El número de etapas o niveles activados se controla mediante una señal digital y determina la resistencia total que presenta el dispositivo.
Aunque su nombre pueda sugerirlo, los digipots no deben considerarse un reemplazo directo de un potenciómetro. La principal limitación es la corriente máxima que puede atravesar el dispositivo, que típicamente está en el rango de unos pocos miliamperios.
Los dispositivos de la familia MCP41XXX son potenciómetros digitales de 8 bits (256 niveles), disponibles en resistencias de 10 kO (MCP41010), 50 kO (MCP41050) y 100 kO (MCP41100).
Los MCP41XXX se controlan por SPI por lo que es sencillo realizar su lectura. La tensión de alimentación es de 2.7V a 5.5V. La intensidad máxima que puede atravesar el dispositivo es de 5mA.
Debido a las limitaciones de intensidad máxima que pueden proporcionar un potenciómetro digital, estos rara vez son empleados directamente en circuitos. En su lugar, suelen intervenir para controlar etapas de amplificación mediante transistor o amplificador operacional.
Los potenciómetros útiles en proyectos de control de instrumental de medición, ajuste fino de controladores, regulación de amplificadores, interface con sensores especialmente sensibles, entre otros.
Precio
Podemos encontrar digipots como los de la serie MCP41XXX por unos 0.60€ buscando en vendedores internacionales de eBay o AliExpress.
Esquema de montaje
La conexión de un digipot MCP41XXX es sencillo, simplemente alimentamos el integrado desde Arduino mediante GND y 5V y conectamos los pines de datos como vimos en la entrada sobre el bus SPI.
Mientras que la conexión vista desde el lado de Arduino quedaría así.
Los pines de SPI que figuran son válidos para los modelos En Arduino Uno, Nano y Mini Pro. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.
Ejemplos de código
El siguiente ejemplo muestra el uso de un digipot MCP41XXX. En primer lugar llevamos al digipot a valor máximo, intermedio, y mínimo de resistencia. Finalmente, hacemos un bucle continuo variando la resistencia entre máximo y mínimo.
//SCK > D13
//SI > D11
//CS > D10
#include <SPI.h>
const byte address = 0x11;
const int CS = 10;
int digitalPotWrite(int value)
{
digitalWrite(CS, LOW);
SPI.transfer(address);
SPI.transfer(value);
digitalWrite(CS, HIGH);
}
void setup()
{
pinMode(CS, OUTPUT);
SPI.begin();
// Resistencia maxima
digitalPotWrite(0);
delay(5000);
// Resistencia intermedia
digitalPotWrite(126);
delay(5000);
// Resistencia inferior
digitalPotWrite(255);
delay(5000);
}
void loop()
{
for (int i = 0; i <= 255; i++)
{
digitalPotWrite(i);
delay(100);
}
delay(2000);
for (int i = 255; i >= 0; i--)
{
digitalPotWrite(i);
delay(100);
}
delay(2000);
}
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.