Pomocou digitálneho potenciometra MCP41xx s Arduino

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto projekte prepojíme digitálny potenciometer s arduino. V tejto ukážke sa používa potenciometer MCP41010, ale môžete použiť akýkoľvek digitálny potenciometer série MC41 **.

Autor: Ankit Negi



ÚVOD DO MC41010

Digitálne potenciometre sú ako každý analógový potenciometer s tromi svorkami, iba s jedným rozdielom. Zatiaľ čo v analógovom musíte polohu stierača meniť ručne, v prípade digitálneho potenciometra sa poloha stierača nastavuje podľa signálu daného potenciometru pomocou ľubovoľného mikrokontroléra alebo mikroprocesora.

(0106) Na obr. MC41010 IC pinout

(0106) Na obr. MC41010 IC pinout



MC41010 je 8 pinový duálny radový integrovaný obvod. Rovnako ako akýkoľvek analógový potenciometer, aj tento IC je v prevedení 5k, 10k, 50k a 100k. V tomto obvode sa používa 10k potenciometer
MC4131 má nasledujúcich 8 terminálov:

Pin č. Názov špendlíka Malý popis

1 CS Tento pin sa používa na výber podradeného alebo periférneho zariadenia pripojeného k arduino. Ak je
Nízka, potom je vybratá hodnota MC41010 a ak je táto hodnota vysoká, hodnota MC41010 je zrušená.

2 Zdieľané / sériové hodiny SCLK, arduino dáva hodiny na inicializáciu prenosu dát z
Arduino do IC a naopak.

3 SDI / SDO Sériové dáta sa prenášajú medzi arduino a IC cez tento pin
4 VSS Uzemňovací terminál arduina je pripojený k tomuto pinu IC.

5 PA0 Toto je jedna svorka potenciometra.

6 PW0 Táto svorka je svorka stierača potenciometra (na zmenu odporu)
7 PB0 Toto je ďalšia svorka potenciometra.

Cez tento pin sa dodáva 8 VCC napájania na IC.

Tento IC obsahuje iba jeden potenciometer. Niektoré integrované obvody majú zabudované najviac dva potenciometre. Toto
Hodnota odporu medzi stieračom a ktorýmkoľvek iným terminálom sa mení v 256 krokoch, od 0 do 255. Pretože používame 10k rezistor, hodnota rezistora sa mení v krokoch:
10k / 256 = 39 ohmov na krok medzi 0 a 255

KOMPONENTY

Pre tento projekt potrebujeme nasledujúce komponenty.

1. ARDUINO
2. MC41010 IC
3. 220 OHM ODPOR
4. LED
5. SPOJOVACIE DRÔTY

Pripojte káble podľa obr.

1. Pripojte pin cs k digitálnemu pinu 10.
2. Pripojte kolík SCK k digitálnemu kolíku 13.
3. Pripojte kolík SDI / SDO k digitálnemu kolíku 11.
4. VSS na uzemňovací kolík arduina
5. PA0 až 5v pin arduina
6. PB0 k zemi arduina
7. PWO na analógový pin A0 arduina.
8. VCC až 5 v arduina.

KÓD PROGRAMU 1

Tento kód vytlačí zmenu napätia medzi svorkou stierača a zemou na Serial Monitor Arduino IDE.

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

VYSVETLENIE KÓDU 1:

Ak chcete použiť digitálny potenciometer s arduinom, musíte najskôr zahrnúť knižnicu SPI, ktorá je poskytovaná v samotnom IDE arduina. Stačí zavolať knižnicu pomocou tohto príkazu:
#include

V nastavení neplatnosti sú piny priradené ako výstup alebo vstup. Ďalej sú uvedené príkazy na zahájenie SPI a sériovej komunikácie medzi arduino a ic, ktoré sú:

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

Vo void loop sa smyčka for používa na zmenu odporu digitálneho potu v celkových 256 krokoch. Najskôr od 0 do 255 a potom opäť späť na 0 s 10 milisekundovým oneskorením medzi jednotlivými krokmi:

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

funkcia digitalPotWrite (i) zapíše tieto hodnoty na zmenu odporu na konkrétnej adrese ic.

Odpor medzi stieračom a koncovou svorkou možno vypočítať pomocou týchto vzorcov:

R1 = 10k * (256 úrovní) / 256 + Rw
A
R2 = 10k * úroveň / 256 + Rw

Tu R1 = odpor medzi stieračom a jednou svorkou
R2 = odpor medzi stieračom a druhou svorkou
Úroveň = krok v konkrétnom okamihu (premenná „I“ použitá v cykle for)
Rw = odpor koncovky stierača (nájdete v údajovom liste ic)
Pomocou funkcie digitalPotWrite () sa vyberie čip digitálneho potenciometra priradením nízkeho napätia k pinu CS. Keď je vybratý ic, musí sa zavolať adresa, na ktorú sa budú zapisovať údaje. V poslednej časti kódu:

SPI.transfer (B00010001)

Zavolá sa adresa, ktorá je B00010001, aby sa vybral terminál stierača ic, na ktorý sa budú zapisovať údaje. A teda pre hodnotu slučky, tj. I je napísané na zmenu odporu.

PRÁCA NA OBVODE:

Pokiaľ hodnota i stále mení vstup na pin A0 arduina, stále sa mení medzi 0 a 1023. Stáva sa to preto, lebo svorka stierača je priamo pripojená k pinu A0 a ďalšia svorka potenciometra je pripojená k 5 voltu a zemi. Teraz, keď sa mení odpor, mení sa aj napätie na ňom, ktoré priamo odoberá arduino ako vstup, a tak dostaneme hodnotu napätia na sériovom monitore pre konkrétnu hodnotu odporu.

SIMULÁCIA 1:

Toto je niekoľko simulačných obrázkov pre tento obvod pri rôznych hodnotách i:

Teraz stačí zapojiť LED do série s 220ohmovým rezistorom na svorku stierača IC, ako je to znázornené na obrázku.

KÓD 2:

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

VYSVETLUJÚCI KÓD 2:

Tento kód je podobný kódu 1 s tým rozdielom, že v ňom nie sú žiadne sériové príkazy. Takže na sériovom monitore nebudú vytlačené žiadne hodnoty.

PRACOVNÉ VYSVETLENIE

Pretože led je pripojený medzi svorku stierača a zem, pretože sa mení odpor, mení sa aj napätie cez led. A teda s tým, ako odpor, cez ktorý je pripojená žiarovka, stúpa z 0 ohmov na maximum, zvyšuje sa aj jas žiarovky. Ktoré opäť pomaly miznú kvôli poklesu odporu z maxima na 0v.

Simulácia2

Simulácia3




Dvojica: Ako ovládať servomotor pomocou joysticku Ďalej: Vyrobte tento pokročilý digitálny ampérmeter pomocou Arduina