Uporaba digitalnega potenciometra MCP41xx z Arduinom

Preizkusite Naš Instrument Za Odpravo Težav





V tem projektu bomo povezali digitalni potenciometer z arduinom. V tem demonstracijskem potenciometru je uporabljen MCP41010, lahko pa uporabite kateri koli digitalni potenciometer serije MC41 **.

Avtor Ankit Negi



UVOD V MC41010

Digitalni potenciometri so tako kot vsi analogni potenciometri s tremi terminali z samo eno razliko. Medtem ko morate pri analognem ročno spremeniti položaj brisalcev, se pri digitalnem potenciometru položaj brisalcev nastavi glede na signal, ki ga daje potenciometer z uporabo katerega koli mikrokrmilnika ali mikroprocesorja.

Sl. MC41010 IC pinout

Sl. MC41010 IC pinout



MC41010 je 8-polni dvovrstni IC paket. Tako kot kateri koli analogni potenciometer je tudi ta IC v 5k, 10k, 50k in 100k. V tem vezju se uporablja 10k potenciometer
MC4131 ima naslednjih 8 terminalov:

Pin št. Ime priimka Majhen opis

1 CS Ta pin se uporablja za izbiro pomožnega ali zunanjega priključka, priključenega na arduino. Če je to
Izbran je nizek potem MC41010 in če je ta visok, MC41010 ni več izbran.

2 SCLK Shared / Serial Clock, arduino daje uro za inicializacijo prenosa podatkov iz
Arduino na IC in obratno.

3 SDI / SDO Zaporedni podatki se prenašajo med arduino in IC prek tega zatiča
4 Ozemljitveni terminal VSS arduino je povezan s tem zatičem IC.

5 PA0 To je en terminal potenciometra.

6 PW0 Ta priključek je terminal brisalca potenciometra (za spremembo upora)
7 PB0 To je še en terminal potenciometra.

8 VCC Napajanje na IC se daje prek tega zatiča.

Ta IC vsebuje samo en potenciometer. Nekateri IC imajo vgrajena največ dva potenciometra. To
Vrednost upora med brisalcem in katerim koli drugim terminalom se spreminja v 256 korakih, od 0 do 255. Ker uporabljamo 10k upora, se vrednost upora spreminja v korakih:
10k / 256 = 39 ohmov na korak med 0 in 255

KOMPONENTE

Za ta projekt potrebujemo naslednje komponente.

1. ARDUINO
2. MC41010 IC
3. Upor 220 OHM
4. LED
5. POVEZOVANJE ŽIC

Vzpostavite povezave, kot je prikazano na sl.

1. Cs pin priklopite na digitalni pin 10.
2. Povežite zatič SCK z digitalnim zatičem 13.
3. Priključite zatič SDI / SDO v digitalni zatič 11.
4. VSS na ozemljitveni zatič arduina
5. PA0 do 5v pin arduino
6. PB0 do tal arduino
7. PWO na analogni zatič A0 arduina.
8. VCC do 5 v arduina.

KODA PROGRAMA 1

Ta koda natisne spremembo napetosti na priključku brisalca in ozemljitev na serijski monitor 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)

OBRAZLOŽITEV KODE 1:

Če želite uporabljati digitalni potenciometer z arduinom, morate najprej vključiti knjižnico SPI, ki je na voljo v samem arduino IDE. Preprosto pokličite knjižnico s tem ukazom:
#include

Pri nastavitvi praznine so zatiči dodeljeni kot izhod ali vhod. Podani so tudi ukazi za začetek SPI in serijske komunikacije med arduino in ic, ki so:

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

V zanki void se zanka for uporablja za spremembo upora digitalnega lonca v skupno 256 korakih. Najprej od 0 do 255 in nato spet nazaj na 0 z 10 milisekundno zakasnitvijo med posameznimi koraki:

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

funkcija digitalPotWrite (i) zapiše to vrednost za spremembo upora na določenem naslovu ic.

Odpornost med brisalcem in končnim terminalom lahko izračunamo po teh formulah:

R1 = 10k * (256-stopenjski) / 256 + Rw
In
R2 = 10k * raven / 256 + Rw

Tu je R1 = upor med brisalcem in enim priključkom
R2 = upor med brisalcem in drugim terminalom
Level = korak v določenem trenutku (spremenljivka 'I', uporabljena v zanki for)
Rw = upor terminala brisalcev (najdete v obrazcu IC)
S funkcijo digitalPotWrite () je čip digitalnega potenciometra izbran tako, da CS-pinu dodeli LOW napetost. Zdaj, ko je ic izbran, je treba poklicati naslov, na katerega bodo zapisani podatki. V zadnjem delu kode:

SPI.transfer (B00010001)

Pokliče se naslov, ki je B00010001, da izberete priključek brisalca ic, na katerem bodo zapisani podatki. In zato za vrednost zanke, tj., I je napisan za spremembo upora.

DELOVANJE V KOLU:

Dokler vrednost i nenehno spreminja vhod na pin A0 arduina, se spreminja tudi med 0 in 1023. To se zgodi, ker je priključek brisalca neposredno priključen na pin A0, drugi priključek potenciometra pa na 5 voltov oz. Zdaj, ko se upor spremeni, se spremeni tudi napetost na njem, ki jo arduino vzame neposredno kot vhod in tako dobimo vrednost napetosti na serijskem monitorju za določeno vrednost upora.

SIMULACIJA 1:

Tu je nekaj simulacijskih slik za to vezje pri različnih vrednostih i:

Zdaj le priključite serijsko led z uporom 220 ohmov na priključek IC brisalcev, kot je prikazano na sliki.

KODA 2:

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

OBRAZLOŽITEV KODE 2:

Ta koda je podobna kodi 1, le da v tej kodi ni zaporednih ukazov. Na serijski monitor torej ne bodo natisnjene nobene vrednosti.

POJASNILO PRI DELU

Ker je led povezan med priključkom brisalca in maso, ko se spreminja upor, se spreminja tudi napetost na vodilu. In zato, ko se odpornost, preko katere je povezan led, poveča od 0ohm na največjo, pa tudi svetlost vodnika. Ki spet počasi izginjajo zaradi zmanjšanja upora z največ na 0v.

Simulacija2

Simulacija3




Prejšnja: Kako upravljati servo motor z uporabo igralne palice Naprej: naredite ta napredni digitalni ampermeter z uporabo Arduina