Použití digitálního potenciometru MCP41xx s Arduino

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto projektu budeme propojovat digitální potenciometr s arduino. V této ukázce je použit potenciometr MCP41010, ale můžete použít jakýkoli digitální potenciometr řady MC41 **.

Autor: Ankit Negi



ÚVOD DO MC41010

Digitální potenciometry jsou jako každý analogový potenciometr se třemi svorkami s jediným rozdílem. Zatímco v analogovém musíte ručně změnit polohu stěrače, v případě digitálního potenciometru se poloha stěrače nastavuje podle signálu předaného potenciometru pomocí libovolného mikrokontroléru nebo mikroprocesoru.

OBR. MC41010 IC pinout

OBR. MC41010 IC pinout



MC41010 je 8kolíkový dual in line balíček IC. Stejně jako jakýkoli analogový potenciometr i tento IC přichází v rozlišení 5k, 10k, 50k a 100k. V tomto obvodu je použit 10k potenciometr
MC4131 má následujících 8 terminálů:

Pin č. Název špendlíku Malý popis

1 CS Tento pin se používá k výběru podřízeného nebo periferního zařízení připojeného k arduino. Pokud ano
Nízká, pak je vybrána MC41010 a pokud je vysoká, MC41010 je zrušena.

2 SCLK Shared / Serial Clock, arduino dává hodiny pro inicializaci přenosu dat z
Arduino na IC a naopak.

3 SDI / SDO Sériová data jsou přenášena mezi arduino a IC přes tento pin
4 VSS Uzemňovací svorka arduina je připojena k tomuto pinu IC.

5 PA0 Toto je jedna svorka potenciometru.

6 PW0 Tato svorka je svorka stěrače potenciometru (pro změnu odporu)
7 PB0 Toto je další svorka potenciometru.

8 VCC Napájení na IC je dáno tímto pinem.

Tento IC obsahuje pouze jeden potenciometr. Některé integrované obvody mají zabudovány maximálně dva potenciometry. Tento
Hodnota odporu mezi stěračem a jakoukoli jinou svorkou se mění v 256 krocích, od 0 do 255. Jelikož používáme odpor 10k, hodnota odporu se mění v krocích:
10k / 256 = 39 ohmů na krok mezi 0 a 255

KOMPONENTY

Pro tento projekt potřebujeme následující komponenty.

1. ARDUINO
2. MC41010 IC
3. 220 OHM ODPOR
4. LED
5. PŘIPOJOVACÍ DRÁTY

Proveďte připojení podle obr.

1. Připojte pin cs k digitálnímu pinu 10.
2. Připojte kolík SCK k digitálnímu kolíku 13.
3. Připojte kolík SDI / SDO k digitálnímu kolíku 11.
4. VSS na zemnící kolík arduina
5. PA0 až 5v pin arduina
6. PB0 na zem arduina
7. PWO na analogový pin A0 arduina.
8. VCC až 5 v arduina.

KÓD PROGRAMU 1

Tento kód vytiskne změnu napětí mezi svorkou stěrače a zemí na sériovém monitoru 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)

VYSVĚTLUJÍCÍ KÓD 1:

Chcete-li použít digitální potenciometr s arduino, musíte nejprve zahrnout knihovnu SPI, která je poskytována v samotném IDE arduino. Stačí zavolat knihovnu pomocí tohoto příkazu:
#zahrnout

V nastavení neplatnosti jsou piny přiřazeny jako výstup nebo vstup. Jsou také uvedeny příkazy pro zahájení SPI a sériové komunikace mezi arduino a ic, které jsou:

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

Ve smyčce void se smyčka for používá ke změně odporu digitálního potu v celkem 256 krocích. Nejprve od 0 do 255 a poté znovu zpět na 0 s 10 milisekundovým zpožděním mezi jednotlivými kroky:

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

Funkce digitalPotWrite (i) zapíše tyto hodnoty ke změně odporu na konkrétní adrese ic.

Odpor mezi stěračem a koncovou svorkou lze vypočítat pomocí těchto vzorců:

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

Zde R1 = odpor mezi stěračem a jednou svorkou
R2 = odpor mezi stěračem a jinou svorkou
Úroveň = krok v určitém okamžiku (proměnná „I“ použitá ve smyčce for)
Rw = odpor koncovky stěrače (najdete v datovém listu IC)
Pomocí funkce digitalPotWrite () je vybrán čip digitálního potenciometru přiřazením nízkého napětí k pinu CS. Nyní, když je vybrán ic, musí být volána adresa, na kterou budou zapsána data. V poslední části kódu:

SPI.transfer (B00010001)

Je volána adresa, která je B00010001 pro výběr terminálu stěrače ic, na který budou zapsána data. A tedy pro hodnotu smyčky, tj. Je napsáno, aby změnilo odpor.

PRACOVNÍ OBVOD:

Dokud hodnota i stále mění vstup na pin A0 arduina, stále se mění mezi 0 a 1023. Stává se to proto, že svorka stěrače je přímo připojena k pinu A0 a další svorka potenciometru je připojena k 5voltům a zemi. Nyní, když se změní odpor, změní se i napětí na něm, které je přímo odebíráno arduino jako vstup, a tak dostaneme hodnotu napětí na sériovém monitoru pro konkrétní hodnotu odporu.

SIMULACE 1:

Toto je několik simulačních obrázků pro tento obvod s různými hodnotami i:

Nyní stačí připojit led v sérii s 220ohm odporem ke svorce stěrače IC, jak je znázorněno na obrázku.

KÓD 2:

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

VYSVĚTLUJÍCÍ KÓD 2:

Tento kód je podobný kódu 1 s tím rozdílem, že v tomto kódu nejsou žádné sériové příkazy. Na sériovém monitoru tedy nebudou vytištěny žádné hodnoty.

PRACOVNÍ VYSVĚTLENÍ

Vzhledem k tomu, že LED je spojena mezi svorkou stěrače a zemí, protože se mění odpor, mění se i napětí na LED. A proto se odpor, přes který je připojena LED, zvyšuje z 0ohm na maximum, stejně tak se zvyšuje jas LED. Které opět pomalu mizí kvůli poklesu odporu z maxima na 0v.

Simulace2

Simulace3




Předchozí: Jak ovládat servomotor pomocí joysticku Další: Vyrobte tento pokročilý digitální ampérmetr pomocí Arduina