Skaitmeninio potenciometro MCP41xx naudojimas su „Arduino“

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame projekte ketiname susieti skaitmeninį potenciometrą su „Arduino“. Šiame demonstraciniame potenciometre naudojamas MCP41010, tačiau galite naudoti bet kurį skaitmeninį MC41 ** serijos potenciometrą.

Autorius Ankit Negi



Įvadas į MC41010

Skaitmeniniai potenciometrai yra kaip ir bet kuris analoginis potenciometras su trimis gnybtais, turint tik vieną skirtumą. Tuo tarpu analoginiame jūs turite rankiniu būdu pakeisti valytuvo padėtį, jei skaitmeninis potenciometras, valytuvo padėtis nustatoma pagal potenciometrui duotą signalą naudojant bet kurį mikrovaldiklį ar mikroprocesorių.

Fig. MC41010 IC kištukas

Fig. MC41010 IC kištukas



MC41010 yra 8 kontaktų dvigubos linijos paketo IC. Kaip ir bet kuris analoginis potenciometras, šis IC yra 5k, 10k, 50k ir 100k. Šioje grandinėje naudojamas 10k potenciometras
MC4131 turi šiuos 8 gnybtus:

Smeigtukas Nr. PIN pavadinimas Mažas aprašymas

1 CS Šis kaištis naudojamas pasirinkti vergą ar periferinį įrenginį, prijungtą prie „Arduino“. Jei taip yra
Žemas, tada pasirenkamas MC41010, o jei jis yra didelis, MC41010 nepažymima.

2 „SCLK Shared / Serial Clock“, „Arduino“ suteikia laikrodį, kad būtų galima inicijuoti duomenų perdavimą iš
Arduino į IC ir atvirkščiai.

3 SDI / SDO nuoseklūs duomenys perduodami tarp „arduino“ ir „IC“ per šį kaištį
4 VSS antžeminis „Arduino“ terminalas yra prijungtas prie šio IC kaiščio.

5 PA0 Tai yra vienas potenciometro gnybtas.

6 PW0 Šis gnybtas yra potenciometro valytuvo gnybtas (norint pakeisti pasipriešinimą)
7 PB0 Tai dar vienas potenciometro gnybtas.

8 VCC maitinimas IC gaunamas per šį kaištį.

Šiame IC yra tik vienas potenciometras. Kai kuriuose IC yra įmontuoti daugiausia du potenciometrai. Tai
Pasipriešinimo tarp valytuvo ir bet kurio kito gnybto vertė keičiama 256 žingsniais, nuo 0 iki 255. Kadangi mes naudojame 10 k, rezistoriaus vertė keičiama atliekant šiuos veiksmus:
10k / 256 = 39 omai žingsnyje tarp 0 ir 255

KOMPONENTAI

Šiam projektui reikia šių komponentų.

1. ARDUINO
2. MC41010 IC
3. 220 OHM rezistorius
4. Šviesos diodas
5. LAIDŲ JUNGIMAS

Prijunkite jungtis, kaip parodyta fig.

1. Prijunkite cs kaištį prie 10 skaitmeninio kaiščio.
2. Prijunkite SCK kaištį prie skaitmeninio 13 kaiščio.
3. Prijunkite SDI / SDO kaištį prie 11 skaitmeninio kaiščio.
4. VSS į įžemintą arduino kaištį
5. PA0 iki 5v arduino kaištis
6. PB0 iki arduino žemės
7. PWO į analoginį „arduino“ kaištį A0.
8. VCC iki 5 v arduino.

PROGRAMOS KODAS 1

Šis kodas spausdina „Arduino IDE“ nuosekliojo monitoriaus įtampos pokyčius valytuvų gnybtuose ir žemėje.

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

1 AIŠKINAMASIS KODAS:

Norėdami naudoti skaitmeninį potenciometrą su „arduino“, pirmiausia turite įtraukti SPI biblioteką, kuri pateikiama pačiame „Arduino IDE“. Tiesiog paskambinkite bibliotekai naudodami šią komandą:
# įtraukti

Taisyklių nustatymo metu kaiščiai priskiriami kaip išvestis arba įvestis. Taip pat pateikiamos komandos pradėti SPI ir nuoseklų ryšį tarp „arduino“ ir „ic“:

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

Tuščiajame cikle „loop“ naudojama norint pakeisti skaitmeninio puodo atsparumą iš viso 256 žingsniais. Pirmiausia nuo 0 iki 255, tada vėl grįžkite į 0 su 10 milisekundžių vėlavimu tarp kiekvieno žingsnio:

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

„digitalPotWrite“ (i) funkcija užrašo šią vertę, kad pakeistų atsparumą tam tikru ic adresu.

Varžą tarp valytuvo ir galinio gnybto galima apskaičiuoti naudojant šias formules:

R1 = 10k * (256 lygiai) / 256 + Rw
Ir
R2 = 10k * lygis / 256 + Rw

Čia R1 = varža tarp valytuvo ir vieno gnybto
R2 = varža tarp valytuvo ir kito gnybto
Lygis = žingsnis tam tikru momentu (kintamasis „I“ naudojamas kilpai)
Rw = valytuvo terminalo varža (galima rasti ic duomenų lape)
Naudojant „digitalPotWrite“ () funkciją, skaitmeninis potenciometro lustas parenkamas priskyrus LOW įtampą CS kaiščiui. Dabar, kai pasirenkamas ic, reikia iškviesti adresą, kuriuo bus užrašyti duomenys. Paskutinėje kodo dalyje:

SPI.transfer (B00010001)

Kviečiamas adresas, kuris yra B00010001, kad būtų galima pasirinkti ic valytuvo terminalą, kuriame bus įrašyti duomenys. Taigi, kilpos vertei, t. Y., Parašyta, kad pakeistų pasipriešinimą.

DIRBTINIS DIRBTINIS:

Tol, kol i reikšmė nuolat keičia įvestį į A0 arduino kaištį, taip pat keičiasi nuo 0 iki 1023. Taip atsitinka todėl, kad valytuvo gnybtas yra tiesiogiai sujungtas su A0 kaiščiu, o kitas potenciometro gnybtas yra atitinkamai prijungtas prie 5 voltų ir žemės. Dabar, kai pasipriešinimas pasikeičia, keičiasi ir jo įtampa, kurią tiesiogiai ima „arduino“, taigi serijiniame monitoriuje gauname tam tikros varžos vertės įtampos vertę.

1 simuliacija:

Tai yra keletas šios grandinės modeliavimo paveikslėlių esant įvairioms i vertėms:

Dabar tiesiog prijunkite seriją su 220ohm rezistoriumi su IC valytuvo gnybtu, kaip parodyta paveikslėlyje.

2 KODAS:

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

2 AIŠKINAMASIS KODAS:

Šis kodas yra panašus į 1 kodą, išskyrus tai, kad šiame kode nėra serijinių komandų. Taigi serijiniame monitoriuje jokios vertės nebus atspausdintos.

DARBO PAAIŠKINIMAS

Kadangi lempa yra sujungta tarp valytuvo gnybto ir žemės, kai keičiasi pasipriešinimas, keičiasi ir įtampa. Taigi, kai pasipriešinimas, per kurį sujungta lempa, padidėja nuo 0ohm iki didžiausio, didėja ir ledo ryškumas. Kuris vėl lėtai nyksta dėl atsparumo sumažėjimo nuo didžiausio iki 0v.

Modeliavimas2

Modeliavimas3




Pora: Kaip valdyti servovariklį naudojant vairasvirtę Kitas: Padarykite šį pažangų skaitmeninį ampermetrą naudodami „Arduino“