Arduino ile Dijital Potansiyometre MCP41xx Kullanımı

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu projede dijital bir potansiyometre ile arduino arasında arayüz oluşturacağız. Bu gösterimde potansiyometre MCP41010 kullanılmıştır ancak MC41 ** serisinin herhangi bir dijital potansiyometresini kullanabilirsiniz.

Ankit Negi tarafından



MC41010'A GİRİŞ

Dijital potansiyometreler, yalnızca bir farkla üç terminalli herhangi bir analog potansiyometre gibidir. Analogda ise silecek konumunu manuel olarak değiştirmeniz gerekir, dijital potansiyometre durumunda ise herhangi bir mikro denetleyici veya mikroişlemci kullanılarak potansiyometreye verilen sinyale göre silecek konumu ayarlanır.

İNCİR. MC41010 IC pin çıkışı

İNCİR. MC41010 IC pin çıkışı



MC41010, 8 pinli çift hatlı bir IC paketidir. Tıpkı herhangi bir analog potansiyometre gibi, bu IC 5k, 10k, 50k ve 100k olarak gelir. Bu devrede 10k potansiyometre kullanılmıştır
MC4131 aşağıdaki 8 terminale sahiptir:

Pin no. Pin Adı Küçük açıklama

1 CS Bu pin, arduino'ya bağlı ikincil veya çevre birimi seçmek için kullanılır. Eğer bu
Düşük sonra MC41010 seçilir ve bu yüksekse MC41010 seçimi kaldırılır.

2 SCLK Paylaşımlı / Seri Saat, arduino, veri aktarımının başlatılması için saat verir.
Arduino'dan IC'ye ve tersi.

3 SDI / SDO Seri veri bu pin aracılığıyla arduino ve IC arasında aktarılır.
Arduino'nun 4 VSS Ground terminali, IC'nin bu pinine bağlanır.

5 PA0 Bu, potansiyometrenin bir terminalidir.

6 PW0 Bu terminal, potansiyometrenin silecek terminalidir (direnci değiştirmek için)
7 PB0 Bu, potansiyometrenin başka bir terminalidir.

IC'ye 8 VCC Gücü bu pin üzerinden verilir.

Bu IC yalnızca bir potansiyometre içerir. Bazı IC'nin dahili en fazla iki potansiyometresi vardır. Bu
Silecek ve diğer terminaller arasındaki direncin değeri 256 adımda 0'dan 255'e değiştirilir. 10k direnç kullandığımız için direncin değeri aşağıdaki adımlarla değiştirilir:
10k / 256 = 0 ile 255 arasında adım başına 39 ohm

BİLEŞENLERİ

Bu proje için aşağıdaki bileşenlere ihtiyacımız var.

1. ARDUINO
2. MC41010 IC
3. 220 OHM DİRENCİ
4. LED
5. TELLERİN BAĞLANMASI

Şekil 2'de gösterildiği gibi bağlantıları yapın.

1. cs pinini dijital pin 10'a bağlayın.
2. SCK pinini dijital pin 13'e bağlayın.
3. SDI / SDO pinini dijital pin 11'e bağlayın.
4. VSS, arduino'nun topraklama pinine
5. arduino'nun PA0 ila 5v pini
6. PB0 arduino topraklamasına
7. PWO'dan arduino'nun analog pin A0'a.
8. VCC ila 5 v arduino.

PROGRAM KODU 1

Bu kod, Arduino IDE'nin Seri Monitöründeki silecek terminali ve toprak üzerindeki voltaj değişimini yazdırır.

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

AÇIKLAMA KOD 1:

Dijital potansiyometreyi arduino ile kullanmak için önce arduino IDE'nin kendisinde sağlanan SPI kitaplığını eklemeniz gerekir. Kitaplığı şu komutla çağırmanız yeterli:
#Dahil etmek

Geçersiz kurulumda pinler çıkış veya giriş olarak atanır. Arduino ile ic arasında SPI ve seri iletişimi başlatmak için komutlar da verilir:

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

Boş döngüde for döngüsü, dijital potun direncini toplam 256 adımda değiştirmek için kullanılır. Her adım arasında 10 milisaniye gecikmeyle önce 0'dan 255'e ve sonra tekrar 0'a geri dönün:

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

digitalPotWrite (i) işlevi, bu değeri, ic'nin belirli adresindeki direnci değiştirmek için yazar.

Silecek ve uç terminal arasındaki direnç şu formüller kullanılarak hesaplanabilir:

R1 = 10k * (256-seviye) / 256 + Rw
Ve
R2 = 10k * seviye / 256 + Rw

Burada R1 = silecek ve bir terminal arasındaki direnç
R2 = silecek ve diğer terminal arasındaki direnç
Seviye = belirli bir andaki adım (for döngüsünde kullanılan değişken 'I')
Rw = silecek terminalinin direnci (ic veri sayfasında bulunabilir)
DigitalPotWrite () işlevini kullanarak, dijital potansiyometre çipi, CS pinine DÜŞÜK voltaj atanarak seçilir. Şimdi ic seçildiğinde, verinin yazılacağı bir adres çağrılmalıdır. Kodun son kısmında:

SPI.transfer (B00010001)

Üzerine verinin yazılacağı ic'nin silecek terminalini seçmek için B00010001 olan adres çağrılır. Ve dolayısıyla döngünün değeri için, yani direnci değiştirmek için yazılır.

DEVRE ÇALIŞMALARI:

İ değeri arduino'nun A0 pinine girişi değiştirmeye devam ettiği sürece 0 ile 1023 arasında değişmeye devam eder. Bunun nedeni silecek terminalinin doğrudan A0 pinine ve potansiyometrenin diğer terminalinin sırasıyla 5volt ve toprağa bağlı olmasıdır. Şimdi direnç değiştiğinde, arduino tarafından doğrudan giriş olarak alınan voltaj da değişir ve böylece belirli bir direnç değeri için seri monitörde bir voltaj değeri elde ederiz.

SİMÜLASYON 1:

Bunlar, i'nin çeşitli değerlerinde bu devre için bazı simülasyon resimleri:

Şimdi şekilde gösterildiği gibi IC'nin silecek terminaline 220ohm dirençli bir led bağlayın.

KOD 2:

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

AÇIKLAMA KOD 2:

Bu kod, bu kodda hiçbir seri komut olmaması dışında kod 1'e benzer. Dolayısıyla, seri monitörde hiçbir değer yazdırılmayacaktır.

ÇALIŞMA AÇIKLAMASI

Direnç değiştikçe led silecek terminali ile toprak arasına bağlandığından, led boyunca voltaj da değişir. Dolayısıyla ledin bağlandığı direnç 0ohm'dan maksimuma yükseldikçe ledin parlaklığı da artar. Direncin maksimumdan 0v'a düşmesi nedeniyle yine yavaş yavaş kaybolan.

Simülasyon2

Simülasyon3




Önceki: Joystick Kullanarak Servo Motor Nasıl Kontrol Edilir Sonraki: Bu Gelişmiş Dijital Ampermetreyi Arduino kullanarak yapın