Resistencia variable con Arduino y Digipot MCP41XXX


arduino-digipot

¿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.

Anuncio:

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.

arduino-digipot-componente

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.

arduino-digipot-esquema

Mientras que la conexión vista desde el lado de Arduino quedaría así.

arduino-digipot-conexion

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);
}
Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino
5 1 vote
Article Rating

Anuncio:

Previous Salida analógica real con Arduino y DAC de 12bits MCP4725
Next Más salidas/entradas en Arduino con multiplexor CD74HC4067
17 Comments
oldest
newest
Inline Feedbacks
View all comments
Carlos
3 years ago

Hola...es posible usarlo para hacer un potenciometro de 220v AC ?? tienes algun circuito para ver?..Gracias Luis...Tu web me ayuda mucho en mis proyectos

jose
3 years ago
Reply to  Carlos

estoy buscandolo para una aplicación de 110 vac

Jaume Bonet Morató
3 years ago

Me llamo Jaume, soy de Barcelona.Eres un crack Luis, normalmente tus explicaciones son mas que suficientes para entender lo tratado, Pero tengo una duda que no logro resolver: ¿Por que un digipot mcpxxx controlado por ISP no funciona al sustituirlo por el real de una emisora rc? No logro sustituir funcionalmente el potenciometro analogico (Del stickde una emisora RC) por un "digipot" (logicamente de los mismos K) , ¿Sabrias decirme por que porfavor? El servo recorre el bucle 0 180 0 pero con temblores importantes... Mil gracias de antemano

Jaume Bonet Morató
3 years ago
Reply to  Luis

Wow Luis, creo que tienes razón! fff i.. ¿I ahora que? No me digas que tengo que amplificar la salida de los digipots ¿no?... En los potenciometros analógicos de la radio hay sólo 5v.. fffff .¿Quizas debo buscar otro... digipot? No puede ser...son niveles TTL
Dame pistas por favor... y mil gracias de nuevo!

Jaume Bonet Morató
3 years ago
Reply to  Luis

Eres grande Luis!!

Jaume Bonet Morató
3 years ago
Reply to  Luis

Luis! SOLUCIONADO!! Eres lo más! Que lo sepas...
He usado 4 DAC MCP4725 (Entregados en 24 h por Bricogeek!), Y... adivina en que web he aprendido a usarlos en un fly...
Arduino nano controla los 4 canales de una emisora simple de RC de P.M.!
Fliparias su cometido... "Coche" RC con camara FPV pero controlado con ayuda de arduino ya que el usuario es un chico tetraplégico vecino.
Ahora puedo personalizar el "joystick".(solo puedo boca, ojos, voz, y la cabeza) Ya está!! Mira lo que has hecho tío... Genial y muchas gracias una vez más!

Jaume Bonet Morató
3 years ago
Reply to  Luis

Pero los pots analógicos de la radio RC se alimentan con 5v, Sólo modifican el voltaje (0v a 5v), es poca corriente, Si no pueden con esto, entonces no entiendo su uso, (Disculpa la ignorancia)
Según Datasheet (MCP41010), entrega max un uA!! Si es falta de chicha...¿Dame pistas por favor?

Jaume Bonet Morató
3 years ago

P.D.: Añado, y disculpa, que no es cuestión de código ya que el bucle varia la luminosidad de un led como debiera. ¿Serán los 256 pasos del digipot, frente al valor de 0 a 1024 de uno analógico?
Gracias otra vez Luis!

Jaume Bonet Morató
3 years ago

Corrijo..... Digipot controlado por SPI Disculpad....fffff

c2mismo
2 years ago

¿Por que introduces en el setup niveles diferentes del Dpot?

Ángel Padilla
1 year ago

Buenas, quería cambiar el potenciómetro analógico de un buck converter o step down comercial por un potenciómetro digital para controlar el voltaje de salida mediante un arduino. Necesito obtener corriente dentro del rango 6-15 voltios pero creo que estos potenciómetros solo aguantan entre sus terminales 5 voltios y el potenciómetro de un step down si no me equivoco está sometido al mismo voltaje de salida que está entregando. ¿Alguna idea de cómo hacerlo o que potenciómetro usar? Agradeció cualquier ayuda

Juan
5 months ago
Reply to  Ángel Padilla

Hola, me pasa los mismo, necesitaría 12V entre PA0 y PB0, pero alimentando el potenciometro a 5V para controlarlo con un arduino o similar. ¿Hay algún dispositivo que lo permita?

¿Quizás un AD5280 podría valer?

Enhorabuena por la web

Last edited 5 months ago by Juan
Eduardo
17 days ago

Saludos desde Cuba, casi todas mis dudas las aviación en tu web, gracias por existir