Regardez le tutoriel vidéo

La plupart des microcontrôleurs aujourd’hui ont des convertisseurs analogique-numérique (ADC) intégrés.

Les signaux analogiques: Des quantités directement mesurables en termes d’une autre quantité

Quelques exemples:

  • Thermomètre: Le mercure liquide au-dedans du thermomètre monte en mesure que la température augmente
  • Compteur de vitesse de la voiture: L’Aiguille du compteur de vitesse  bouge vers l’extrême droit en mesure que vous accélérez
  • L’Amplificateur Audio: Le volume  d’un amplificateur audio augmente en mesure que vous tournez le bouton.

Les signaux numériques: Ont juste deux états. 0 ou 1. ON ou OFF.

Le PIC18F4620 (40 broches) a 13 canaux d’entrée de tension analogique, le PIC18F2620 (28 broches) a 10 canaux d’entrée de tension analogique, le PIC18F1220 (18 broches) a 7 canaux d’entrée de tension analogique etc.

Figure 1: Canaux d’entrée de tension analogique

Ces convertisseurs analogique-numérique permettent des tensions continues analogiques d’être converties en un nombres numériques discret de 10 bits à l’intérieur du microcontrôleur comme le microcontrôleur peut traiter seulement de nombre numérique. Cela signifie que les broches analogiques ont la capacité de détecter 1,024 (210) niveaux analogiques discrets par rapport à deux niveaux seulement (0 et 5 V) des broches numériques. Cela peut permettre à Arduino d’être relié à des capteurs analogiques, tels que des capteurs de température, des capteurs de pression, des capteurs d’humidité et des capteurs optiques

Tout capteur ou détecteur qui peut générer une tension électrique  entre 0V et un maximum de 5V peut être utilisé.  Si la sortie du voltage est plus grande que 5V, une méthode pour le rabaisser doit être utilisé, tel qu’un diviseur de tension avec des résistances.

Conversion

Pour convertir un signal analogique en format numérique, nous avons deux étapes principales à traiter:

1. Quantifier:

Consiste essentiellement à décomposer une valeur analogique dans un ensemble d’états finis

Exemple: Supposons que vous avez des signaux 0-5V. Le nombre d’états possibles que le convertisseur peut produire est: N = 2n, où n est le nombre de bits dans le convertisseur analogique-numérique.

Pour un convertisseur de 3 bits, N =23=8. Taille de quantification analogique: Q = (Vmax-Vmin) / N = (5V – 0V) / 8 = 0,625V.

Nous aurons un ensemble de tensions de 0 à 5V dans un ensemble d’états discrets avec des incréments de 0,625V:

  • 0V à 0,625V
  • 0.625V à 1.25V
  • 1.25V à 1.875V
  • 1.875V à 2.5V
  • 2,5V à 3,125V
  • 3,125V à 3,75V
  • 3,75V à 4,375V
  • 4.375V à 5V

La résolution du convertisseur indique le nombre de valeurs discrètes qu’il peut produire sur toute la gamme de valeurs analogiques.

La résolution est généralement exprimée en bits et est égale à la taille de quantification (Q).
(Q) = Vrange / 2 ^ n, où Vrange est la gamme de tensions analogiques pouvant être représentées.
Plus la résolution est élevée, plus la valeur convertie est précise. La plupart des microcontrôleurs PIC18F ont des canaux analogiques avec une résolution de 10 bits.

2. Encodage
Cela permet d’attribuer un mot ou un numéro numérique à chaque état et de l’associer au signal d’entrée.

Si 0V est détecté par un canal ADC 10 bits, une fois la conversion terminée, 00 0000 0000 doit être stocké en mémoire. À l’autre extrême, si 5V est détecté par le canal ADC, 11 1111 1111 devrait être stocké dans la mémoire. Toute valeur intermédiaire produira un nombre binaire correspondant.

Configuration du convertisseur analogique-numérique avec le Configurateur de Code MPLAB

MPLAB est en train de supprimer progressivement la bibliothèque périphérique PIC18F qui n’est plus incluse dans la version 1.35 du compilateur XC8. Dans cette version, vous devez les télécharger et les installer séparément dans votre compilateur et ils sont maintenant appelés: Legacy Peripheral Libraries.

