Az MCP41xx digitális potenciométer használata Arduinóval

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a projektben egy digitális potenciométert fogunk összekapcsolni az arduino-val. Ebben a bemutatóban az MCP41010 potenciométert használják, de bármelyik MC41 ** sorozatú digitális potenciométer használható.

Írta Ankit Negi



BEVEZETÉS az MC41010-be

A digitális potenciométerek olyanok, mint bármely analóg potenciométer, három kivezetéssel, csak egy különbséggel. Míg az analóg módban manuálisan kell megváltoztatni az ablaktörlő helyzetét, Digitális potenciométer esetén az ablaktörlő helyzetét a potenciométerre adott jelnek megfelelően állítják be bármilyen mikrovezérlő vagy mikroprocesszor segítségével.

ÁBRA. MC41010 IC kivezetés

ÁBRA. MC41010 IC kivezetés



Az MC41010 egy 8 tűs kettős vonalas IC csomag. Mint minden analóg potenciométer, ez az IC is 5k, 10k, 50k és 100k. Ebben az áramkörben 10k potenciométert használnak
Az MC4131 a következő 8 terminállal rendelkezik:

PIN-szám Pin neve Kis leírás

1 CS Ez a csap a slave vagy periféria kiválasztására szolgál, amely az arduino-hoz csatlakozik. Ha ez van
Alacsony, akkor az MC41010 értéket választja, és ha ez magas, akkor az MC41010 kijelölést megszünteti.

2 SCLK megosztott / soros óra, az arduino órát ad az adatátvitel inicializálásához
Arduino az IC-hez és fordítva.

3 SDI / SDO A soros adatokat ezen a csapon keresztül továbbítják az arduino és az IC között
Az arduino 4 VSS földi terminálja csatlakozik az IC ehhez a tűjéhez.

5 PA0 Ez a potenciométer egyik kapcsa.

6 PW0 Ez a kapocs a potenciométer ablaktörlő kapcsa (az ellenállás megváltoztatásához)
7 PB0 Ez a potenciométer másik kapcsa.

Ezen a tűn keresztül 8 VCC tápellátás az IC-hez.

Ez az IC csak egy potenciométert tartalmaz. Néhány IC legfeljebb két potenciométerrel rendelkezik. Ez
Az ablaktörlő és bármely más terminál közötti ellenállás értéke 256 lépésben, 0-ról 255-re változik. Mivel 10k ellenállást használunk, az ellenállás értékét a következő lépésekben változtatjuk meg:
10k / 256 = 39 ohm lépésenként 0 és 255 között

ALKATRÉSZEK

A projekthez a következő összetevőkre van szükségünk.

1. ARDUINO
2. MC41010 IC
3. 220 ohmos ellenállás
4. LED
5. VEZETÉKEK CSATLAKOZTATÁSA

Csatlakoztassa a 2. ábrán látható módon.

1. Csatlakoztassa a cs tűt a 10. digitális tűhöz.
2. Csatlakoztassa az SCK tűt a 13 digitális csatlakozóhoz.
3. Csatlakoztassa az SDI / SDO tűt a 11. digitális csatlakozóhoz.
4. VSS az arduino földelt csapjához
5. PA0 - 5 V tűs arduino
6. PB0 az arduino földjére
7. PWO az arduino A0 analóg tűjéhez.
8. VCC 5 v arduino-ra.

PROGRAMKÓD 1

Ez a kód kinyomtatja az ablaktörlő terminál és a föld feszültségváltozását az Arduino IDE soros monitorján.

#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. MAGYARÁZÓ KÓD:

Az arduino digitális potenciométer használatához először be kell vonni az SPI könyvtárat, amely magában az arduino IDE-ben található. Csak hívja a könyvtárat ezzel a paranccsal:
#include

Az érvénytelen beállításban a csapok kimenetként vagy bemenetként vannak hozzárendelve. Parancsok az SPI elindítására, valamint az arduino és az ic közötti soros kommunikáció megadására is sor kerül, amelyek a következők:

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

A void ciklusban a hurokhoz a digitális pot ellenállásának megváltoztatására szolgál, összesen 256 lépésben. Először 0-tól 255-ig, majd ismét 0-ig 10 milliszekundum késéssel az egyes lépések között:

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

A digitalPotWrite (i) függvény írja le ezeket az értékeket, hogy megváltoztassa az ellenállást az ic adott címén.

Az ablaktörlő és a végkapocs közötti ellenállást a következő képletekkel lehet kiszámítani:

R1 = 10k * (256-szintű) / 256 + Rw
És
R2 = 10k * szint / 256 + Rw

Itt R1 = ellenállás az ablaktörlő és az egyik kapocs között
R2 = ellenállás az ablaktörlő és a többi kapocs között
Szint = lépés egy adott pillanatban (a ciklushoz használt „I” változó)
Rw = ablaktörlő terminál ellenállása (megtalálható az ic adatlapján)
A digitalPotWrite () funkció használatával a digitális potenciométer chipet úgy választják meg, hogy az alacsony feszültséget hozzárendelik a CS csaphoz. Most, amikor az ic-t választja, meg kell hívni egy címet, amelyre az adatokat írják. A kód utolsó részében:

SPI.transfer (B00010001)

A címet hívjuk meg, amely B00010001, hogy kiválasszuk az ic ablaktörlő terminálját, amelyre az adatokat fel fogjuk írni. Ezért a hurok értékére, azaz i-re írják, hogy megváltoztassa az ellenállást.

ÁRAMKEZELÉS:

Mindaddig, amíg az i értéke folyamatosan változtatja a bemenetet az A0 tűre, az arduino szintén változik 0 és 1023 között. Ez azért történik, mert az ablaktörlő kapcsa közvetlenül csatlakozik az A0 tűhöz, és a potenciométer más kapcsa az 5 voltos, illetve a földeléshez csatlakozik. Ha az ellenállás változik, akkor a feszültség is változik rajta, amelyet az arduino közvetlenül vesz be bemenetként, és így kapunk egy feszültségértéket a soros monitoron egy adott ellenállásértékre.

1. SZIMULÁCIÓ:

Néhány szimulációs kép ehhez az áramkörhöz az i különböző értékein:

Most csak csatlakoztasson egy vezetéket soros 220ohmos ellenállással az IC ablaktörlő kapcsa felé, az ábra szerint.

2. KÓD:

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

2. MAGYARÁZÓ KÓD:

Ez a kód hasonló az 1. kódhoz, azzal a különbséggel, hogy ebben a kódban nincs soros parancs. Tehát semmilyen értéket nem nyomtat a soros monitor.

MUNKAMagyarázat

Mivel az elvezetés az ablaktörlő kapcsa és a föld között van, mivel az ellenállás megváltozik, így a led feszültsége is változik. És ezért az ellenállás, amelyen keresztül a led összekapcsolódik, 0ohm-ról a maximálisra nő, így a led fényereje is. Ami ismét lassan elhalványul az ellenállás maximumról 0v-ra való csökkenése miatt.

Szimuláció2

Szimuláció3




Előző: Hogyan lehet vezérelni a szervomotort a joystick használatával Következő: Készítse el ezt a fejlett digitális ampermérőt az Arduino használatával