Korištenje digitalnog potenciometra MCP41xx s Arduinom

Isprobajte Naš Instrument Za Uklanjanje Problema





U ovom ćemo projektu povezati digitalni potenciometar s arduinom. U ovom demonstracijskom potenciometru koristi se MCP41010, ali možete koristiti bilo koji digitalni potenciometar serije MC41 **.

Napisao Ankit Negi



UVOD U MC41010

Digitalni potenciometri su poput bilo kojeg analognog potenciometra s tri terminala sa samo jednom razlikom. Dok u analognom morate ručno promijeniti položaj brisača, u slučaju digitalnog potenciometra položaj brisača postavlja se prema signalu koji se daje potenciometru pomoću bilo kojeg mikrokontrolera ili mikroprocesora.

Sl. MC41010 IC pinout

Sl. MC41010 IC pinout



MC41010 je 8-pinski dvoredni IC paket. Kao i bilo koji analogni potenciometar, ovaj IC dolazi u 5k, 10k, 50k i 100k. U ovom se krugu koristi 10k potenciometar
MC4131 ima sljedećih 8 terminala:

Pribadača br. Naziv pribadače Mali opis

1 CS Ovaj pin služi za odabir podređenog uređaja ili periferne jedinice spojene na arduino. Ako je ovo
Odabrano je niže od MC41010, a ako je visoko, tada je MC41010 poništen.

2 SCLK zajednički / serijski sat, arduino daje sat za inicijalizaciju prijenosa podataka iz
Arduino na IC i obrnuto.

3 SDI / SDO Serijski podaci se prenose između arduina i IC-a putem ovog pina
4 VSS priključak za uzemljenje arduina povezan je s ovim pinom IC-a.

5 PA0 Ovo je jedan terminal potenciometra.

6 PW0 Ovaj terminal je terminal brisača potenciometra (za promjenu otpora)
7 PB0 Ovo je još jedan terminal potenciometra.

8 VCC napajanje za IC daje se putem ovog pina.

Ovaj IC sadrži samo jedan potenciometar. Neki IC imaju ugrađena najviše dva potenciometra. Ovaj
Vrijednost otpora između brisača i bilo kojeg drugog terminala mijenja se u 256 koraka, od 0 do 255. Budući da koristimo 10k otpornik, vrijednost otpornika mijenja se u koracima:
10k / 256 = 39 ohma u koraku između 0 i 255

KOMPONENTE

Za ovaj projekt trebamo sljedeće komponente.

1. ARDUINO
2. MC41010 IC
3. 220 OHM OTPORNIK
4. LED
5. PRIKLJUČIVANJE ŽICA

Uspostavite veze kako je prikazano na sl.

1. Spojite cs pin na digitalni pin 10.
2. Spojite SCK pin na digitalni pin 13.
3. Spojite SDI / SDO pin na digitalni pin 11.
4. VSS na uzemljeni pin arduina
5. PA0 do 5v pin arduina
6. PB0 na tlu arduina
7. PWO na analogni pin A0 arduina.
8. VCC do 5 v arduina.

KOD PROGRAMA 1

Ovaj kod ispisuje promjenu napona na terminalu brisača i masu na serijskom monitoru Arduino IDE-a.

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

OBJAŠNJENJE KODA 1:

Da biste koristili digitalni potenciometar s arduinom, prvo morate uključiti SPI biblioteku koja se nalazi u samom arduino IDE-u. Dovoljno je nazvati knjižnicu ovom naredbom:
#include

U praznom postavljanju, pinovi se dodjeljuju kao izlaz ili ulaz. Daju se i naredbe za započinjanje SPI-a i serijska komunikacija između arduina i ic koje su:

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

U void petlji, for petlja se koristi za promjenu otpora digitalnog pota u ukupno 256 koraka. Prvo od 0 do 255, a zatim opet natrag do 0 s 10 milisekundi kašnjenja između svakog koraka:

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

funkcija digitalPotWrite (i) zapisuje ovu vrijednost za promjenu otpora na određenoj adresi ic.

Otpor između brisača i krajnjeg terminala može se izračunati pomoću ovih formula:

R1 = 10k * (256 razina) / 256 + Rw
I
R2 = 10k * razina / 256 + Rw

Ovdje je R1 = otpor brisača i jednog terminala
R2 = otpor između brisača i drugog terminala
Razina = korak u određenom trenutku (varijabla 'I' korištena u for petlji)
Rw = otpor terminala brisača (može se naći u tehničkom listu ic)
Korištenjem funkcije digitalPotWrite (), čip digitalnog potenciometra odabire se dodjeljivanjem NISKOG napona CS pinu. Sada kada je ic odabran, mora se pozvati adresa na koju će se upisivati ​​podaci. U posljednjem dijelu koda:

SPI.transfer (B00010001)

Poziva se adresa koja je B00010001 za odabir terminala brisača na kojem će biti upisani podaci. I stoga je za vrijednost petlje tj. I napisano da promijeni otpor.

Kružni rad:

Sve dok vrijednost i neprestano mijenja ulaz na A0 pinu arduina, također se mijenja između 0 i 1023. To se događa jer je terminal brisača izravno povezan s A0 pinom, a ostali terminali potenciometra spojeni na 5 volti i na masu. Sad kad se otpor promijeni, mijenja se i napon na njemu koji arduino izravno uzima kao ulaz i tako na serijskom monitoru dobivamo vrijednost napona za određenu vrijednost otpora.

SIMULACIJA 1:

Evo nekoliko simulacijskih slika za ovaj sklop pri različitim vrijednostima i:

Sada samo spojite led u seriju s otpornikom od 220 ohma na terminal IC brisača kao što je prikazano na slici.

KOD 2:

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

OBJAŠNJENJE KODA 2:

Ovaj je kod sličan kodu 1, osim što u njemu nema serijskih naredbi. Dakle, nikakve vrijednosti neće biti ispisane na serijskom monitoru.

OBJAŠNJENJE RADA

Budući da je led povezan između terminala brisača i mase, jer se otpor mijenja, mijenja se i napon na vodiču. I stoga, kako otpor preko kojeg je led povezan raste od 0ohm do maksimuma, tako se povećava i svjetlina LED-a. Koji opet polako blijede zbog smanjenja otpora s maksimalnih na 0v.

Simulacija2

Simulacija3




Prethodno: Kako upravljati servo motorom pomoću džojstika Dalje: Napravite ovaj napredni digitalni ampermetar pomoću Arduina