Digitaalse potentsiomeetri MCP41xx kasutamine koos Arduinoga

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles projektis ühendame digitaalse potentsiomeetri arduinoga. Selles demonstratsioonpotentsiomeetris kasutatakse MCP41010, kuid võite kasutada mis tahes MC41 ** seeria digitaalset potentsiomeetrit.

Autor Ankit Negi



SISSEJUHATUS MC41010-le

Digitaalsed potentsiomeetrid on täpselt nagu iga kolme klemmiga analoog-potentsiomeeter, millel on ainult üks erinevus. Kui analoogseadmes peate klaasipuhasti asendit käsitsi muutma, siis digitaalse potentsiomeetri korral seatakse klaasipuhasti asend vastavalt potentsiomeetrile antud signaalile mis tahes mikrokontrolleri või mikroprotsessori abil.

Joonis fig. MC41010 IC tihvt

Joonis fig. MC41010 IC tihvt



MC41010 on 8-kontaktiline kaherealine pakett IC. Nagu iga analoog-potentsiomeeter, on ka see IC 5k, 10k, 50k ja 100k. Selles vooluringis kasutatakse 10k potentsiomeetrit
MC4131-l on järgmised 8 terminali:

PIN-kood PIN-kood Väike kirjeldus

1 CS Seda tihvti kasutatakse arduinoga ühendatud orja või välisseadme valimiseks. Kui see nii on
Madal, siis valitakse MC41010 ja kui see on kõrge, siis MC41010 tühistatakse.

2 SCLK jagatud / jadkell, arduino annab kella andmeedastuse lähtestamiseks
Arduino IC-le ja vastupidi.

3 SDI / SDO jadaandmeid edastatakse selle tihvti kaudu arduino ja IC vahel
Arduino 4 VSS maapealne terminal on ühendatud selle IC tihvtiga.

5 PA0 See on potentsiomeetri üks klemm.

6 PW0 See klemm on potentsiomeetri klaasipuhasti klemm (takistuse muutmiseks)
7 PB0 See on potentsiomeetri teine ​​klemm.

Selle tihvti kaudu antakse 8 VCC toide IC-le.

See IC sisaldab ainult ühte potentsiomeetrit. Mõnes IC-s on sisseehitatud maksimaalselt kaks potentsiomeetrit. See
Klaasipuhasti ja mis tahes muu klemmi vahelise takistuse väärtust muudetakse 256 sammuga vahemikus 0 kuni 255. Kuna kasutame 10 k takistit, muudetakse takisti väärtust järgmiste sammude kaupa:
10k / 256 = 39 oomi sammu kohta vahemikus 0 kuni 255

KOMPONENDID

Selle projekti jaoks vajame järgmisi komponente.

1. ARDUINO
2. MC41010 IC
3. 220 OHM TAKISTUS
4. LED
5. Juhtmete ühendamine

Looge ühendused, nagu on näidatud joonisel fig.

1. Ühendage cs-tihvt digitaalse tihvtiga 10.
2. Ühendage SCK tihvt digitaalse tihvtiga 13.
3. Ühendage SDI / SDO tihvt digitaalse tihvtiga 11.
4. VSS maandatud arduino tihvti külge
5. PA0 kuni 5v pin arduino
6. PB0 arduino maapinnale
7. PWO arduino analoognõela A0 külge.
8. VCC kuni 5 v arduino.

PROGRAMMI KOOD 1

See kood prindib pinge muutuse klaasipuhasti terminalis ja maas Arduino IDE seeriamonitoril.

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

SELGITAV KOOD 1:

Digitaalse potentsiomeetri kasutamiseks arduinoga peate kõigepealt lisama SPI teegi, mis on arduino IDE-s endas. Helistage lihtsalt selle käsuga teeki:
# kaasata

Tühise seadistuse korral määratakse tihvtid väljundiks või sisendiks. Samuti antakse käsklused SPI ja seeriaühenduse alustamiseks arduino ja ic vahel, mis on:

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

Tühjusilmusena kasutatakse loopi jaoks digitaalse poti takistuse muutmiseks kokku 256 sammu. Kõigepealt vahemikus 0 kuni 255 ja seejärel uuesti 0-ni, iga sammu vahel 10 millisekundilise viivitusega:

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

funktsioon digitalPotWrite (i) kirjutab selle väärtuse, et muuta vastupanu ic konkreetsel aadressil.

Vastupanu klaasipuhasti ja otsaklemmi vahel saab arvutada järgmiste valemite abil:

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

Siin R1 = takistus klaasipuhasti ja ühe klemmi vahel
R2 = klaasipuhasti ja muu klemmi vaheline takistus
Tase = samm konkreetsel hetkel (muutuja “I” kasutatakse silmuseks)
Rw = klaasipuhasti klemmi takistus (leiate ic-i andmelehelt)
Funktsiooni digitalPotWrite () abil valitakse digitaalse potentsiomeetri kiip, määrates CS-pinile LOW pinge. Nüüd, kui ic on valitud, tuleb kutsuda aadress, millele andmed kirjutatakse. Koodi viimases osas:

SPI.transfer (B00010001)

Aadressi nimega B00010001 valitakse ic-i klaasipuhasti terminal, millele andmed kirjutatakse. Ja seega on silmuse väärtuse jaoks kirjutatud, et takistuse muutmiseks.

JOONITÖÖ:

Niikaua kui i väärtus muutub pidevalt sisendiks A0 pin-ile, muutub ka Arduino 0 kuni 1023. See juhtub seetõttu, et klaasipuhasti klemm on otseselt ühendatud A0 tihvtiga ja muud potentsiomeetri klemmid on ühendatud vastavalt 5-voldise ja maandatud. Kui takistus muutub, siis muutke ka selle pinget, mida arduino võtab otse sisendina, ja seeläbi saame seeriamonitoril konkreetse takistuse väärtuse pinge.

1. simulatsioon:

Need on mõned selle vooluringi simulatsioonipildid i erinevatel väärtustel:

Nüüd ühendage lihtsalt seeria 220ohm takisti abil IC klaasipuhasti klemmiga, nagu joonisel näidatud.

KOOD 2:

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

SELGITAV KOOD 2:

See kood sarnaneb koodiga 1, välja arvatud see, et selles koodis pole jadakäske. Seega seeriamonitorile väärtusi ei trükita.

TÖÖSELGITUS

Kuna led on ühendatud klaasipuhasti klemmi ja maanduse vahel, kuna takistus muutub, muutub ka ledi pinge. Ja kui vastupanu, mille kaudu led on ühendatud, tõuseb 0ohmilt maksimaalsele, suureneb ka ledi heledus. Mis jällegi aeglaselt kaob takistuse vähenemise tõttu maksimaalsest väärtuseni 0v.

Simulatsioon

Simulatsioon




Eelmine: Kuidas juhtimiskangi abil servomootorit juhtida Järgmine: tehke see täiustatud digitaalne ampermeeter Arduino abil