Le MPLAB® Code Configurator (MCC) ou Configurateur de Code MPLAB est un plug-in pour MPLAB® X IDE qui génère un code C facile à comprendre et des pilotes périphériques insérés dans un projet MPLAB® X, based on the peripheral settings and selections made in the Graphical User Interface (GUI).

L’avantage de MCC, il peut générer des codes et des pilotes non seulement pour PIC18F, mais pour une large gamme de PIC, y compris les séries PIC16F et PIC24.

Pour en savoir plus, lisez l’article:

MPLAB® Code Configurator.

Voici la configuration ADC avec MCC. Dans cet exemple, nous utilisons le PIC18F26K20. Ceux-ci sont nos configurations:

  • Source d’horloge: FOSC / 2: définitions de sources d’horloge analogiques à numériques (A / D) (sélectionnez la fréquence d’horloge utilisée pour la synchronisation interne du convertisseur analogique-numérique.
    Il affecte également la durée de conversion) L’horloge est essentielle pour produire la conversion analogique-numérique la plus rapide mais aussi précise.
  • Temps d’acquisition: 2 TAD: La durée de la conversion d’un bit est définie comme TAD. Une conversion complète de 10 bits nécessite 11 périodes TAD. Pour une conversion correcte, la spécification TAD appropriée doit être satisfaite. Consultez la fiche technique de votre appareil pour connaître les exigences de conversion ADC. Pour le PIC18F26K20, le TAD min est de 0,7 us et de 25 us max.
  • Alignement des résultats: Droit. Vous pouvez justifier à droite ou à gauche justifier le résultat.
  • Référence positive: nous utilisons le VDD (+ 5V) comme référence positive.
  • Référence Négative: Nous utilisons le VSS (0V) comme référence négative.
  • Channel ANo: Dans le Pin Manager, nous avons activé la broche RA0 qui est la canal analogique 0 comme broche analogique.

Figure 2: Configuration ADC avec MCC

Ensuite, tout ce que nous devons faire est de cliquer sur générer pour générer nos fichiers source et en-tête. La figure 3 ci-dessous montre les fichiers générés. Les fichiers d’en-tête adc.h, mcc.h, pin_manager.h et les fichiers sources adc.c, mcc.c et pin_manager.c.

Figure 3:Fichiers générés par MCC

Les fonctions que nous pouvons utiliser avec le module ADC sont déclarées dans le fichier adc.h:

  • ADC_Initialize (): Cette routine initialise l’ADC. Cette routine doit être appelée avant toute autre routine ADC. Cette routine ne doit être appelée qu’une seule fois lors de l’initialisation du système.
  • ADC_StartConversion(adc_channel_t channel): Cette routine est utilisée pour sélectionner le canal désiré pour la conversion. La fonction ADC_Initialize () doit avoir été appelée avant d’appeler cette fonction.
  • ADC_IsConversionDone(): Cette routine est utilisée pour déterminer si la conversion est terminée. Lorsque la conversion est terminée, la routine retourne la valeur true. Il renvoie false sinon.
  • ADC_GetConversionResult(): Cette routine est utilisée pour obtenir la valeur convertie analogique-numérique. Cette routine obtient des valeurs converties à partir du canal spécifié.

Exemple

  • ADC_GetConversion(adc_channel_t channel): Cette routine est utilisée pour sélectionner le canal désiré pour la conversion et pour obtenir la valeur convertie analogique-numérique.

Figure 4: Affichage de la tension analogique à partir de AN0

Ci-dessous se trouve le fichier main.c: La tension aux bornes du potentiomètre connecté à AN0 est lue et affichée sur l’écran LCD comme indiqué sur la figure 4 ci-dessus.

Vous pouvez télécharger les fichiers de projet complet (code source MPLAB XC8 et Proteus conception schématique) ci – dessous ici. Tous les fichiers sont compressés, vous aurez besoin de les dézipper ( Télécharger une version gratuite de l’utilitaire Winzip pour décompresser les fichiers ).

Télécharger:  Projet ADC_with_MCC_MPLAB

Télécharger:  ADC_with_MCC_Proteus