Potenciómetro digital AD5280

Este es un ejemplo de funcionamiento para quienes quieren experimentar por primera vez con el potenciómetro digital AD5280. Soporta una tensión máxima de hasta 15 voltios entre los pines A y B.

Encontré esta imagen en un foro alemán. La modifiqué. He buscado la fuente original pero no la he vuelto a encontrar.

  • La resistencia R19 con valor de 3,9K está como limitador de corriente. En principio y según he entendido en la lectura del datasheet no debe de circular una corriente mayor de 5 mA (máximo 20 mA como pulso o pico) entre cualquiera de los puntos AB, AW o BW. Así que hay que, o bien limitar la corriente de la fuente de alimentación, o si no, poner una resistencia como en el esquema, aunque de esta última manera no es para nada lo ideal. Este tipo de potenciómetro digital está pensado para usarse con amplificadores operacionales y en esas construcciones no necesita limitación de corriente porque ya de por sí existen corrientes muy bajas.
  • Puedes poner el multímetro en ohmios entre los puntos B y W (o entre A y W pero en este caso saldría el valor correspondiente inverso) y verificar el valor resistivo que has enviado. Para realizar las primeras pruebas aconsejo usar sólo la parte resistiva sin voltaje (sólo utilizando el polímetro), y una vez que hayas verificado que todo es correcto entonces es el momento de "jugar" con las tensiones. Según me ha parecido entender del datasheet dice que si va haber tensión mayores de 5 voltios entre el punto A y B, entonces hay que conectar necesariamente VDD al punto A y VSS al punto B.
  • V_Logic es la tensión de alimentación de la electrónica interna, funciona igual de bien con 3.3V que con 5V.
  • El rango de tensión entre VDD y VSS máxima es de 15V. También puedes utilizar una fuente simétrica donde por ejemplo VDD sea de +5V y VSS de -5V (en este caso no conectes VSS a GND).

I2C

  • En Arduino UNO y Nano no has de poner resistencias pull-up. Los pines I2C son: A4 (SDA) y A5 (SCL). Cuando en el "setup()" se ejecuta la función "Wire.begin();" el microcontrolador deja esos dos pines con los colectores abiertos y les asigna una resistencia pull-up para cada patilla. Esto lo hace de forma interna el propio microcontrolador automáticamente.
  • En el STM32F103C se necesitan resistencias pull-up de aproximadamente 4K7 ohmios; yo he utilizado 3K3 y funciona perfecto. Los pines I2C son: B6 (SCL) y B7 (SDA).

Código de ejemplo:

#include <Wire.h>
void setup()
{
  Wire.begin();
}
void loop()
{
  Wire.beginTransmission(0x2C);// Byte de 7 bits de dirección.
  Wire.write(0x00); // Instrucción: Valor medio /SHDN <-> V_logic (0x00); /SHDN <-> O1 = (0x10);
                       /SHDN <-> O2 = (0x08).
  Wire.write(0);    // Dato de salida (0..255) entre W y B; entre W y A sería inverso (255..0).
  Wire.endTransmission();
  delay(1000);
}

El tercer byte es el valor resistivo equivalente a enviar. En el programa establezco cero, pero tú has de ir probando diferente valores entre 0 y 255, y ver la respuesta con un multímetro entre los pines B y W, o si no, entre A y W, pero en este último verás el valor equivalente invertido, que es lo mismo que sucedería en un potenciómetro real.

Si montas el circuito tal como está en el esquema (con el pin /SHDN conectado a V_logic, es decir, a positivo de 5V ó 3.3V), al darle alimentación (sin enviar ningún valor, o con el microcontrolador desconectado) te saldrá un valor medio. Por ejemplo, si el AD5280 es de 20K te dará 10K (la mitad) a la salida. Una vez que el microcontrolador envía el valor resistivo, es cuando el AD5280 toma dicho valor y lo mantendrá hasta que le enviemos otro valor, pero una vez quites la alimentación se perderá esa información. Si deseas comenzar con un valor cero, debes conectar el pin /SHDN al pin O1 o bien al pin O2 (observa el esquema para saber dónde están esos pines), y en el programa cambiar el valor correspondiente del segundo byte de transmisión de los tres que envía. Por ejemplo, si conectas la patilla /SHDN a la patilla O1, el segundo byte (Instrucción) debe tener el valor 0x10, y si conectas la patilla /SHDN a la patilla O2, entonces el valor ha de ser 0x08. De esta dos formas conseguimos que al ponerse en marcha el potenciómetro, tenga una salida cercana a los cero ohmios. Para más información mira la hoja de datos.

Si necesitas comprobar que el dato de salida es correcto o tienes algún problema para hacerlo funcionar, puedes ver ese error mostrándolo a través de "Serial.print" de la siguiente manera:

error = Wire.endTransmission();

Entonces "error" puede contener uno de estos valores:

0: Todo perfecto.

1: Datos demasiado largos para caber en el buffer de transmisión.

2: Error en el dato de la dirección. (Es el primer byte; recuerda que este byte es de 7 bits.)

3: Error en los datos.

4: Otro tipo de error.