Χρήση ψηφιακού ποτενσιόμετρου MCP41xx With Arduino

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτό το έργο πρόκειται να συνδέσουμε ένα ψηφιακό ποτενσιόμετρο με το arduino. Σε αυτήν την επίδειξη χρησιμοποιείται το ποτενσιόμετρο MCP41010 αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε ψηφιακό ποτενσιόμετρο της σειράς MC41 **.

Από τον Ankit Negi



ΕΙΣΑΓΩΓΗ ΣΤΟ MC41010

Τα ψηφιακά ποτενσιόμετρα είναι ακριβώς όπως κάθε αναλογικό ποτενσιόμετρο με τρεις ακροδέκτες με μία μόνο διαφορά. Ενώ σε αναλογικό πρέπει να αλλάξετε χειροκίνητα τη θέση του υαλοκαθαριστήρα, Σε περίπτωση ψηφιακού ποτενσιόμετρου, η θέση του υαλοκαθαριστήρα ρυθμίζεται σύμφωνα με το σήμα που δίνεται στο ποτενσιόμετρο χρησιμοποιώντας οποιονδήποτε μικροελεγκτή ή μικροεπεξεργαστή.

ΣΥΚΟ. MC41010 IC pinout

ΣΥΚΟ. MC41010 IC pinout



Το MC41010 είναι ένα 8-pin διπλό σε σειρά πακέτο IC. Όπως κάθε αναλογικό ποτενσιόμετρο, αυτό το IC έρχεται σε 5k, 10k, 50k και 100k. Σε αυτό το κύκλωμα χρησιμοποιείται ποτενσιόμετρο 10k
Το MC4131 έχει 8 τερματικά:

Καρφίτσωμα αρ. Pin Name Μικρή περιγραφή

1 CS Αυτός ο πείρος χρησιμοποιείται για την επιλογή του εξαρτημένου ή περιφερειακού που είναι συνδεδεμένος με το arduino. Εάν αυτό είναι
Χαμηλό, τότε επιλέγεται το MC41010 και αν αυτό είναι υψηλό, τότε το MC41010 είναι αποεπιλεγμένο.

2 SCLK Shared / Serial Clock, το arduino δίνει ρολόι για την προετοιμασία της μεταφοράς δεδομένων από
Arduino στο IC και το αντίστροφο.

3 Τα σειριακά δεδομένα SDI / SDO μεταφέρονται μεταξύ arduino και IC μέσω αυτού του πείρου
4 Το τερματικό γείωσης VSS του arduino είναι συνδεδεμένο σε αυτόν τον πείρο IC.

5 PA0 Αυτός είναι ένας ακροδέκτης του ποτενσιόμετρου.

6 PW0 Αυτός ο ακροδέκτης είναι ακροδέκτης υαλοκαθαριστήρα του ποτενσιόμετρου (για αλλαγή αντίστασης)
7 PB0 Αυτός είναι ένας άλλος ακροδέκτης του ποτενσιόμετρου.

8 VCC Power to IC δίνεται μέσω αυτού του πείρου.

Αυτό το IC περιέχει μόνο ένα ποτενσιόμετρο. Μερικά IC έχουν το πολύ ενσωματωμένο ποτενσιόμετρο. Αυτό
Η τιμή της αντίστασης μεταξύ υαλοκαθαριστήρα και οποιουδήποτε άλλου τερματικού αλλάζει σε 256 βήματα, από 0 σε 255. Δεδομένου ότι χρησιμοποιούμε μια αντίσταση 10k, η αντίσταση αλλάζει σε βήματα:
10k / 256 = 39 ohms ανά βήμα μεταξύ 0 και 255

ΣΥΣΤΑΤΙΚΑ

Χρειαζόμαστε τα ακόλουθα στοιχεία για αυτό το έργο.

1. ARDUINO
2. MC41010 IC
3. 220 OHM ΑΝΤΙΣΤΑΣΗ
4. LED
5. ΣΥΝΔΕΣΗ καλωδίων

Πραγματοποιήστε συνδέσεις όπως φαίνεται στο σχ.

1. Συνδέστε τον πείρο cs στον ψηφιακό πείρο 10.
2. Συνδέστε τον ακροδέκτη SCK στον ψηφιακό ακροδέκτη 13.
3. Συνδέστε τον πείρο SDI / SDO στον ψηφιακό πείρο 11.
4. VSS στη γείωση του arduino
5. PA0 έως 5v καρφίτσα arduino
6. PB0 στο έδαφος του arduino
7. PWO στον αναλογικό πείρο A0 του arduino.
8. VCC έως 5 v του arduino.

ΚΩΔΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 1

Αυτός ο κωδικός εκτυπώνει την αλλαγή τάσης στον ακροδέκτη υαλοκαθαριστήρα και τη γείωση στο 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)

ΑΙΤΙΟΛΟΓΗΣΗ ΚΩΔΙΚΟΥ 1:

Για να χρησιμοποιήσετε ψηφιακό ποτενσιόμετρο με το arduino πρέπει πρώτα να συμπεριλάβετε τη βιβλιοθήκη SPI η οποία παρέχεται στο ίδιο το arduino IDE. Απλώς καλέστε τη βιβλιοθήκη με αυτήν την εντολή:
#περιλαμβάνω

