Verwenden des digitalen Potentiometers MCP41xx mit Arduino

Verwenden des digitalen Potentiometers MCP41xx mit Arduino

In diesem Projekt werden wir ein digitales Potentiometer mit Arduino verbinden. In dieser Demonstration wird das Potentiometer MCP41010 verwendet, Sie können jedoch jedes digitale Potentiometer der Serie MC41 ** verwenden.

Von Ankit Negi



EINFÜHRUNG IN MC41010

Digitale Potentiometer sind wie jedes analoge Potentiometer mit drei Anschlüssen mit nur einem Unterschied. Während bei Analog die Wischerposition manuell geändert werden muss, wird bei einem digitalen Potentiometer die Wischerposition gemäß dem Signal eingestellt, das das Potentiometer mit einem Mikrocontroller oder Mikroprozessor erhält.



FEIGE. IC-Pinbelegung MC41010

FEIGE. IC-Pinbelegung MC41010

Der MC41010 ist ein 8-poliger Dual-In-Line-Gehäuse-IC. Wie jedes analoge Potentiometer ist dieser IC in 5k, 10k, 50k und 100k erhältlich. In dieser Schaltung wird ein 10k-Potentiometer verwendet
Der MC4131 verfügt über folgende 8 Anschlüsse:



Pin Nr. Pin Name Kleine Beschreibung

1 CS Über diesen Pin wird der an Arduino angeschlossene Slave oder Peripheriegerät ausgewählt. Wenn das ist
Niedrig, dann ist MC41010 ausgewählt, und wenn dies hoch ist, wird MC41010 abgewählt.

2 SCLK Shared / Serial Clock, Arduino gibt die Uhr für die Initialisierung der Datenübertragung von
Arduino zu IC und umgekehrt.

3 SDI / SDO Serielle Daten werden über diesen Pin zwischen Arduino und IC übertragen
4 Der VSS-Erdungsanschluss von Arduino ist mit diesem Pin des IC verbunden.



5 PA0 Dies ist eine Klemme des Potentiometers.

6 PW0 Diese Klemme ist die Wischerklemme des Potentiometers (um den Widerstand zu ändern).
7 PB0 Dies ist ein weiterer Anschluss des Potentiometers.

8 VCC Die Stromversorgung des IC erfolgt über diesen Pin.

Dieser IC enthält nur ein Potentiometer. Einige ICs haben höchstens zwei eingebaute Potentiometer. Dies
Der Wert des Widerstands zwischen Wischer und einem anderen Anschluss wird in 256 Schritten von 0 auf 255 geändert. Da wir einen 10k-Widerstandswert verwenden, wird der Widerstandswert in Schritten von:
10k / 256 = 39 Ohm pro Schritt zwischen 0 und 255

KOMPONENTEN

Für dieses Projekt benötigen wir folgende Komponenten.

1. ARDUINO
2. MC41010 IC
3. 220 OHM WIDERSTAND
4. LED
5. ANSCHLUSSKABEL

Stellen Sie die Verbindungen wie in Abb.

1. Verbinden Sie den cs-Pin mit dem digitalen Pin 10.
2. Verbinden Sie den SCK-Pin mit dem digitalen Pin 13.
3. Verbinden Sie den SDI / SDO-Pin mit dem digitalen Pin 11.
4. VSS zum Erdungsstift des Arduino
5. PA0 bis 5 V Pin von Arduino
6. PB0 zum Boden von Arduino
7. PWO zu analogem Pin A0 von Arduino.
8. VCC auf 5 V Arduino.

PROGRAMMCODE 1

Dieser Code druckt die Spannungsänderung zwischen Wischeranschluss und Masse auf dem seriellen Monitor der 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)

CODE 1 ERKLÄREN:

Um ein digitales Potentiometer mit Arduino zu verwenden, müssen Sie zuerst die SPI-Bibliothek einschließen, die in der Arduino IDE selbst bereitgestellt wird. Rufen Sie einfach die Bibliothek mit diesem Befehl auf:
#einschließen

Bei der Leereneinstellung werden die Pins als Ausgang oder Eingang zugewiesen. Außerdem werden Befehle zum Starten der SPI- und seriellen Kommunikation zwischen Arduino und IC gegeben:

#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 der Leerenschleife wird die for-Schleife verwendet, um den Widerstand des digitalen Topfes in insgesamt 256 Schritten zu ändern. Zuerst von 0 auf 255 und dann wieder zurück auf 0 mit einer Verzögerung von 10 Millisekunden zwischen den einzelnen Schritten:

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

Die Funktion digitalPotWrite (i) schreibt diesen Wert, um den Widerstand an einer bestimmten Adresse von ic zu ändern.

Der Widerstand zwischen Wischer und Endanschluss kann mit folgenden Formeln berechnet werden:

R1 = 10k * (256-Level) / 256 + Rw
Und
R2 = 10k * Level / 256 + Rw

Hier ist R1 = Widerstand zwischen Wischer und einem Anschluss
R2 = Widerstand zwischen Wischer und anderem Anschluss
Level = Schritt zu einem bestimmten Zeitpunkt (Variable 'I', die in der for-Schleife verwendet wird)
Rw = Widerstand des Wischeranschlusses (siehe Datenblatt des ic)
Mit der Funktion digitalPotWrite () wird der digitale Potentiometerchip ausgewählt, indem dem CS-Pin eine NIEDRIGE Spannung zugewiesen wird. Nachdem das IC ausgewählt wurde, muss eine Adresse aufgerufen werden, auf die Daten geschrieben werden. Im letzten Teil des Codes:

SPI.transfer (B00010001)

Die Adresse B00010001 wird aufgerufen, um das Wischerterminal des IC auszuwählen, auf das Daten geschrieben werden sollen. Und daher wird für den Wert der Schleife, d. H. I, geschrieben, um den Widerstand zu ändern.

SCHALTUNGSARBEITEN:

Solange der Wert von i den Eingang zum A0-Pin des Arduino ändert, ändert sich auch der Wert zwischen 0 und 1023. Dies geschieht, weil der Wischeranschluss direkt mit dem A0-Pin verbunden ist und der andere Anschluss des Potentiometers mit 5 Volt bzw. Masse verbunden ist. Wenn sich der Widerstand ändert, ändert sich auch die Spannung, die direkt von Arduino als Eingang genommen wird, und somit erhalten wir einen Spannungswert auf dem seriellen Monitor für einen bestimmten Widerstandswert.

SIMULATION 1:

Dies sind einige Simulationsbilder für diese Schaltung bei verschiedenen Werten von i:

Schließen Sie nun einfach eine LED in Reihe mit einem 220-Ohm-Widerstand an den Wischeranschluss des IC an, wie in der Abbildung gezeigt.

CODE 2:

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

CODE 2 ERKLÄREN:

Dieser Code ähnelt Code 1, außer dass dieser Code keine seriellen Befehle enthält. Auf dem seriellen Monitor werden also keine Werte gedruckt.

ARBEITSERKLÄRUNG

Da die LED zwischen Wischerklemme und Masse angeschlossen ist, wenn sich der Widerstand ändert, ändert sich auch die Spannung an der LED. Wenn der Widerstand, über den die LED angeschlossen ist, von 0 Ohm auf das Maximum ansteigt, steigt auch die Helligkeit der LED. Was aufgrund der Abnahme des Widerstands von maximal auf 0 V langsam wieder verschwindet.

Simulation2

Simulation3




Zurück: So steuern Sie den Servomotor mit einem Joystick Weiter: Stellen Sie dieses erweiterte digitale Amperemeter mit Arduino her