Utilisation du potentiomètre numérique MCP41xx avec Arduino

Essayez Notre Instrument Pour Éliminer Les Problèmes





Dans ce projet, nous allons interfacer un potentiomètre numérique avec arduino. Dans ce potentiomètre de démonstration MCP41010 est utilisé, mais vous pouvez utiliser n'importe quel potentiomètre numérique de la série MC41 **.

Par Ankit Negi



INTRODUCTION AU MC41010

Les potentiomètres numériques sont comme n'importe quel potentiomètre analogique avec trois bornes avec une seule différence. Alors qu'en analogique, vous devez changer manuellement la position de l'essuie-glace, en cas de potentiomètre numérique, la position de l'essuie-glace est réglée en fonction du signal donné au potentiomètre à l'aide de n'importe quel microcontrôleur ou microprocesseur.

FIGUE. Brochage IC MC41010

FIGUE. Brochage IC MC41010



MC41010 est un circuit intégré à double ligne à 8 broches. Comme tout potentiomètre analogique, ce circuit intégré est disponible en 5k, 10k, 50k et 100k. Dans ce circuit, un potentiomètre 10k est utilisé
Le MC4131 a les 8 bornes suivantes:

N ° de broche Nom de la broche Petite description

1 CS Cette broche est utilisée pour sélectionner l'esclave ou le périphérique connecté à arduino. Si c'est
Low, alors MC41010 est sélectionné et s'il est élevé, alors MC41010 est désélectionné.

2 SCLK Shared / Serial Clock, arduino donne une horloge pour l'initialisation du transfert de données depuis
Arduino à IC et vice versa.

3 Les données série SDI / SDO sont transférées entre arduino et IC via cette broche
La borne de terre 4 VSS d'arduino est connectée à cette broche d'IC.

5 PA0 C'est une borne du potentiomètre.

6 PW0 Cette borne est la borne d'essuie-glace du potentiomètre (pour changer la résistance)
7 PB0 C'est une autre borne du potentiomètre.

8 VCC L'alimentation vers IC est fournie par cette broche.

Ce CI ne contient qu'un seul potentiomètre. Certains circuits intégrés ont au plus deux potentiomètres intégrés. Ce
La valeur de la résistance entre l'essuie-glace et toute autre borne est modifiée en 256 étapes, de 0 à 255. Puisque nous utilisons une résistance de 10k, la valeur de la résistance est modifiée par étapes de:
10k / 256 = 39 ohms par pas entre 0 et 255

COMPOSANTS

Nous avons besoin des composants suivants pour ce projet.

1. ARDUINO
2. MC41010 IC
3. RÉSISTANCE 220 OHM
4. LED
5. CONNEXION DES FILS

Effectuez les connexions comme indiqué sur la fig.

1. Connectez la broche cs à la broche numérique 10.
2. Connectez la broche SCK à la broche numérique 13.
3. Connectez la broche SDI / SDO à la broche numérique 11.
4. VSS à la broche de terre de l'arduino
5. Broche PA0 à 5v d'arduino
6. PB0 à la masse d'arduino
7. PWO à la broche analogique A0 d'arduino.
8. VCC à 5 v d'arduino.

CODE DE PROGRAMME 1

Ce code imprime le changement de tension à travers la borne d'essuie-glace et la masse sur le moniteur série d'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)

EXPLIQUER LE CODE 1:

Pour utiliser le potentiomètre numérique avec arduino, vous devez d'abord inclure la bibliothèque SPI qui est fournie dans l'IDE arduino lui-même. Appelez simplement la bibliothèque avec cette commande:
#comprendre

Dans une configuration vide, les broches sont affectées en tant que sortie ou entrée. Et des commandes pour commencer la communication SPI et série entre arduino et ic sont également données:

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

Dans la boucle vide, la boucle for est utilisée pour changer la résistance du potentiomètre numérique sur un total de 256 pas. D'abord de 0 à 255, puis de nouveau à 0 avec un délai de 10 millisecondes entre chaque étape:

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

La fonction digitalPotWrite (i) écrit cette valeur pour changer la résistance à une adresse particulière de ic.

La résistance entre l'essuie-glace et la borne d'extrémité peut être calculée à l'aide de ces formules:

R1 = 10k * (niveau 256) / 256 + Rw
Et
R2 = 10k * niveau / 256 + Rw

Ici R1 = résistance entre l'essuie-glace et une borne
R2 = résistance entre l'essuie-glace et l'autre borne
Niveau = pas à un instant particulier (variable «I» utilisée dans la boucle for)
Rw = résistance de la borne d'essuie-glace (peut être trouvée dans la fiche technique de l'ic)
En utilisant la fonction digitalPotWrite (), la puce du potentiomètre numérique est sélectionnée en attribuant une tension BASSE à la broche CS. Maintenant que l'ic est sélectionné, une adresse doit être appelée sur laquelle les données seront écrites. Dans la dernière partie du code:

Transfert SPI (B00010001)

L'adresse est appelée qui est B00010001 pour sélectionner le terminal d'essuie-glace de l'ic sur lequel les données seront écrites. Et donc pour la valeur de la boucle, c'est-à-dire que i est écrit pour changer la résistance.

FONCTIONNEMENT DU CIRCUIT:

Tant que la valeur de i continue de changer l'entrée à la broche A0 de l'arduino continue également de changer entre 0 et 1023. Cela se produit parce que la borne d'essuie-glace est directement connectée à la broche A0 et que l'autre borne du potentiomètre est connectée à 5 volts et à la masse respectivement. Maintenant, lorsque la résistance change, il en va de même pour la tension à travers elle, qui est directement prise par arduino comme entrée et nous obtenons ainsi une valeur de tension sur le moniteur série pour une valeur particulière de résistance.

SIMULATION 1:

Voici quelques images de simulation pour ce circuit à différentes valeurs de i:

Maintenant, connectez simplement une LED en série avec une résistance de 220 ohms à la borne d'essuie-glace de l'IC, comme indiqué sur la figure.

CODE 2:

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

EXPLIQUER LE CODE 2:

Ce code est similaire au code 1, sauf qu'il n'y a pas de commandes série dans ce code. Aucune valeur ne sera donc imprimée sur le moniteur série.

EXPLICATION DE TRAVAIL

Étant donné que la LED est connectée entre la borne d'essuie-glace et la masse lorsque la résistance change, il en va de même pour la tension aux bornes de la LED. Et donc, comme la résistance à travers laquelle la led est connectée augmente de 0ohm au maximum, la luminosité de la led augmente également. Qui à nouveau disparaissent lentement en raison de la diminution de la résistance du maximum à 0v.

Simulation2

Simulation3




Une paire de: Comment contrôler le moteur servo à l'aide du joystick Suivant: Faites cet ampèremètre numérique avancé en utilisant Arduino