- Comparaison de l'ADC dans Arduino et STM32F103C8
- ADC dans STM32
- Comment un signal analogique est converti en format numérique
- Broches ADC dans STM32F103C8T6
- Composants requis
- Schéma de circuit et explications
- Programmation STM32 pour la lecture des valeurs ADC
Une caractéristique commune qui est utilisée dans presque toutes les applications intégrées est le module ADC (convertisseur analogique-numérique). Ces convertisseurs analogique-numérique peuvent lire la tension de capteurs analogiques tels que le capteur de température, le capteur d'inclinaison, le capteur de courant, le capteur Flex et bien plus encore. Dans ce didacticiel, nous allons donc apprendre à utiliser ADC dans STM32F103C8 pour lire les tensions analogiques à l'aide de l'IDE Energia. Nous allons connecter un petit potentiomètre à la carte STM32 Blue Pill et fournir une tension variable à une broche analogique, lire la tension et l'afficher sur l'écran LCD 16x2.
Comparaison de l'ADC dans Arduino et STM32F103C8
Dans la carte Arduino, il contient un ADC 10 bits à 6 canaux (8 canaux sur le Mini et le Nano, 16 sur le Mega) avec une plage de tension d'entrée de 0V à 5V. Cela signifie qu'il mappera les tensions d'entrée entre 0 et 5 volts en valeurs entières entre 0 et 1023. Maintenant, dans le cas du STM32F103C8, nous avons 10 canaux, ADC 12 bits avec une plage d'entrée 0V -3,3V. Il mappera les tensions d'entrée entre 0 et 3,3 volts en valeurs entières comprises entre 0 et 4095.
ADC dans STM32
L'ADC embarqué dans les microcontrôleurs STM32 utilise le principe SAR (successive approximation register), par lequel la conversion est effectuée en plusieurs étapes. Le nombre d'étapes de conversion est égal au nombre de bits dans le convertisseur ADC. Chaque étape est pilotée par l'horloge ADC. Chaque horloge ADC produit un bit du résultat à la sortie. La conception interne de l'ADC est basée sur la technique des condensateurs commutés. Si vous êtes nouveau sur STM32, consultez notre didacticiel Premiers pas avec STM32.
Résolution 12 bits
Cet ADC est un ADC 10 canaux 12 bits. Ici, le terme 10 canaux implique qu'il existe 10 broches ADC à l'aide desquelles nous pouvons mesurer la tension analogique. Le terme 12 bits implique la résolution de l'ADC. 12 bits signifie 2 à la puissance de dix (2 12) qui est 4096. C'est le nombre d'étapes d'échantillonnage pour notre ADC, donc la plage de nos valeurs ADC sera de 0 à 4095. La valeur augmentera de 0 à 4095 basé sur la valeur de la tension par étape, qui peut être calculée par formule
TENSION / PAS = TENSION DE RÉFÉRENCE / 4096 = (3,3 / 4096 = 8,056 mV) par unité.
Comment un signal analogique est converti en format numérique
Comme les ordinateurs stockent et traitent uniquement les valeurs binaires / numériques (1 et 0). Ainsi, les signaux analogiques comme la sortie du capteur en volts doivent être convertis en valeurs numériques pour le traitement et la conversion doit être précise. Lorsqu'une tension analogique d'entrée est donnée au STM32 à ses entrées analogiques, la valeur analogique est lue et stockée dans une variable entière. Cette valeur analogique stockée (0-3,3 V) est convertie en valeurs entières (0-4096) en utilisant la formule ci-dessous:
TENSION D'ENTREE = (Valeur ADC / Résolution ADC) * Tension de référence
Résolution = 4096
Référence = 3,3 V
Broches ADC dans STM32F103C8T6
Il y a 10 broches analogiques dans STM32 de PA0 à PB1.
Vérifiez également comment utiliser ADC dans d'autres microcontrôleurs:
- Comment utiliser ADC dans Arduino Uno?
- Interfaçage ADC0808 avec microcontrôleur 8051
- Utilisation du module ADC du microcontrôleur PIC
- Tutoriel ADC Raspberry Pi
- Comment utiliser ADC dans MSP430G2 - Mesure de tension analogique
Composants requis
- STM32F103C8
- LCD 16 * 2
- Potentiomètre 100k
- Planche à pain
- Fils de connexion
Schéma de circuit et explications
Le schéma de circuit pour l'interface 16 * 2 LCD et entrée analogique à une carte STM32F103C8T6 est illustré ci-dessous.
Les connexions effectuées pour l'écran LCD sont indiquées ci-dessous:
Broche LCD Non |
Nom de la broche LCD |
Nom de broche STM32 |
1 |
Sol (Gnd) |
Terre (G) |
2 |
VCC |
5V |
3 |
VEE |
Broche du centre du potentiomètre |
4 |
Inscription Sélectionner (RS) |
PB11 |
5 |
Lecture / écriture (RW) |
Terre (G) |
6 |
Activer (EN) |
PB10 |
sept |
Bit de données 0 (DB0) |
Pas de connexion (NC) |
8 |
Bit de données 1 (DB1) |
Pas de connexion (NC) |
9 |
Bit de données 2 (DB2) |
Pas de connexion (NC) |
dix |
Bit de données 3 (DB3) |
Pas de connexion (NC) |
11 |
Bit de données 4 (DB4) |
PB0 |
12 |
Bit de données 5 (DB5) |
PB1 |
13 |
Bit de données 6 (DB6) |
PC13 |
14 |
Bit de données 7 (DB7) |
PC14 |
15 |
LED positive |
5V |
16 |
LED négative |
Terre (G) |
Les connexions sont effectuées conformément au tableau ci-dessus. Il y a deux potentiomètres présents dans le circuit, le premier est utilisé pour le diviseur de tension qui peut être utilisé pour faire varier la tension et fournir une entrée analogique au STM32. La broche gauche de ce potentiomètre reçoit une tension d'entrée positive de STM32 (3,3 V) et la broche droite est connectée à la terre, la broche centrale du potentiomètre est connectée à la broche d'entrée analogique (PA7) de STM32. L'autre potentiomètre sert à faire varier le contraste de l'écran LCD. La source d'alimentation pour STM32 est fournie au moyen d'une alimentation USB à partir d'un PC ou d'un ordinateur portable.
Programmation STM32 pour la lecture des valeurs ADC
Dans notre tutoriel précédent, nous avons appris la programmation de la carte STM32F103C8T6 à l'aide du port USB. Nous n'avons donc pas besoin d'un programmeur FTDI maintenant. Connectez-le simplement au PC via le port USB de STM32 et commencez la programmation avec ARDUINO IDE. La programmation de votre STM32 dans ARDUINO IDE pour lire la tension analogique est très simple. C'est la même chose que la carte Arduino. Il n'est pas nécessaire de changer les broches de cavalier du STM32.
Dans ce programme lira la valeur analogique et calculera la tension avec cette valeur, puis affichera les valeurs analogiques et numériques sur l'écran LCD.
Tout d' abord définir des épinglettes LCD. Celles-ci définissent à quelle broche de STM32 les broches LCD sont connectées. Vous pouvez modifier selon vos besoins.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // mentionne les noms des broches avec l'écran LCD connecté à
Ensuite, nous incluons le fichier d'en-tête de l'écran LCD. Cela appelle la bibliothèque qui contient le code de la façon dont le STM32 doit communiquer avec l'écran LCD. Assurez-vous également que la fonction Liquid Crystal est appelée avec les noms de broches que nous venons de définir ci-dessus.
#comprendre
À l'intérieur de la fonction setup () , nous donnerions simplement un message d'introduction à afficher sur l'écran LCD. Vous pouvez en apprendre davantage sur l'interface LCD avec STM32.
lcd.begin (16, 2); // Nous utilisons un écran LCD 16 * 2 lcd.clear (); // Efface l'écran lcd.setCursor (0, 0); // A la première ligne, première colonne lcd.prin t ("CIRCUITDIGEST"); // Imprimer ce lcd.setCursor (0, 1); // À la deuxième ligne, première colonne n lcd.print ("STM32F103C8"); // Imprimer thi s retard (2000); // attendez deux secondes lcd.clear (); // Efface l'écran lcd.setCursor (0, 0); // A la première ligne, première colonne lcd.print ("USING ADC IN"); // Imprimer ce lcd.setCursor (0,1); // À la deuxième ligne, première colonne lcd.print ("STM32F103C8"); // Imprimer ce délai (2000); // attendez deux secondes lcd.clear (); // Effacer l'écran
Enfin, à l'intérieur de notre fonction infinite loop () , nous commençons à lire la tension analogique fournie à la broche PA7 à partir du potentiomètre. Comme nous l'avons déjà mentionné, le microcontrôleur est un appareil numérique et il ne peut pas lire directement le niveau de tension. En utilisant la technique SAR, le niveau de tension est mappé de 0 à 4096. Ces valeurs sont appelées les valeurs ADC, pour obtenir cette valeur ADC, utilisez simplement la ligne suivante
int val = analogRead (A7); // lire la valeur ADC de la broche PA 7
Ici, la fonction analogRead () est utilisée pour lire la valeur analogique de la broche. Enfin, nous sauvegardons cette valeur dans une variable appelée « val ». Le type de cette variable est entier car nous n'obtiendrons que des valeurs comprises entre 0 et 4096 à stocker dans cette variable.
L'étape suivante serait de calculer la valeur de tension à partir de la valeur ADC. Pour ce faire, nous avons les formules suivantes
Tension = (Valeur ADC / Résolution ADC) * Voltag e de référence
Dans notre cas, nous savons déjà que la résolution ADC de notre microcontrôleur est de 4096. La valeur ADC se trouve également dans la ligne précédente et stocke la variable appelée val. La tension de référence est égale à la tension à laquelle le microcontrôleur fonctionne. Lorsque la carte STM32 est alimenté via un câble USB alors la tension de fonctionnement est 3.3V. Vous pouvez également mesurer la tension de fonctionnement en utilisant un multimètre sur la broche Vcc et de masse sur la carte. Ainsi, la formule ci-dessus s'inscrit dans notre cas, comme indiqué ci-dessous
tension flottante = (float (val) / 4096) * 3,3; // formules pour convertir la valeur ADC en voltag e
Vous pourriez être confondu avec la ligne float (val). Ceci est utilisé pour convertir la variable «val» du type de données int au type de données «float». Cette conversion est nécessaire car ce n'est que si nous obtenons le résultat de val / 4096 dans float que nous pouvons le multiplier par 3.3. Si la valeur est reçue en entier, elle sera toujours 0 et le résultat sera également zéro. Une fois que nous avons calculé la valeur ADC et la tension, il ne reste plus qu'à afficher le résultat sur l'écran LCD, ce qui peut être fait en utilisant les lignes suivantes
lcd.setCursor (0, 0); // positionne le curseur sur la colonne 0, ligne 0 lcd.print ("ADC Val:"); lcd.print (val); // Afficher la valeur ADC lcd.setCursor (0, 1); // positionne le curseur sur la colonne 0, ligne 1 lcd.print ("Voltage:"); lcd.print (tension); // Affichage de la tension
Le code complet et la vidéo de démonstration sont donnés ci-dessous.