Académique Documents
Professionnel Documents
Culture Documents
RAPPORT DE TP
TP [3] : [Le Convertisseur Numérique-Analogique (CAN)]
Auteurs : Enseignant :
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]
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]
4
ING[1] Groupe [7]
5
ING[1] Groupe [7]
6
ING[1] Groupe [7]
7
ING[1] Groupe [7]
8
ING[1] Groupe [7]
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é.
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.
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>
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
while(!Serial);
}
void loop() {
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));
21