Utilizzo del potenziometro digitale MCP41xx con Arduino

Prova Il Nostro Strumento Per Eliminare I Problemi





In questo progetto interfacciamo un potenziometro digitale con arduino. In questa dimostrazione viene utilizzato il potenziometro MCP41010 ma è possibile utilizzare qualsiasi potenziometro digitale della serie MC41 **.

Di Ankit Negi



INTRODUZIONE A MC41010

I potenziometri digitali sono come qualsiasi potenziometro analogico con tre terminali con una sola differenza. Mentre in analogico è necessario modificare manualmente la posizione del tergicristallo, in caso di potenziometro digitale la posizione del tergicristallo viene impostata in base al segnale dato al potenziometro utilizzando un qualsiasi microcontrollore o microprocessore.

FIGURA. Pinout IC MC41010

FIGURA. Pinout IC MC41010



MC41010 è un CI con doppio pacchetto in linea a 8 pin. Proprio come qualsiasi potenziometro analogico, questo IC è disponibile in 5k, 10k, 50k e 100k. In questo circuito viene utilizzato un potenziometro da 10k
L'MC4131 ha i seguenti 8 terminali:

Pin n. Nome pin Piccola descrizione

1 CS Questo pin viene utilizzato per selezionare lo slave o la periferica collegata ad arduino. Se questo è
Basso, viene selezionato MC41010 e se questo è alto, MC41010 viene deselezionato.

2 SCLK Shared / Serial Clock, arduino fornisce il clock per l'inizializzazione del trasferimento dati da
Da Arduino a IC e viceversa.

3 I dati seriali SDI / SDO vengono trasferiti tra arduino e IC tramite questo pin
4 Il terminale di massa VSS di arduino è collegato a questo pin di IC.

5 PA0 Questo è un terminale del potenziometro.

6 PW0 Questo terminale è il terminale del tergicristallo del potenziometro (per modificare la resistenza)
7 PB0 Questo è un altro terminale del potenziometro.

8 VCC L'alimentazione all'IC viene fornita tramite questo pin.

Questo IC contiene solo un potenziometro. Alcuni IC hanno al massimo due potenziometri integrati. Questo
Il valore della resistenza tra il tergicristallo e qualsiasi altro terminale viene modificato in 256 passaggi, da 0 a 255. Poiché stiamo utilizzando un resistore da 10k, il valore del resistore viene modificato in passaggi di:
10k / 256 = 39 ohm per passo tra 0 e 255

COMPONENTI

Abbiamo bisogno dei seguenti componenti per questo progetto.

1. ARDUINO
2. MC41010 IC
3. RESISTENZA DA 220 OHM
4. LED
5. FILI DI COLLEGAMENTO

Effettuare i collegamenti come mostrato in fig.

1. Collegare il pin cs al pin digitale 10.
2. Collegare il pin SCK al pin digitale 13.
3. Collegare il pin SDI / SDO al pin digitale 11.
4. VSS al pin di messa a terra di arduino
5. Pin da PA0 a 5v di arduino
6. PB0 a massa di arduino
7. PWO al pin analogico A0 di arduino.
8. VCC a 5 v di arduino.

CODICE PROGRAMMA 1

Questo codice stampa la variazione di tensione attraverso il terminale del tergicristallo e la massa sul monitor seriale dell'IDE di Arduino.

#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)

CODICE SPIEGAZIONE 1:

Per utilizzare il potenziometro digitale con arduino è necessario includere prima la libreria SPI, fornita nello stesso IDE di arduino. Basta chiamare la libreria con questo comando:
#includere

Nella configurazione void, i pin vengono assegnati come output o input. E vengono forniti anche i comandi per iniziare SPI e la comunicazione seriale tra arduino e ic che sono:

#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}

In void loop, for loop viene utilizzato per modificare la resistenza del potenziometro digitale in 256 passi totali. Prima da 0 a 255 e poi di nuovo a 0 con un ritardo di 10 millisecondi tra ogni passaggio:

SPI.begin() and Serial.begin(9600)

La funzione digitalPotWrite (i) scrive questo valore per modificare la resistenza a un particolare indirizzo di ic.

La resistenza tra wiper e terminale terminale può essere calcolata utilizzando queste formule:

R1 = 10k * (256 livelli) / 256 + Rw
E
R2 = 10k * livello / 256 + Rw

Qui R1 = resistenza tra il tergicristallo e un terminale
R2 = resistenza tra wiper e altro terminale
Livello = passo in un particolare istante (variabile 'I' utilizzata nel ciclo for)
Rw = resistenza del tergicristallo (può essere trovato nel datasheet del ic)
Utilizzando la funzione digitalPotWrite (), il chip del potenziometro digitale viene selezionato assegnando una tensione BASSA al pin CS. Ora che l'IC è selezionato, deve essere chiamato un indirizzo su cui verranno scritti i dati. Nell'ultima parte del codice:

SPI. Trasferimento (B00010001)

Viene chiamato l'indirizzo che è B00010001 per selezionare il terminale del tergicristallo dell'IC su cui verranno scritti i dati. E quindi per il valore del loop, cioè, è scritto per cambiare la resistenza.

CIRCUITO FUNZIONANTE:

Finché il valore di i continua a cambiare l'ingresso sul pin A0 di arduino, continua a cambiare tra 0 e 1023. Ciò accade perché il terminale del tergicristallo è direttamente collegato al pin A0 e gli altri terminali del potenziometro sono collegati rispettivamente a 5 volt e terra. Ora, quando la resistenza cambia, cambia anche la tensione attraverso di essa che viene presa direttamente da arduino come input e quindi otteniamo un valore di tensione sul monitor seriale per un particolare valore di resistenza.

SIMULAZIONE 1:

Queste sono alcune immagini di simulazione per questo circuito a vari valori di i:

Ora basta collegare un led in serie con una resistenza da 220ohm al terminale del tergicristallo dell'IC come mostrato in figura.

CODICE 2:

for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)

CODICE SPIEGAZIONE 2:

Questo codice è simile al codice 1 tranne per il fatto che non ci sono comandi seriali in questo codice. Quindi nessun valore verrà stampato sul monitor seriale.

SPIEGAZIONE DI LAVORO

Poiché il LED è collegato tra il terminale del tergicristallo e la massa quando la resistenza cambia, anche la tensione ai capi del LED. E quindi come la resistenza attraverso la quale il led è collegato sale da 0ohm al massimo, così fa la luminosità del led. Che di nuovo svaniscono lentamente a causa della diminuzione della resistenza dal massimo a 0v.

Simulazione 2

Simulazione 3




Precedente: Come controllare il servomotore utilizzando il joystick Avanti: crea questo amperometro digitale avanzato usando Arduino