Vous êtes sur la page 1sur 21

ING[1] Groupe [7]

RAPPORT DE TP
TP [3] : [Le Convertisseur Numérique-Analogique (CAN)]

Auteurs : Enseignant :

Sébastien BOUCHET MME HAJ HAMAD IMEN


Alexandre YANG

- PARTIE I. [Partie théorique] –


A. [Contribution du bit 2]
B. [Synthèse]

- PARTIE II. [Partie pratique] -


C. [Port série]
D. [Le CNA R-2R 3-bit]

Nous attestons que ce travail est original, qu’il est le fruit d’un travail commun au binôme et qu’il a été
rédigé de manière autonome.

Paris, le 04/03/2024

1
ING[1] Groupe [7]
PARTIE I. [Partie théorique]
A. [Contribution du bit 2]

T1. On calcule d’abord les résistances équivalentes jusqu’au bit b2. On a alors un schéma comme à la
figure 1, mais le 0V et V0 sont aux positions opposées, avec V0 toujours inchangé. Finalement, on a un
diviseur de tension qui donne comme sur la figure 2 : Vth = V0/2 et Rth2 = R.
Finalement, on trouve : Vb2 = b2 * (V0/2).

Figure [1]

Figure [2]

T2. Lorsque les trois bits valent 0, on trouve une résistance équivalente de 1R.

T3.
D’après la formule donnée dans l’énoncé, on obtient ce tableau :
Code Binaire (b2 b1 b0) 000 001 010 011 100 101 110 111
Tension de sortie (V) 0 0,625 1.25 1.875 2.5 3.125 3.75 4.375

T4.
En généralisant le cas du CNA 3-bit à un CNA n-bit on obtient la formule vue dans la figure 1.

2
ING[1] Groupe [7]

Figure [3] : [Formule généralisée pour un CNA n-bit]

PARTIE II. [Partie pratique]


A. [Port série]

E1. Comme on peut voir sur les figures 1.1 et 1.2, le code de base fonctionne bien. On change ensuite
les paramètres du « if » afin d’avoir :
if (character == 'V' /*ou 'v' pour éteindre*/)

Et de même pour ‘B’ (ici blanc à la place de rouge). On a finalement le résultat sur les figures 1.3, 1.4,
1.5, 1.6.

3
ING[1] Groupe [7]

Figure [1.1] : [LED verte éteinte]

4
ING[1] Groupe [7]

Figure [1.2] : [LED verte allumée]

5
ING[1] Groupe [7]

Figure [1.3] : [LED B et V éteinte]

6
ING[1] Groupe [7]

Figure [1.4] : [LED V allumé et B éteinte]

7
ING[1] Groupe [7]

Figure [1.5] : [LED B allumé et V éteinte]

8
ING[1] Groupe [7]

Figure [1.6] : [LED B et V allumé]

9
ING[1] Groupe [7]
E2. Le code répondant à cette question se trouve en annexe 2.1. Le code fonctionne bien, la LED reste
allumée bien pendant le temps entré.

B. [Le CNA R-2R 3-bit]

E3. Le code répondant au cahier des charges énoncé est situé en annexe 3.1.

E4. Dans le tableau ci-dessous se trouve une photo de chaque LED à l’état binaire correspondant, avec
une photo complète et détaillée de chaque état binaire en annexe 4.1 à 4.8. Nous y retrouvons aussi la
tension de sortie VOUT trouvée lors de la question théorique T3 et les tensions de sortie obtenues à
l’aide du CNA, ainsi que la marge d’erreur ; c’est-à-dire la différence entre les deux valeurs.

Code 000 001 010 011 100 101 110 111


binaire
Etat des
LEDs

Tension de 0.000 0.625 1.25 1.875 2.5 3.125 3.75 4.375


sortie
théorique
(T3)
Tension de 0.000 0.787 1.481 2.229 3.021 3.578 4.291 5
sortie lue à
l’aide du
CNA
Erreur 0.000 0.162 0.231 0.354 0.521 0.453 0.541 0.625

E5.
La marge d’erreur peut être due au manque de précision du CNA R-2R. Elle peut également provenir
du code ; en effet, la fonction map() convertit les données en entiers, ce qui peut modifier les valeurs
et ainsi perdre en précision. Mais plus important que tout, il y a une grande plage de données possible
entre chaque valeur de palier. En effet, il y a une plage de valeurs possibles de 5/7 = 0.714. La marge
d’erreur possible est donc de 0.714.

