Använda digital potentiometer MCP41xx med Arduino

Prova Vårt Instrument För Att Eliminera Problem





I det här projektet ska vi ansluta en digital potentiometer till arduino. I denna demonstration används potentiometer MCP41010 men du kan använda vilken digital potentiometer som helst i MC41 ** -serien.

Av Ankit Negi



INLEDNING TILL MC41010

Digitala potentiometrar är precis som alla analoga potentiometrar med tre terminaler med bara en skillnad. Medan analogt måste du ändra torkarpositionen manuellt. Vid digital potentiometer ställs torkarpositionen in enligt signalen som ges till potentiometern med vilken mikrokontroller eller mikroprocessor som helst.

FIKON. MC41010 IC pinout

FIKON. MC41010 IC pinout



MC41010 är en 8-stifts dual-line-paket IC. Precis som vilken analog potentiometer som helst, kommer denna IC i 5k, 10k, 50k och 100k. I denna krets används 10k potentiometer
MC4131 har följande 8 terminaler:

Stift nr. Pin Namn Liten beskrivning

1 CS Denna stift används för att välja slav eller kringutrustning ansluten till arduino. Om detta är
Lågt väljs sedan MC41010 och om detta är högt avmarkeras MC41010.

2 SCLK Shared / Serial Clock, arduino ger klocka för initialisering av dataöverföring från
Arduino till IC och vice versa.

3 SDI / SDO Seriell data överförs mellan arduino och IC via denna stift
4 VSS jordterminal på arduino är ansluten till denna IC-stift.

5 PA0 Detta är en terminal på potentiometern.

6 PW0 Denna terminal är torkterminalen för potentiometern (för att ändra motstånd)
7 PB0 Detta är en annan terminal på potentiometern.

8 VCC Power to IC ges via denna pin.

Denna IC innehåller bara en potentiometer. Vissa IC har högst två potentiometer inbyggda. Detta
Värdet på motståndet mellan torkaren och någon annan terminal ändras i 256 steg, från 0 till 255. Eftersom vi använder ett 10k motståndsvärde för motstånd ändras i steg om:
10k / 256 = 39 ohm per steg mellan 0 och 255

KOMPONENTER

Vi behöver följande komponenter för detta projekt.

1. ARDUINO
2. MC41010 IC
3. 220 OHM-RESISTOR
4. LED
5. ANSLUTNINGSKABLAR

Gör anslutningar enligt fig.

1. Anslut cs-stift till digital stift 10.
2. Anslut SCK-stift till digital stift 13.
3. Anslut SDI / SDO-stift till digital stift 11.
4. VSS till jordstift av arduino
5. PA0 till 5v stift av arduino
6. PB0 till arduino
7. PWO till analog stift A0 av arduino.
8. VCC till 5 v arduino.

PROGRAMKOD 1

Den här koden skriver ut spänningsförändringen över torkaruttaget och marken på Serial Monitor av 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)

FÖRKLARING AV KOD 1:

För att använda digital potentiometer med arduino måste du inkludera SPI-biblioteket först som finns i arduino IDE själv. Ring bara biblioteket med det här kommandot:
#omfatta

I ogiltig installation tilldelas stift som utgång eller ingång. Och kommandon för att börja SPI och seriell kommunikation mellan arduino och ic ges också som är:

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

I tomrumsslinga används för loop för att ändra motståndet hos den digitala potten i totalt 256 steg. Först från 0 till 255 och sedan tillbaka till 0 med 10 millisekunder fördröjning mellan varje steg:

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

digitalPotWrite (i) -funktionen skriver detta värde för att ändra motstånd vid en speciell adress för ic.

Motståndet mellan torkaren och ändterminalen kan beräknas med följande formler:

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

Här R1 = motstånd mellan torkare och en terminal
R2 = motstånd mellan torkare och annan terminal
Nivå = steg vid ett visst ögonblick (variabel 'I' används i för loop)
Rw = motstånd hos torkarterminalen (finns i databladet för ic)
Med digitalPotWrite () -funktionen väljs det digitala potentiometerchipet genom att tilldela LÅG spänning till CS-stift. När ic väljs måste en adress anropas på vilken data kommer att skrivas. I den sista delen av koden:

SPI.transfer (B00010001)

Adress anropas som är B00010001 för att välja torkterminalen på den ic som data kommer att skrivas på. Och därmed för loopens värde, dvs jag är skriven för att ändra motståndet.

KRETSARBETE:

Så länge värdet på i fortsätter att ändra ingång till A0-stift av arduino ändras också mellan 0 och 1023. Detta händer för att torkaruttaget är direkt anslutet till A0-stiftet, och andra terminaler av potentiometer är anslutna till 5 volt respektive jord. Nu när motståndet ändras så gör spänningen över den som tas direkt av arduino som ingång och därmed får vi ett spänningsvärde på seriell bildskärm för ett visst motståndsvärde.

SIMULERING 1:

Det här är några simuleringsbilder för denna krets med olika värden på i:

Anslut nu bara en led i serie med 220 ohm motstånd till torkaranslutningen på IC som visas i figuren.

KOD 2:

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

FÖRKLARANDE KOD 2:

Den här koden liknar kod 1 förutom att det inte finns några seriekommandon i den här koden. Så inga värden skrivs ut på seriell bildskärm.

ARBETSFÖRKLARING

Eftersom lysdioden är ansluten mellan torkaranslutningen och marken när motståndet ändras, så gör spänningen över ledningen. Och därmed när motståndet över vilket led är anslutet stiger från 0ohm till maximalt så ökar ljusstyrkan hos ledningen. Som återigen sakta bleknar på grund av minskad resistans från maximalt till 0v.

Simulering2

Simulering3




Tidigare: Hur man styr servomotor med joystick Nästa: Gör denna avancerade digitala amperemätare med Arduino