Delen via


Waarden lezen van een analoog-naar-digitaal-conversieprogramma

Een analoog-naar-digitaal converter (ADC) is een apparaat dat een analoge ingangsspanningswaarde kan lezen en omzetten in een digitale waarde. AOC's worden gebruikt voor het lezen van waarden van thermistors, potentiometers en andere apparaten die de weerstand wijzigen op basis van bepaalde voorwaarden.

In dit onderwerp gebruikt u .NET om waarden van een ADC te lezen terwijl u de ingangsspanning moduleert met een potentiometer.

Vereisten

  • Op ARM gebaseerde (ARMv7 of hoger) computer met één bord (SBC)
  • MCP3008 analoog-naar-digitaal converter
  • Potentiometer met drie spelden
  • Breadboard
  • Jumper-draden
  • Raspberry Pi GPIO breakout board (optioneel/aanbevolen)
  • .NET SDK 7 of hoger

Notitie

Deze zelfstudie is geschreven, ervan uitgaande dat het doelapparaat Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke op Linux gebaseerde SBC die .NET ondersteunt, zoals Orange Pi, ODROID en meer.

De SBC voorbereiden

Zorg ervoor dat uw SBC is geconfigureerd om de volgende services te ondersteunen:

  • SSH
  • SPI

Voor veel apparaten is geen aanvullende configuratie vereist. Gebruik voor Raspberry Pi de raspi-config opdracht . Raadpleeg de Raspberry Pi-documentatie voor meer informatie overraspi-config.

De hardware voorbereiden

Gebruik de hardwareonderdelen om het circuit te bouwen, zoals wordt weergegeven in het volgende diagram:

Een Fritzing-diagram met een circuit met een MCP3008 ADC en een potentiometer

De MCP3008 maakt gebruik van Serial Peripheral Interface (SPI) om te communiceren. Hier volgen de verbindingen van de MCP3008 met de Raspberry Pi en potentiometer:

  • VDD tot 3,3V (rood weergegeven)
  • VVERW naar 3,3V (rood)
  • AGND op de grond (zwart)
  • CLK naar SCLK (oranje)
  • DOUT naar MISO (oranje)
  • DIN naar MOSI (oranje)
  • CS/SHDN naar CE0 (groen)
  • DGND aan de grond (zwart)
  • CH0 naar variabele (middelste) pin op potentiometer (geel)

Leveren 3.3V en aarden aan de buitenste pinnen op de potentiometer. Volgorde is niet belangrijk.

Raadpleeg indien nodig de volgende pin-outdiagrammen:

MCP3008 Raspberry Pi GPIO
Een diagram met de pinout van de MCP3008 Een diagram met de pinout van de Raspberry Pi GPIO-header. Afbeelding met dank aan Raspberry Pi Foundation.
Afbeelding met dank aan Raspberry Pi Foundation.

Tip

Een GPIO-breakoutboard in combinatie met een breadboard wordt aanbevolen om verbindingen met de GPIO-header te stroomlijnen.

De app maken

Voer de volgende stappen uit in de ontwikkelomgeving van uw voorkeur:

  1. Maak een nieuwe .NET Console-app met behulp van de .NET CLI of Visual Studio. Geef het de naam AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Voeg het pakket Iot.Device.Bindings toe aan het project. Gebruik .NET CLI vanuit de projectmap of Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Vervang de inhoud van Program.cs door de volgende code:

    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);
    }
    

    In de voorgaande code:

    • hardwareSpiSettings is ingesteld op een nieuw exemplaar van SpiConnectionSettings. De constructor stelt de busId parameter in op 0 en de chipSelectLine parameter op 0.
    • Een using-declaratie maakt een exemplaar van SpiDevice door aan te roepen SpiDevice.Create en door te geven in hardwareSpiSettings. Dit SpiDevice vertegenwoordigt de SPI-bus. De using declaratie zorgt ervoor dat het object wordt verwijderd en hardwareresources correct worden vrijgegeven.
    • Een andere using declaratie maakt een exemplaar van Mcp3008 en geeft de SpiDevice door aan de constructor.
    • Een while lus wordt voor onbepaalde tijd uitgevoerd. Elke iteratie:
      1. Hiermee wordt de console gewist.
      2. Leest de waarde van CH0 op de ADC door aan te roepen mcp.Read(0).
      3. Hiermee schrijft u de onbewerkte waarde naar de console.
      4. Hiermee schrijft u de waarde naar de console die is opgemaakt als een percentage.
        • Als u het percentage wilt berekenen, wordt de waarde gedeeld door 10,23. De MCP3008 is een 10-bits ADC, wat betekent dat deze 1024 mogelijke waarden tussen 0 en 1023 retourneert. De waarde delen door 10,23 vertegenwoordigt de waarde als een percentage.
        • Het percentage wordt afgerond op de dichtstbijzijnde 0,1.
      5. Slaapt 500 ms.
  4. de app bouwen. Als u de .NET CLI gebruikt, voert u uit dotnet build. Druk op Ctrl+Shift+B om in Visual Studio te bouwen.

  5. Implementeer de app in de SBC als een zelfstandige app. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbare uitvoermachtiging geeft met behulp van chmod +x.

  6. Voer de app uit op de Raspberry Pi door over te schakelen naar de implementatiemap en het uitvoerbare bestand uit te voeren.

    ./AdcTutorial
    

    Bekijk de uitvoer terwijl u de potentiometerknop draait. Dit komt doordat de potentiometer de spanning varieert die aan CH0 op de ADC wordt geleverd. De ADC vergelijkt de ingangsspanning op CH0 met de referentiespanning die aan VREF wordt geleverd om een waarde te genereren.

  7. Beëindig het programma door op Ctrl+C te drukken.

Gefeliciteerd U hebt SPI gebruikt om waarden uit een analoog-naar-digitaal conversieprogramma te lezen.

De broncode ophalen

De bron voor deze zelfstudie is beschikbaar op GitHub.

Volgende stappen