E6. Le code permettant de répondre à cette question se trouve en annexe 6.1. La courbe obtenue à
l’aide de l’oscilloscope est effectivement croissante, augmentant d’un cran toutes les secondes. On y
retrouve donc effectivement la « rampe de tension » souhaitée. De plus, les valeurs mesurées à
l’oscilloscope semblent effectivement correspondre aux tensions théoriques souhaitées : on a donc
éliminé la marge d’erreur qui posait problème.

10
ING[1] Groupe [7]
Annexe 2.1 :
#include <Arduino.h>

int led = 13;


int duree = 0;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
while(!Serial);
}

void loop() {

Serial.println("Entrez la duree pendant laquelle vous souhaitez que la LED


soit allumée");

if (Serial.available()) {
duree = Serial.parseInt();
duree = duree*1000;
digitalWrite(led, HIGH);
delay(duree);
digitalWrite(led, LOW);
}

Serial.println("\n");
delay(1000);
}

11
ING[1] Groupe [7]
Annexe 3.1 :
#include <Arduino.h>
int Pot = A0;
int CNAout = A4;
const int ledPins[] = {10, 11, 12};
const int PinsCNA[] = {3, 4, 5};
float TensionPot = 0.0;
int MappedTPot = 0;
float VPot = 0.0;
float TensionCNA = 0.0;

void setup() {
for (int i = 0; i < 3; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(PinsCNA[i], OUTPUT);
}
Serial.begin(9600);
while(!Serial);
}

void loop() {
TensionPot = analogRead(Pot);
MappedTPot = map(TensionPot, 0, 1023, 0, 7);
TensionCNA = analogRead(CNAout) * 5.0 / 1023.0;
VPot = TensionPot * (5.0/1023.0);
for (int i = 0; i < 3; i++) {
digitalWrite(PinsCNA[i], bitRead(MappedTPot, i));
}
for (int i = 0; i < 3; i++) {
digitalWrite(ledPins[i], bitRead(MappedTPot, i));
}
Serial.println("\nTension en Binaire (b2 b1 b0) : ");
for (int i = 2; i >= 0; i--) {
digitalWrite(ledPins[i], bitRead(MappedTPot, i));
Serial.print(bitRead(MappedTPot, i));
Serial.print(" ");
}
Serial.print("\n\nLa tension lue au potentiomètre (sur 8 paliers à angles
égaux) est : ");
Serial.println(MappedTPot);
Serial.print("\nLa tension lue par le CNA (sur 5V) est : ");
Serial.println(TensionCNA, 2);
Serial.print("\nLa tension lue est : ");
Serial.println(VPot, 3);
Serial.println("\n");
delay(1000);
}

12
ING[1] Groupe [7]
Annexe 4.1 :

13
ING[1] Groupe [7]
Annexe 4.2 :

14
ING[1] Groupe [7]
Annexe 4.3 :

15
ING[1] Groupe [7]
Annexe 4.4 :

16
ING[1] Groupe [7]
Annexe 4.5 :

17
ING[1] Groupe [7]
Annexe 4.6 :

18
ING[1] Groupe [7]
Annexe 4.7 :

19
ING[1] Groupe [7]
Annexe 4.8 :

20
ING[1] Groupe [7]
Annexe 6.1 :
#include <Arduino.h>
#define Pot A0
#define CNA_B0 5
#define CNA_B1 4
#define CNA_B2 3

void setup() {
pinMode(CNA_B0, OUTPUT);
pinMode(CNA_B1, OUTPUT);
pinMode(CNA_B2, OUTPUT);
Serial.begin(9600);
}

void loop() {
for (int i = 0; i <= 7; i++) {
// Convertir le nombre en binaire et contrôler les broches correspondantes
digitalWrite(CNA_B0, bitRead(i, 0));
digitalWrite(CNA_B1, bitRead(i, 1));
digitalWrite(CNA_B2, bitRead(i, 2));

// Lire la valeur du potentiomètre


int PotValue = analogRead(Pot);

// Convertir la valeur du potentiomètre en tension entre 0 et 5 volts


float tension = PotValue * (5.0 / 1023.0);

// Afficher les informations dans le moniteur série

// Affichage de la commande sous forme b2 b1 b0


Serial.print("Commande (b2 b1 b0): ");
Serial.print(bitRead(i, 2));
Serial.print(" ");
Serial.print(bitRead(i, 1));
Serial.print(" ");
Serial.println(bitRead(i, 0));
Serial.print(" - Tension: ");
Serial.print(tension);
Serial.println(" volts");

// Attendre 1 seconde avant de passer à la prochaine étape


delay(1000);
}
}

21

Vous aimerez peut-être aussi