Digitaalisen potentiometrin MCP41xx käyttäminen Arduinon kanssa

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä projektissa aiomme liittää digitaalisen potentiometrin arduinoon. Tässä esittelypotentiometrissä käytetään MCP41010, mutta voit käyttää mitä tahansa MC41 ** -sarjan digitaalista potentiometriä.

Kirjoittanut Ankit Negi



JOHDANTO MC41010: een

Digitaaliset potentiometrit ovat aivan kuten mikä tahansa analoginen potentiometri, jossa on kolme liitintä vain yhdellä erolla. Kun analogisessa tilassa pyyhkimen asento on vaihdettava manuaalisesti, digitaalisen potentiometrin tapauksessa pyyhkimen asento asetetaan potentiometrille millä tahansa mikrokontrollerilla tai mikroprosessorilla annetun signaalin mukaan.

KUVA. MC41010 IC-liitin

KUVA. MC41010 IC-liitin



MC41010 on 8-nastainen kaksirivinen paketti IC. Aivan kuten mikä tahansa analoginen potentiometri, tämä IC tulee 5k, 10k, 50k ja 100k. Tässä piirissä käytetään 10k potentiometriä
MC4131: ssä on seuraavat 8 liitintä:

Tappi nro. PIN-nimi Pieni kuvaus

1 CS Tätä nastaa käytetään arduinoon liitetyn orjan tai oheislaitteen valitsemiseen. Jos näin on
Matala, sitten valitaan MC41010 ja jos tämä on korkea, MC41010 poistetaan valinnasta.

2 SCLK-jaettu / sarjakello, arduino antaa kellon tiedonsiirron alustamiseksi
Arduino IC: lle ja päinvastoin.

3 SDI / SDO-sarjatietoa siirretään arduinon ja IC: n välillä tämän tapin kautta
Arduinon 4 VSS-maadoitusliitäntä on kytketty tähän IC-nastaan.

5 PA0 Tämä on yksi potentiometrin napoista.

6 PW0 Tämä liitin on potentiometrin pyyhinliitin (vastuksen muuttamiseksi)
7 PB0 Tämä on potentiometrin toinen napa.

8 VCC Virta IC: lle annetaan tämän nastan kautta.

Tämä IC sisältää vain yhden potentiometrin. Joissakin mikropiireissä on sisäänrakennettu enintään kaksi potentiometriä. Tämä
Pyyhkimen ja minkä tahansa muun liittimen välisen vastuksen arvoa muutetaan 256 portaalla, välillä 0 - 255. Koska käytämme 10 k: n vastuksen arvoa, vastuksen arvoa muutetaan vaiheittain:
10k / 256 = 39 ohmia / askel välillä 0 ja 255

KOMPONENTIT

Tarvitsemme seuraavia komponentteja tähän projektiin.

1. ARDUINO
2. MC41010 IC
3. 220 OHM -VASTUS
4. LED
5. JOHDOSTEN LIITTÄMINEN

Tee liitännät kuvan 4 mukaisesti.

1. Liitä cs-nasta digitaaliseen nastaan ​​10.
2. Liitä SCK-tappi digitaaliseen nastaan ​​13.
3. Liitä SDI / SDO-tappi digitaaliseen nastaan ​​11.
4. VSS maadoitettuun arduinon tapiin
5. PA0 - 5v nasta arduinoa
6. PB0 arduinon maahan
7. PWO arduinon analogiseen tapiin A0.
8. VCC 5 v arduinoon.

OHJELMAKOODI 1

Tämä koodi tulostaa jännitteen muutoksen pyyhkimen päätelaitteen ja maan välillä Arduino IDE -sarjan näytöllä.

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

SELITTÄVÄ KOODI 1:

Jos haluat käyttää digitaalista potentiometriä arduinon kanssa, sinun on ensin sisällytettävä SPI-kirjasto, joka on itse arduino IDE: ssä. Soita vain kirjastoon tällä komennolla:
#sisältää

Tyhjässä asennuksessa nastat määritetään lähdöksi tai tuloksi. Ja annetaan myös komentoja SPI: n ja sarjaliikenteen aloittamiseksi arduinon ja ic: n välillä:

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

Tyhjässä silmukassa, silmukalle käytetään digitaalisen potin vastuksen muuttamiseen yhteensä 256 askelta. Ensin 0: sta 255: een ja sitten takaisin 0: een 10 millisekunnin viiveellä kunkin vaiheen välillä:

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

digitalPotWrite (i) -funktio kirjoittaa tämän arvon vastuksen muuttamiseksi tietyllä ic-osoitteella.

Pyyhkimen ja päätelaitteen välinen vastus voidaan laskea seuraavilla kaavoilla:

R1 = 10k * (256-taso) / 256 + Rw
Ja
R2 = 10k * taso / 256 + Rw

Tässä R1 = vastus pyyhkimen ja yhden navan välillä
R2 = pyyhkimen ja muun liittimen välinen vastus
Taso = askel tietyllä hetkellä (muuttuja 'I' käytetään silmukassa)
Rw = pyyhinliittimen vastus (löytyy ic-tietolomakkeesta)
DigitalPotWrite () -toiminnon avulla digitaalinen potentiometrisiru valitaan osoittamalla LOW-jännite CS-nastalle. Nyt kun ic on valittu, on kutsuttava osoite, johon tiedot kirjoitetaan. Koodin viimeisessä osassa:

SPI.transfer (B00010001)

Osoitteeseen kutsutaan B00010001, jotta voidaan valita ic: n pyyhinliitin, johon tiedot kirjoitetaan. Ja näin ollen silmukan arvolle eli i kirjoitetaan vastuksen muuttamiseksi.

PIIRIN TOIMINTA:

Niin kauan kuin i: n arvo muuttuu jatkuvasti arduinon A0-nastaksi, muuttuu myös 0: n ja 1023: n välillä. Tämä tapahtuu, koska pyyhinliitin on kytketty suoraan A0-nastaan ​​ja muut potentiometrin liittimet on kytketty vastaavasti 5 volttiin ja maahan. Nyt kun vastus muuttuu, niin myös sen yli kulkeva jännite, jonka arduino ottaa suoraan sisääntulona, ​​ja näin saamme sarjajännitteen jännitteen arvon tietylle vastuksen arvolle.

SIMULOINTI 1:

Nämä ovat joitain simulointikuvia tälle piirille i: n eri arvoilla:

Liitä nyt sarjaan kytketty johdin 220 ohmin vastuksella IC: n pyyhinliittimeen kuvan osoittamalla tavalla.

KOODI 2:

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

SELITTÄVÄ KOODI 2:

Tämä koodi on samanlainen kuin koodi 1, paitsi että tässä koodissa ei ole sarjakomentoja. Sarjamonitorille ei siis tulosteta arvoja.

TYÖSELITYS

Koska led on kytketty pyyhinliittimen ja maan väliin vastuksen muuttuessa, niin myös ledin yli kulkeva jännite. Ja siten, kun vastus, jonka yli led on kytketty, nousee 0ohmista maksimiin, niin myös ledin kirkkaus. Joka taas hitaasti himmenee johtuen resistanssin laskusta maksimista 0v: iin.

Simulaatio 2

Simulaatio 3




Pari: Kuinka ohjata servomoottoria ohjaussauvalla Seuraava: Tee tämä kehittynyt digitaalinen ampeerimittari Arduinolla