Στην άκυρη ρύθμιση, οι ακίδες αντιστοιχίζονται ως έξοδος ή είσοδος. Επίσης, δίνονται εντολές για έναρξη SPI και σειριακή επικοινωνία μεταξύ arduino και 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)
}

Στο άκυρο βρόχο, για βρόχο χρησιμοποιείται για την αλλαγή της αντίστασης του ψηφιακού ποτ σε συνολικά 256 βήματα. Πρώτα από 0 έως 255 και μετά πάλι πίσω στο 0 με καθυστέρηση 10 χιλιοστών του δευτερολέπτου μεταξύ κάθε βήματος:

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

Η συνάρτηση digitalPotWrite (i) γράφει αυτήν την τιμή για να αλλάξει αντίσταση σε συγκεκριμένη διεύθυνση του ic.

Η αντίσταση μεταξύ του υαλοκαθαριστήρα και του τερματικού τερματικού μπορεί να υπολογιστεί χρησιμοποιώντας τους παρακάτω τύπους:

R1 = 10k * (επίπεδο 256) / 256 + Rw
Και
R2 = επίπεδο 10k * / 256 + Rw

Εδώ R1 = αντίσταση μεταξύ υαλοκαθαριστήρα και ενός ακροδέκτη
R2 = αντίσταση μεταξύ υαλοκαθαριστήρα και άλλου τερματικού
Επίπεδο = βήμα σε μια συγκεκριμένη στιγμή (μεταβλητή 'I' που χρησιμοποιείται για βρόχο)
Rw = αντίσταση του τερματικού υαλοκαθαριστήρα (μπορεί να βρεθεί στο φύλλο δεδομένων του ic)
Χρησιμοποιώντας τη λειτουργία digitalPotWrite (), το τσιπ ψηφιακού ποτενσιόμετρου επιλέγεται εκχωρώντας χαμηλή τάση στον ακροδέκτη CS. Τώρα καθώς έχει επιλεγεί το ic, πρέπει να καλείται μια διεύθυνση στην οποία θα γραφτούν τα δεδομένα. Στο τελευταίο τμήμα του κώδικα:

SPI. Μεταφορά (B00010001)

Η διεύθυνση καλείται που είναι B00010001 για να επιλέξετε το τερματικό υαλοκαθαριστήρα του ic στο οποίο θα γραφτούν τα δεδομένα. Και ως εκ τούτου για την τιμή του βρόχου, δηλαδή γράφω για να αλλάξω την αντίσταση.

ΕΡΓΑΣΙΑ ΚΥΚΛΩΜΑΤΟΣ:

Εφόσον η τιμή του i αλλάζει συνεχώς την είσοδο σε A0 pin του arduino αλλάζει επίσης μεταξύ 0 και 1023. Αυτό συμβαίνει επειδή ο ακροδέκτης υαλοκαθαριστήρα συνδέεται απευθείας με τον ακροδέκτη A0 και άλλος ακροδέκτης ποτενσιόμετρου συνδέεται με 5volt και γείωση αντίστοιχα. Τώρα, όταν αλλάζει η αντίσταση, το ίδιο ισχύει και για την είσοδο της τάσης που λαμβάνεται απευθείας από το arduino και έτσι λαμβάνουμε μια τιμή τάσης στη σειριακή οθόνη για μια συγκεκριμένη τιμή αντίστασης.

ΠΡΟΣΟΧΗ 1:

Αυτές είναι μερικές εικόνες προσομοίωσης για αυτό το κύκλωμα σε διάφορες τιμές του i:

Τώρα απλώς συνδέστε ένα led σε σειρά με 220ohm αντίσταση στον ακροδέκτη υαλοκαθαριστήρα του IC όπως φαίνεται στο σχήμα.

ΚΩΔΙΚΟΣ 2:

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

ΑΙΤΙΟΛΟΓΗΣΗ ΚΩΔΙΚΟΥ 2:

Αυτός ο κωδικός είναι παρόμοιος με τον κωδικό 1 εκτός από το ότι δεν υπάρχουν σειριακές εντολές σε αυτόν τον κώδικα. Επομένως, δεν θα εκτυπωθούν τιμές στη σειριακή οθόνη.

ΕΡΓΑΣΙΑ ΕΡΓΑΣΙΑΣ

Δεδομένου ότι το led συνδέεται μεταξύ του ακροδέκτη υαλοκαθαριστήρα και της γείωσης καθώς η αντίσταση αλλάζει, το ίδιο ισχύει και για την τάση κατά μήκος του led. Και ως εκ τούτου, καθώς η αντίσταση στην οποία συνδέεται το led αυξάνεται από 0ohm στο μέγιστο, έτσι και η φωτεινότητα του led. Το οποίο και πάλι εξασθενεί αργά λόγω μείωσης της αντίστασης από το μέγιστο σε 0v.

Προσομοίωση2

Προσομοίωση3




Προηγούμενο: Πώς να ελέγξετε το σερβοκινητήρα χρησιμοποιώντας το Joystick Επόμενο: Δημιουργήστε αυτό το Advanced Digital Ammeter χρησιμοποιώντας το Arduino