Bruke digitalt potensiometer MCP41xx med Arduino

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette prosjektet skal vi grensesnitt et digitalt potensiometer med arduino. I denne demonstrasjonen brukes potensiometer MCP41010, men du kan bruke hvilket som helst digitalt potensiometer i MC41 ** -serien.

Av Ankit Negi



INNLEDNING TIL MC41010

Digitale potensiometere er akkurat som ethvert analogt potensiometer med tre terminaler med bare en forskjell. Mens du i analog må endre vindusviskerposisjonen manuelt. I tilfelle digital potensiometer settes viskerposisjonen i henhold til signalet gitt til potensiometeret ved hjelp av en hvilken som helst mikrokontroller eller mikroprosessor.

FIG. MC41010 IC pinout

FIG. MC41010 IC pinout



MC41010 er en 8-pins dual in line-pakke IC. Akkurat som ethvert analogt potensiometer kommer denne IC i 5k, 10k, 50k og 100k. I denne kretsen brukes 10k potensiometer
MC4131 har følgende 8 terminaler:

Pin nr. Pin Navn Lille beskrivelse

1 CS Denne pinnen brukes til å velge slave eller periferiutstyr som er koblet til arduino. Hvis dette er
Lav er MC41010 valgt, og hvis dette er høyt, blir MC41010 valgt bort.

2 SCLK Shared / Serial Clock, arduino gir klokke for initialisering av dataoverføring fra
Arduino til IC og omvendt.

3 SDI / SDO Seriedata overføres mellom arduino og IC gjennom denne pinnen
4 VSS bakken terminal av arduino er koblet til denne pin av IC.

5 PA0 Dette er en terminal på potensiometeret.

6 PW0 Denne terminalen er viskerterminalen til potensiometeret (for å endre motstand)
7 PB0 Dette er en annen terminal på potensiometeret.

8 VCC Power to IC er gitt gjennom denne pinnen.

Denne IC inneholder bare ett potensiometer. Noen IC har høyst to potensiometer innebygd. Dette
Verdien av motstanden mellom vindusviskeren og en hvilken som helst annen terminal endres i 256 trinn, fra 0 til 255. Siden vi bruker en 10k motstand, endres verdien av motstanden i trinn på:
10k / 256 = 39 ohm per trinn mellom 0 og 255

KOMPONENTER

Vi trenger følgende komponenter for dette prosjektet.

1. ARDUINO
2. MC41010 IC
3. 220 OHM-MOTSTAND
4. LED
5. TILKOBLING AV KABLER

Gjør tilkoblinger som vist på fig.

1. Koble cs-pin til digital pin 10.
2. Koble SCK-pinnen til den digitale pinnen 13.
3. Koble SDI / SDO-pin til digital pin 11.
4. VSS til jordpinne av arduino
5. PA0 til 5v pin med arduino
6. PB0 til bakken av arduino
7. PWO til analog pin A0 av arduino.
8. VCC til 5 v arduino.

PROGRAMKODE 1

Denne koden skriver ut spenningsendringen over viskerterminalen og bakken på Serial Monitor of 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)

FORKLARING AV KODE 1:

For å bruke digitalt potensiometer med arduino, må du inkludere SPI-biblioteket først, som er gitt i arduino IDE selv. Bare ring biblioteket med denne kommandoen:
#inkludere

I ugyldig oppsett tildeles pinner som utgang eller inngang. Og kommandoer for å starte SPI og seriell kommunikasjon mellom arduino og ic er også gitt som er:

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

In void loop, for loop brukes til å endre motstanden til digital pott i totalt 256 trinn. Først fra 0 til 255 og deretter tilbake til 0 med 10 millisekunder forsinkelse mellom hvert trinn:

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

digitalPotWrite (i) -funksjonen skriver denne verdien for å endre motstand på en bestemt adresse til ic.

Motstand mellom visker og endeterminal kan beregnes ved hjelp av disse formlene:

R1 = 10k * (256-nivå) / 256 + Rw
Og
R2 = 10k * nivå / 256 + Rw

Her R1 = motstand mellom visker og en terminal
R2 = motstand mellom visker og annen terminal
Nivå = trinn på et bestemt øyeblikk (variabel 'I' brukes i for loop)
Rw = motstand av viskerterminalen (finner du i databladet til ic)
Ved hjelp av digitalPotWrite () -funksjonen velges den digitale potensiometerbrikken ved å tildele LAV spenning til CS-pinnen. Nå som ic er valgt, må det ringes en adresse som dataene skal skrives på. I den siste delen av koden:

SPI.transfer (B00010001)

Adresse kalles som er B00010001 for å velge vindusviskerterminalen på icen som dataene skal skrives på. Og dermed for loopens verdi, dvs. jeg er skrevet for å endre motstanden.

KRETS ARBEID:

Så lenge verdien av i fortsetter å endre inngang til A0-pinnen i arduino, endres også mellom 0 og 1023. Dette skjer fordi viskerterminalen er direkte koblet til A0-pinnen, og den andre terminalen på potensiometeret er koblet til henholdsvis 5 volt og jord. Nå når motstanden endres, gjør også spenningen over den som blir tatt direkte av arduino som inngang, og dermed får vi en spenningsverdi på seriell skjerm for en bestemt motstandsverdi.

SIMULERING 1:

Dette er noen simuleringsbilder for denne kretsen med forskjellige verdier av i:

Nå er det bare å koble en ledning i serie med 220 ohm motstand til viskerterminalen på IC som vist på figuren.

KODE 2:

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

FORKLARING AV KODE 2:

Denne koden ligner på kode 1 bortsett fra at det ikke er noen seriekommandoer i denne koden. Så ingen verdier blir skrevet ut på seriell skjerm.

ARBEIDSFORKLARING

Siden led er koblet mellom viskerterminal og bakke når motstanden endres, gjør også spenningen over ledet. Og dermed når motstanden over hvilken ledd er koblet, stiger fra 0ohm til maksimum, gjør lysstyrken på ledet også. Som igjen sakte forsvinner på grunn av reduksjon i motstand fra maksimum til 0v.

Simulering2

Simulering3




Forrige: Hvordan kontrollere servomotoren ved hjelp av styrespaken Neste: Lag dette avanserte digitale amperemeteret ved hjelp av Arduino