Stavo valutando il potenziometro digitale da 10K AD8402 (http://www.analog.com/en/digital-to-analog-converters/digital-potentiometers/ad8402/products/product.html) e ho realizzato su breadboard un semplice circuito con Arduino per la verifica rapida dell'integrato.
Leggo la resistenza ottenuta tramite l'ADC ed un partitore di tensione composto dalla resistenza digitale ed una da 3.3K per mantenere la corrente ad livello massimo di 1mA visto che il potenziometro digitale non accetta correnti elevate.
La relazione seppur non lineare è molto semplice, la resistenza si può ottenere tramite la seguente relazione:
R=(3.3K*3.3-3.3K*V)/V
Dove V è la tensione presente tra le due resistenze ed è data in ingresso all'ADC. Seppur non una grandissima soluzione era per verificare in linea di massima il codice di comunicazione e a grandi spanne la linearità del potenziometro.
Il codice utilizzato:
- Code: Select all
// AD8402
#include <SPI.h>
#define CSn 9
#define SHDNn 2
#define SDI 12 // MOSI
#define CLK 13
#define RSn 3 // Reset to midscale
void setup() {
pinMode(CSn, OUTPUT);
pinMode(SHDNn, OUTPUT);
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(RSn, OUTPUT);
digitalWrite(RSn, HIGH);
digitalWrite(SHDNn, HIGH);
digitalWrite(CSn, HIGH);
analogReference(EXTERNAL);
Serial.begin(9600);
SPI.setDataMode(SPI_MODE0);
SPI.begin();
}
byte code = 0;
void loop() {
digitalWrite(CSn, LOW);
SPI.transfer(0x00); // A0
SPI.transfer(code);
digitalWrite(CSn, HIGH);
delay(50);
double A = analogRead(A0);
double V = (3.3 * A / 1023);
double R = (10900.0 - (3300.0 * V)) / V;
Serial.print(code);
Serial.print(";");
Serial.println(R);
code += 1;
delay(500);
}
Il problema però è la scarsissima linearità ottenuta, in allegato il grafico della resistenza ottenuta al variare del codice passato al potenziometro digitale, dovrebbe essere lineare ma non ci si avvicina neanche lontanamente.
Qualcuno ha avuto esperienze positive coi potenziometri digitali?