Utilizarea Potențiometrului digital MCP41xx Cu Arduino

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest proiect vom interfața un potențiometru digital cu arduino. În acest demonstrație este utilizat potențiometrul MCP41010, dar puteți utiliza orice potențiometru digital din seria MC41 **.

De Ankit Negi



INTRODUCERE LA MC41010

Potențiometrele digitale sunt la fel ca orice potențiometru analogic cu trei terminale cu o singură diferență. În timp ce în cea analogică trebuie să schimbați manual poziția ștergătorului, în cazul potențiometrului digital poziția ștergătorului este setată în funcție de semnalul dat potențiometrului utilizând orice microcontroler sau microprocesor.

FIG. MC41010 Pinout IC

FIG. MC41010 Pinout IC



MC41010 este un IC cu pachet dual cu 8 pini. La fel ca orice potențiometru analogic, acest IC vine în 5k, 10k, 50k și 100k. În acest circuit se folosește un potențiometru de 10k
MC4131 are următoarele 8 terminale:

Pinul nr. Nume PIN Descriere mică

1 CS Acest pin este utilizat pentru a selecta sclavul sau perifericul conectat la arduino. Dacă aceasta este
Scăzut, atunci este selectat MC41010 și dacă acesta este ridicat, atunci MC41010 este deselectat.

2 SCLK Shared / Serial Clock, arduino oferă ceas pentru inițializarea transferului de date de la
Arduino la IC și invers.

3 SDI / SDO Datele seriale sunt transferate între arduino și IC prin acest pin
Terminalul de masă VSS 4 al arduino este conectat la acest pin al IC.

5 PA0 Acesta este un terminal al potențiometrului.

6 PW0 Acest terminal este terminalul ștergătorului potențiometrului (pentru a schimba rezistența)
7 PB0 Acesta este un alt terminal al potențiometrului.

8 VCC Puterea către IC este dată prin acest pin.

Acest IC conține un singur potențiometru. Unele IC au cel mult două potențiometre încorporate. Acest
Valoarea rezistenței dintre ștergător și orice alt terminal este modificată în 256 de pași, de la 0 la 255. Deoarece utilizăm un rezistor de 10k, valoarea rezistorului este modificată în pași de:
10k / 256 = 39 ohmi pe pas între 0 și 255

COMPONENTE

Avem nevoie de următoarele componente pentru acest proiect.

1. ARDUINO
2. MC41010 IC
3. 220 OHM RESISTOR
4. LED
5. CONEXIUNEA SIRURILOR

Faceți conexiuni așa cum se arată în fig.

1. Conectați pinul cs la pinul digital 10.
2. Conectați pinul SCK la pinul digital 13.
3. Conectați pinul SDI / SDO la pinul digital 11.
4. VSS la pinul arduino
5. PA0 la 5v pin de arduino
6. PB0 la solul arduino
7. PWO la pinul analogic A0 al arduino.
8. VCC la 5 v de arduino.

CODUL PROGRAMULUI 1

Acest cod tipărește modificarea tensiunii pe terminalul ștergătorului și la masă pe monitorul serial al IDE 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)

EXPLICAREA CODULUI 1:

Pentru a utiliza potențiometrul digital cu arduino, trebuie să includeți mai întâi biblioteca SPI, care este furnizată în ID-ul arduino în sine. Apelați biblioteca cu această comandă:
#include

În configurarea nulă, pinii sunt atribuiți ca ieșire sau intrare. Și sunt date comenzi pentru a începe SPI și comunicarea serială între arduino și ic care sunt:

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

În bucla nulă, bucla for este utilizată pentru a schimba rezistența potului digital în total 256 de pași. Mai întâi de la 0 la 255 și apoi din nou înapoi la 0 cu o întârziere de 10 milisecunde între fiecare pas:

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

funcția digitalPotWrite (i) scrie această valoare pentru a schimba rezistența la adresa particulară a ic.

Rezistența dintre ștergător și terminalul de capăt poate fi calculată folosind următoarele formule:

R1 = 10k * (256-nivel) / 256 + Rw
Și
R2 = 10k * nivel / 256 + Rw

Aici R1 = rezistența dintre ștergător și un terminal
R2 = rezistența dintre ștergător și alte borne
Nivel = pas la un anumit moment (variabila „I” utilizată pentru buclă)
Rw = rezistența terminalului ștergătorului (poate fi găsit în fișa tehnică a icului)
Folosind funcția digitalPotWrite (), cipul potențiometrului digital este selectat prin atribuirea de tensiune scăzută pinului CS. Acum, pe măsură ce ic-ul este selectat, trebuie apelată o adresă pe care vor fi scrise datele. În ultima porțiune de cod:

SPI.transfer (B00010001)

Adresa se numește B00010001 pentru a selecta terminalul ștergătorului ic pe care vor fi scrise datele. Și, prin urmare, pentru valoarea buclei, adică, i este scris pentru a schimba rezistența.

FUNCȚIONAREA CIRCUITULUI:

Atâta timp cât valoarea lui i continuă să schimbe intrarea pe pinul A0 al arduino, se schimbă și între 0 și 1023. Acest lucru se întâmplă deoarece terminalul ștergătorului este conectat direct la pinul A0, iar celelalte terminale ale potențiometrului sunt conectate la 5 volt și respectiv la masă. Acum, când rezistența se schimbă, se schimbă tensiunea pe ea, care este luată direct de arduino ca intrare și astfel obținem o valoare a tensiunii pe monitorul serial pentru o anumită valoare a rezistenței.

SIMULARE 1:

Acestea sunt câteva imagini de simulare pentru acest circuit la diferite valori de i:

Acum, pur și simplu conectați un led în serie cu rezistor de 220ohm la terminalul ștergătorului IC, așa cum se arată în figură.

COD 2:

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

EXPLICAREA CODULUI 2:

Acest cod este similar cu codul 1, cu excepția faptului că nu există comenzi seriale în acest cod. Deci nu se vor imprima valori pe monitorul serial.

EXPLICAȚIE DE LUCRU

Deoarece ledul este conectat între terminalul ștergătorului și masă pe măsură ce rezistența se schimbă, la fel se face și tensiunea pe led. Prin urmare, pe măsură ce rezistența prin care este conectat ledul crește de la 0ohm la maxim, la fel crește luminozitatea ledului. Care din nou se estompează lent din cauza scăderii rezistenței de la maxim la 0v.

Simulare2

Simulare3




Precedent: Cum se controlează servomotorul folosind joystick-ul În continuare: Faceți acest ampermetru digital avansat folosind Arduino