Partager via


Lire les valeurs d’un convertisseur analogique-numérique

Un convertisseur analogique-numérique (ADC, Analog-to-Digital Converter) est un appareil qui peut lire une valeur de tension d’entrée analogique et la convertir en une valeur numérique. Les ADC sont utilisés pour lire des valeurs auprès de thermistors, de potentiomètres et d’autres appareils dont la résistance change en fonction de certaines conditions.

Dans cette rubrique, vous allez utiliser .NET pour lire les valeurs d’un ADC quand vous modulez la tension d’entrée avec un potentiomètre.

Prérequis

  • Ordinateur à carte unique (SBC) ARM (ARMv7 ou version supérieure)
  • Convertisseur analogique-numérique MCP3008
  • Potentiomètre à trois broches
  • Platine d’expérimentation
  • Câbles de liaison
  • Carte d’évaluation GPIO Raspberry Pi (facultative/recommandée)
  • Kit de développement logiciel (SDK) .NET version 7 ou ultérieure

Notes

Ce tutoriel est écrit en supposant que l’appareil cible est Raspberry Pi. Toutefois, ce tutoriel peut être utilisé pour n’importe quel SBC Linux qui prend en charge .NET, comme Orange Pi, ODROID, etc.

Préparez le SBC

Vérifiez que votre SBC est configuré pour prendre en charge les services suivants :

  • SSH
  • SPI

Pour de nombreux appareils, aucune configuration supplémentaire n’est requise. Pour Raspberry Pi, utilisez la commande raspi-config. Pour plus d’informations sur raspi-config, reportez-vous à la documentation sur Raspberry Pi.

Préparer le matériel

Utilisez les composants matériels pour générer le circuit, comme illustré dans le diagramme suivant :

Diagramme Fritzing montrant un circuit avec un ADC MCP3008 et un potentiomètre

Le MCP3008 utilise SPI (Serial Peripheral Interface) pour communiquer. Voici les connexions du MCP3008 au Raspberry Pi et au potentiomètre :

  • VDD à 3.3V (indiqué en rouge)
  • VREF à 3.3V (rouge)
  • AGND à la terre (noir)
  • CLK à SCLK (orange)
  • DOUT à MISO (orange)
  • DOUT à MOSI (orange)
  • CS/SHDN à CE0 (vert)
  • DGND à la terre (noir)
  • Broche CH0 à variable (milieu) sur le potentiomètre (jaune)

Fournissez du courant à 3,3V et mettez à la terrer les broches externes sur le potentiomètre. L’ordre n’a pas d’importance.

Si nécessaire, reportez-vous aux diagrammes de brochage suivant :

MCP3008 Raspberry Pi GPIO
Diagramme montrant le brochage du MCP3008 Diagramme montrant le raccordement de l’en-tête GPIO Raspberry Pi. Image avec la permission de Raspberry Pi Foundation.
Image avec la permission de Raspberry Pi Foundation.

Conseil

Un circuit imprimé GPIO conjointement avec un tableau de navigation est recommandé pour simplifier les connexions à la tête du GPIO.

Créer l’application

Effectuez les étapes suivantes dans votre environnement de développement préféré :

  1. Créez une application console .NET à l’aide de l’interface CLI .NET ou de Visual Studio. Nommez-le AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Ajoutez le package Iot.Device.Bindings au projet. Utilisez l’interface CLI .NET du répertoire du projet ou Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Remplacez le contenu du fichier Program.cs par le code suivant :

    using System;
    using System.Device.Spi;
    using System.Threading;
    using Iot.Device.Adc;
    
    var hardwareSpiSettings = new SpiConnectionSettings(0, 0);
    
    using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings);
    using var mcp = new Mcp3008(spi);
    while (true)
    {
        Console.Clear();
        double value = mcp.Read(0);
        Console.WriteLine($"{value}");
        Console.WriteLine($"{Math.Round(value/10.23, 1)}%");
        Thread.Sleep(500);
    }
    

    Dans le code précédent :

    • hardwareSpiSettings est défini sur une nouvelle instance de SpiConnectionSettings. Le constructeur définit le paramètre busId sur 0 et le paramètre chipSelectLine sur 0.
    • Une déclaration using crée une instance d’appel de SpiDevice en appelant SpiDevice.Create et en transférant à hardwareSpiSettings. Ce SpiDevice représente le bus SPI. La déclaration using garantit que l’objet est supprimé et que les ressources matérielles sont correctement libérées.
    • Une autre déclaration using crée une instance de Mcp3008 et passe le SpiDevice dans le constructeur.
    • Une boucle while s’exécute indéfiniment. Chaque itération :
      1. Efface la console.
      2. Lit la valeur de CH0 sur l’ADC en appelant mcp.Read(0).
      3. Écrit la valeur brute dans la console.
      4. Écrit la valeur sur la console sous forme de pourcentage.
        • Pour calculer le pourcentage, la valeur est divisée par 10,23. Le MCP3008 est un ADC 10 bits, ce qui signifie qu’il retourne 1 024 valeurs possibles, comprises entre 0 et 1 023. La division de la valeur par 10,23 représente la valeur sous forme de pourcentage.
        • Le pourcentage est arrondi au 0,1 le plus proche.
      5. Est mis en veille pendant 500 ms.
  4. Générez l'application. Si vous utilisez l’interface CLI .NET, exécutez dotnet build. Pour générer dans Visual Studio, appuyez sur Ctrl+Maj+B.

  5. Déployez l’application sur le SBC en tant qu’application autonome. Pour obtenir des instructions, consultez Déployer des applications .NET sur Raspberry Pi. Veillez à accorder à l’exécutable l’autorisation exécuter à l’aide de chmod +x.

  6. Exécutez l’application sur le Raspberry Pi en basculant vers le répertoire de déploiement et en exécutant l’exécutable.

    ./AdcTutorial
    

    Observez la sortie quand vous faites pivoter le bouton du potentiomètre. Ceci est dû au potentiomètre qui fait varier la tension fournie à CH0 sur l’ADC. L’ADC compare la tension d’entrée sur CH0 à la tension de référence fournie à VREF pour générer une valeur.

  7. Terminez le programme en appuyant sur Ctrl+C.

Félicitations ! Vous avez utilisé SPI pour lire des valeurs auprès d’un convertisseur analogique-numérique.

Obtenir le code source

La source de ce tutoriel est disponible sur GitHub.

Étapes suivantes