Menggunakan Potensiometer Digital MCP41xx Bersama Arduino

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam projek ini kita akan menghubungkan potensiometer digital dengan arduino. Dalam demonstrasi ini potensiometer MCP41010 digunakan tetapi anda boleh menggunakan potensiometer digital siri MC41 **.

Oleh Ankit Negi



PENGENALAN KEPADA MC41010

Potensiometer digital sama seperti potensiometer analog dengan tiga terminal dengan satu perbezaan sahaja. Manakala dalam analog anda mesti mengubah kedudukan pengelap secara manual, Sekiranya posisi pengelap potensiometer digital ditetapkan mengikut isyarat yang diberikan kepada potensiometer menggunakan mikrokontroler atau mikropemproses.

RAJAH. Lekapan IC MC41010

RAJAH. Lekapan IC MC41010



MC41010 adalah IC pakej dual in line 8 pin. Sama seperti potensiometer analog, IC ini terdapat dalam 5k, 10k, 50k, dan 100k. Dalam litar ini potensiometer 10k digunakan
MC4131 mempunyai 8 terminal berikut:

Pin no. Pin Nama Huraian kecil

1 CS Pin ini digunakan untuk memilih hamba atau periferal yang disambungkan ke arduino. Sekiranya ini
Rendah maka MC41010 dipilih dan jika ini tinggi maka MC41010 tidak dipilih.

2 SCLK Shared / Serial Clock, arduino memberikan jam untuk permulaan pemindahan data dari
Arduino ke IC dan sebaliknya.

3 Data bersiri SDI / SDO dipindahkan antara arduino dan IC melalui pin ini
4 VSS Ground terminal arduino disambungkan ke pin IC ini.

5 PA0 Ini adalah salah satu terminal potensiometer.

6 PW0 Terminal ini adalah terminal pengelap potensiometer (untuk menukar rintangan)
7 PB0 Ini adalah terminal potensiometer lain.

8 VCC Power to IC diberikan melalui pin ini.

IC ini hanya mengandungi satu potensiometer. Sebilangan IC mempunyai maksimum dua potensiometer terbina dalam. Ini
Nilai rintangan antara pengelap dan terminal lain diubah dalam 256 langkah, dari 0 hingga 255. Oleh kerana kita menggunakan nilai perintang 10k perintang diubah dalam langkah-langkah:
10k / 256 = 39 ohm setiap langkah antara 0 dan 255

KOMPONEN

Kami memerlukan komponen berikut untuk projek ini.

1. ARDUINO
2. IC MC41010
3. 220 OHM RESISTOR
4. LED
5. MENGHUBUNGKAN Wayar

Buat sambungan seperti dalam rajah.

1. Sambungkan pin cs ke pin digital 10.
2. Sambungkan pin SCK ke pin digital 13.
3. Sambungkan pin SDI / SDO ke pin digital 11.
4. VSS ke pin tanah arduino
5. PA0 hingga 5v pin arduino
6. PB0 ke tanah arduino
7. PWO ke pin analog A0 dari arduino.
8. VCC hingga 5 v arduino.

KOD PROGRAM 1

Kod ini mencetak perubahan voltan di terminal pengelap dan tanah di Serial Monitor 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)

MENJELASKAN KOD 1:

Untuk menggunakan potensiometer digital dengan arduino, anda perlu memasukkan perpustakaan SPI terlebih dahulu yang disediakan dalam arduino IDE itu sendiri. Panggil sahaja perpustakaan dengan arahan ini:
#sertakan

Dalam persediaan tidak sah, pin ditetapkan sebagai output atau input. Dan perintah untuk memulakan SPI dan komunikasi bersiri antara arduino dan ic juga diberikan yang:

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

Dalam gelung void, untuk gelung digunakan untuk mengubah rintangan periuk digital dalam jumlah 256 langkah. Pertama dari 0 hingga 255 dan sekali lagi kembali ke 0 dengan kelewatan 10 milisaat antara setiap langkah:

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

Fungsi digitalPotWrite (i) menulis nilai ini untuk mengubah rintangan pada alamat ic tertentu.

Rintangan antara pengelap dan terminal akhir dapat dikira menggunakan formula berikut:

R1 = 10k * (tahap 256) / 256 + Rw
Dan
R2 = tahap 10k * / 256 + Rw

Di sini R1 = rintangan antara pengelap dan satu terminal
R2 = rintangan antara pengelap dan terminal lain
Level = langkah pada saat tertentu (pemboleh ubah 'I' digunakan untuk loop)
Rw = rintangan terminal pengelap (boleh didapati di lembar data ic)
Menggunakan fungsi digitalPotWrite () cip potensiometer digital dipilih dengan memberikan voltan RENDAH ke pin CS. Sekarang kerana ic dipilih, alamat mesti dipanggil di mana data akan ditulis. Di bahagian terakhir kod:

SPI.transfer (B00010001)

Alamat dipanggil B00010001 untuk memilih terminal pengelap ic yang akan dituliskan data. Oleh itu, untuk nilai gelung, saya ditulis untuk mengubah rintangan.

KERJA PEKELILING:

Selagi nilai i terus menukar input ke A0 pin arduino juga terus berubah antara 0 dan 1023. Ini berlaku kerana terminal pengelap langsung dihubungkan ke pin A0, dan terminal potensiometer lain masing-masing dihubungkan ke 5volt dan ground. Sekarang apabila rintangan berubah, maka voltan melintangnya yang secara langsung diambil oleh arduino sebagai input dan dengan itu kita mendapat nilai voltan pada monitor bersiri untuk nilai rintangan tertentu.

SIMULASI 1:

Ini adalah beberapa gambar simulasi untuk litar ini dengan pelbagai nilai i:

Sekarang sambungkan siri LED dengan perintang 220ohm ke terminal pengelap IC seperti yang ditunjukkan dalam gambar.

KOD 2:

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

MENJELASKAN KOD 2:

Kod ini serupa dengan kod 1 kecuali bahawa tidak ada perintah bersiri dalam kod ini. Jadi tidak ada nilai yang akan dicetak pada monitor bersiri.

PENJELASAN KERJA

Oleh kerana led disambungkan antara terminal pengelap dan tanah semasa rintangan berubah, begitu juga voltan merentasi led. Oleh itu, kerana rintangan di mana led disambungkan meningkat dari 0ohm ke maksimum, begitu juga kecerahan led. Yang perlahan-lahan pudar kerana penurunan rintangan dari maksimum hingga 0v.

Simulasi2

Simulasi3




Sebelumnya: Cara Mengendalikan Motor Servo Menggunakan Joystick Seterusnya: Buat Ammeter Digital Lanjutan ini menggunakan Arduino