Digitālā potenciometra MCP41xx izmantošana ar Arduino

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā projektā mēs saskarsmē digitālo potenciometru ar Arduino. Šajā demonstrācijas potenciometrā tiek izmantots MCP41010, bet jūs varat izmantot jebkuru MC41 ** sērijas digitālo potenciometru.

Autors Ankits Negi



IEVADS MC41010

Digitālie potenciometri ir gluži kā jebkurš analogais potenciometrs ar trim spailēm tikai ar vienu atšķirību. Tā kā analogajā jums ir manuāli jāmaina stikla tīrītāja pozīcija. Digitālā potenciometra gadījumā stikla tīrītāja pozīcija tiek iestatīta atbilstoši potenciometram dotajam signālam, izmantojot jebkuru mikrokontrolleru vai mikroprocesoru.

Att. MC41010 IC pinout

Att. MC41010 IC pinout



MC41010 ir 8 kontaktu divrindu paketes IC. Tāpat kā jebkurš analogais potenciometrs, arī šis IC ir 5k, 10k, 50k un 100k. Šajā ķēdē tiek izmantots 10k potenciometrs
MC4131 ir šādi 8 termināļi:

Piespraudes nr. PIN nosaukums Mazs apraksts

1 CS Šo tapu izmanto, lai izvēlētos vergu vai perifērijas ierīci, kas savienota arduino. Ja tas tā ir
Zems, tad tiek atlasīts MC41010, un, ja tas ir augsts, tad MC41010 tiek atlasīts.

2 SCLK koplietojamais / sērijveida pulkstenis, arduino dod pulksteni datu pārsūtīšanas inicializēšanai no
Arduino uz IC un otrādi.

3 SDI / SDO Sērijas dati tiek pārsūtīti starp arduino un IC caur šo tapu
4 VSS Arduino zemes terminālis ir savienots ar šo IC kontaktu.

5 PA0 Tas ir viens potenciometra spaile.

6 PW0 Šī spaile ir potenciometra tīrītāja spaile (lai mainītu pretestību)
7 PB0 Šis ir vēl viens potenciometra spaile.

Caur šo tapu tiek dota 8 VCC jauda IC.

Šajā IC ir tikai viens potenciometrs. Dažiem IC ir iebūvēti ne vairāk kā divi potenciometri. Šis
Pretestības vērtība starp stikla tīrītāju un jebkuru citu spaili tiek mainīta 256 pakāpēs, no 0 līdz 255. Tā kā mēs izmantojam 10 k, rezistora vērtība tiek mainīta, veicot šādas darbības:
10k / 256 = 39 omi vienā solī no 0 līdz 255

KOMPONENTES

Šim projektam mums ir nepieciešami šādi komponenti.

1. ARDUINO
2. MC41010 IC
3. 220 OHM REZISTORS
4. LED
5. VADU SAVIENOŠANA

Veiciet savienojumus, kā parādīts attēlā.

1. Pievienojiet cs piespraudi 10. digitālajai tapai.
2. Savienojiet SCK tapu ar digitālo tapu 13.
3. Savienojiet SDI / SDO tapu ar digitālo tapu 11.
4. VSS uz zemes arduino tapu
5. PA0 līdz 5v arduino tapa
6. PB0 līdz arduino zemei
7. PWO uz arduino analogo tapu A0.
8. VCC līdz 5 v arduino.

PROGRAMMAS KODS 1

Šis kods izdrukā sprieguma izmaiņas logu tīrītāja spailē un zemē Arduino IDE sērijveida monitorā.

#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. PASKAIDROJUMA KODS:

Lai izmantotu digitālo potenciometru ar arduino, vispirms jāiekļauj SPI bibliotēka, kas ir paredzēta pašā arduino IDE. Vienkārši izsauciet bibliotēku, izmantojot šo komandu:
# iekļaut

Tukšajā iestatījumā tapas tiek piešķirtas kā izeja vai ievade. Un tiek dotas komandas sākt SPI un tiek sniegta arī sērijveida saziņa starp arduino un ic:

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

Tukšajā ciklā cilpa tiek izmantota, lai mainītu digitālā katla pretestību kopumā 256 soļos. Vispirms no 0 līdz 255 un pēc tam atkal atpakaļ uz 0 ar 10 milisekunžu kavēšanos starp katru soli:

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

digitalPotWrite (i) funkcija raksta šo vērtību, lai mainītu pretestību noteiktā ic adresē.

Izturību starp stikla tīrītāju un gala spaili var aprēķināt, izmantojot šādas formulas:

R1 = 10k * (256 līmeņi) / 256 + Rw
Un
R2 = 10k * līmenis / 256 + Rw

Šeit R1 = pretestība starp tīrītāju un vienu spaili
R2 = pretestība starp tīrītāju un citu spaili
Līmenis = solis noteiktā brīdī (mainīgais “I”, kas izmantots cilpai)
Rw = tīrītāja spailes pretestība (atrodama ic datu lapā)
Izmantojot digitalPotWrite () funkciju, digitālā potenciometra mikroshēma tiek izvēlēta, CS kontaktam piešķirot LOW spriegumu. Tagad, kad ir atlasīts ic, ir jāizsauc adrese, uz kuras dati tiks ierakstīti. Pēdējā koda daļā:

SPI.transfer (B00010001)

Tiek izsaukta adrese, kas ir B00010001, lai izvēlētos ic tīrītāja termināli, uz kura tiks ierakstīti dati. Tādējādi cilpas vērtībai, ti, i ir rakstīts, lai mainītu pretestību.

APKĀRTAS DARBS:

Kamēr i vērtība maina ievadi uz A0 kontaktu arduino, mainās arī starp 0 un 1023. Tas notiek tāpēc, ka tīrītāja spaile ir tieši savienota ar A0 tapu, un citi potenciometra spailes ir attiecīgi savienoti ar 5 voltu un zemējumu. Tagad, kad mainās pretestība, mainiet arī spriegumu, ko arduino tieši ņem par ievadi, un tādējādi sērijveida monitorā mēs iegūstam sprieguma vērtību noteiktai pretestības vērtībai.

1. simulācija:

Šie ir daži simulācijas attēli šai shēmai dažādās i vērtībās:

Tagad vienkārši pievienojiet virkni ar 220ohm rezistoru pie IC tīrītāja spailes, kā parādīts attēlā.

2. KODS:

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

2. PASKAIDROJUMA KODS:

Šis kods ir līdzīgs 1. kodam, izņemot to, ka šajā kodā nav sērijveida komandu. Tātad sērijveida monitorā vērtības netiks izdrukātas.

DARBA Skaidrojums

Tā kā svina savienojums ir starp tīrītāja spaili un zemi, mainoties pretestībai, mainās arī spriegums. Un līdz ar to, kad pretestība, kurai ir pievienots vads, palielinās no 0 ohm līdz maksimālajam, pieaug arī ledu spilgtums. Kas atkal lēnām izgaist, samazinoties pretestībai no maksimālā līdz 0v.

Simulācija

Modelēšana3




Pāri: Kā kontrolēt servomotoru, izmantojot kursorsviru Nākamais: izveidojiet šo uzlaboto digitālo ampermetru, izmantojot Arduino