Brug af digitalt potentiometer MCP41xx med Arduino

Brug af digitalt potentiometer MCP41xx med Arduino

I dette projekt vil vi interface et digitalt potentiometer med arduino. I denne demonstration anvendes potentiometer MCP41010, men du kan bruge ethvert digitalt potentiometer i MC41 ** -serien.



Af Ankit Negi

INTRODUKTION TIL MC41010

Digitale potentiometre er ligesom ethvert analogt potentiometer med tre terminaler med kun en forskel. Mens der i analog er nødvendigt manuelt at ændre viskerpositionen. I tilfælde af digitalt potentiometer indstilles viskerpositionen i henhold til signalet, der gives til potentiometeret ved hjælp af en hvilken som helst mikrokontroller eller mikroprocessor.





Fig. MC41010 IC pinout

Fig. MC41010 IC pinout

MC41010 er en 8-pin dobbelt IC-pakke. Ligesom ethvert analogt potentiometer kommer denne IC i 5k, 10k, 50k og 100k. I dette kredsløb anvendes 10k potentiometer
MC4131 har følgende 8 terminaler:



Pin nr. Pin-navn Lille beskrivelse

1 CS Denne pin bruges til at vælge den slave eller perifere enhed, der er forbundet med arduino. Hvis dette er tilfældet
Lav derefter vælges MC41010, og hvis dette er højt, er MC41010 fravalgt.

2 SCLK Shared / Serial Clock, arduino giver ur til initialisering af dataoverførsel fra
Arduino til IC og omvendt.

3 SDI / SDO Serielle data overføres mellem arduino og IC gennem denne pin
4 VSS Jordterminal på arduino er forbundet til denne pin af IC.

5 PA0 Dette er en terminal på potentiometeret.

6 PW0 Denne terminal er en viskerterminal på potentiometeret (for at ændre modstand)
7 PB0 Dette er en anden terminal på potentiometeret.

8 VCC Power til IC gives via denne pin.

Denne IC indeholder kun et potentiometer. Nogle IC har højst to potentiometer indbyggede. Dette
Værdien af ​​modstanden mellem visker og enhver anden terminal ændres i 256 trin, fra 0 til 255. Da vi bruger en 10 k modstandsværdi, ændres modstanden i trin af:
10k / 256 = 39 ohm pr. Trin mellem 0 og 255

KOMPONENTER

Vi har brug for følgende komponenter til dette projekt.

1. ARDUINO
2. MC41010 IC
3. 220 OHM-MODSTAND
4. LED
5. TILSLUTNING AF KABLER

Foretag tilslutninger som vist i fig.

1. Tilslut cs-pin til digital pin 10.
2. Tilslut SCK-pin til digital pin 13.
3. Tilslut SDI / SDO-pin til digital pin 11.
4. VSS til jordstift af arduino
5. PA0 til 5v pin af arduino
6. PB0 til jord af arduino
7. PWO til analog pin A0 af arduino.
8. VCC til 5 v arduino.

PROGRAMKODE 1

Denne kode udskriver spændingsændringen over viskerterminal og jord på Serial Monitor af Arduino IDE.

#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)

FORKLARING AF KODE 1:

For at bruge digitalt potentiometer med arduino skal du først medtage SPI-bibliotek, som findes i arduino IDE selv. Bare ring til biblioteket med denne kommando:
#omfatte

I ugyldig opsætning tildeles ben som output eller input. Og kommandoer til at begynde SPI og seriel kommunikation mellem arduino og ic gives også, som er:

#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)
}

I ugyldig sløjfe bruges til sløjfe til at ændre modstanden i den digitale pot i alt 256 trin. Først fra 0 til 255 og derefter igen tilbage til 0 med en forsinkelse på 10 millisekunder mellem hvert trin:

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

digitalPotWrite (i) -funktionen skriver denne værdi for at ændre modstand på en bestemt adresse på ic.

Modstand mellem visker og endeterminal kan beregnes ved hjælp af disse formler:

R1 = 10k * (256-niveau) / 256 + Rw
Og
R2 = 10k * niveau / 256 + Rw

Her er R1 = modstand mellem visker og en terminal
R2 = modstand mellem visker og anden terminal
Niveau = trin på et bestemt øjeblik (variabel “I” bruges i til loop)
Rw = modstand af viskerterminal (kan findes i databladet til ic)
Ved hjælp af digitalPotWrite () -funktionen vælges den digitale potentiometerchip ved at tildele LAV spænding til CS-pin. Når ic er valgt, skal der nu kaldes en adresse, hvor dataene skrives. I den sidste del af koden:

SPI.transfer (B00010001)

Adresse kaldes, hvilket er B00010001 for at vælge viskerterminalen på den ic, som data skal skrives på. Og dermed for sløjfens værdi, dvs. jeg er skrevet for at ændre modstanden.

KREDSKABSARBEJDE:

Så længe værdien i fortsætter med at skifte input til A0-stift af arduino, ændrer den også mellem 0 og 1023. Dette sker, fordi viskerterminal er direkte forbundet til A0-stift, og anden terminal af potentiometer er tilsluttet henholdsvis 5 volt og jord. Når modstanden ændrer sig nu, ændres spændingen over den, som tages direkte af arduino som input, og dermed får vi en spændingsværdi på seriel skærm til en bestemt modstandsværdi.

SIMULATION 1:

Dette er nogle simuleringsbilleder til dette kredsløb ved forskellige værdier af i:

Tilslut nu bare en led i serie med 220 ohm modstand til viskerterminalen på IC som vist i figuren.

KODE 2:

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

FORKLARENDE KODE 2:

Denne kode svarer til kode 1 bortset fra at der ikke er nogen serielle kommandoer i denne kode. Så der udskrives ingen værdier på seriel skærm.

ARBEJDSFORKLARING

Da led er forbundet mellem viskerterminal og jord, når modstanden ændrer sig, gør spænding på tværs af led. Og derfor, når modstand på tværs af hvilken led er forbundet, stiger fra 0ohm til maksimum, så gør lysstyrken på ledet også. Som igen langsomt forsvinder på grund af fald i modstand fra maksimum til 0v.

Simulation2

Simulation3




Forrige: Sådan styres servomotor ved hjælp af joystick Næste: Lav dette avancerede digitale amperemeter ved hjælp af Arduino