Delen via


Waarden lezen van een analoog-naar-digitaal conversieprogramma

Een analog-to-digital converter (ADC) is een apparaat dat een analoge invoerspanningswaarde kan lezen en deze kan omzetten in een digitale waarde. ADC's worden gebruikt voor het lezen van waarden van thermistors, potentiometers en andere apparaten die de weerstand veranderen op basis van bepaalde voorwaarden.

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

Vereiste voorwaarden

  • OP ARM gebaseerde (ARMv7 of hoger) single-board computer (SBC)
  • MCP3008 analog-to-digital converter
  • Drie-pin potentiometer
  • Breadboard
  • Jumperkabels
  • Raspberry Pi GPIO breakout board (optioneel/aanbevolen)
  • .NET SDK 10 of hoger

Opmerking

Deze handleiding is geschreven, ervan uitgaande dat het doelapparaat een Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke linux-SBC die ondersteuning biedt voor .NET, zoals Orange Pi, ODROID en meer.

De SBC voorbereiden

Zorg ervoor dat uw SBC is geconfigureerd ter ondersteuning van de volgende services:

  • SSH
  • SPI

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

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 gebruikt Serial Peripheral Interface (SPI) om te communiceren. Hier volgen de verbindingen van de MCP3008 naar de Raspberry Pi en de potentiometer:

  • VDD tot 3.3V (rood weergegeven)
  • VREF naar 3.3V (rood)
  • AGND naar aarde (zwart)
  • CLK naar SCLK (oranje)
  • DOUT naar MISO (oranje)
  • DIN naar MOSI (oranje)
  • CS/SHDN naar CE0 (groen)
  • DGND naar aarde (zwart)
  • CH0 naar variabele (middelste) pin op potentiometer (geel)

Voorzie 3.3V en massa aan de buitenste pinnetjes op de potentiometer. De volgorde is niet belangrijk.

Raadpleeg indien nodig de volgende pinoutdiagrammen:

MCP3008 Raspberry Pi GPIO
Een diagram met de pin-out 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.

Hint

Een GPIO-breakoutbord 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. Noem het AdcTutorial.

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

    dotnet package add Iot.Device.Bindings --version 4.1.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 wordt ingesteld op een nieuwe instantie 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 SpiDevice.Create aan te roepen en hardwareSpiSettings mee te geven. Dit SpiDevice vertegenwoordigt de SPI-bus. De using declaratie zorgt ervoor dat het object wordt verwijderd en hardwarebronnen correct worden vrijgegeven.
    • Met een andere using declaratie wordt een exemplaar van Mcp3008 gemaakt en wordt SpiDevice aan de constructor doorgegeven.
    • Een while lus draait voor onbepaalde tijd door. Elke iteratie:
      1. De console wordt leeggemaakt.
      2. Leest de waarde van CH0 op de ADC door aan te roepen mcp.Read(0).
      3. Hiermee wordt de onbewerkte waarde naar de console geschreven.
      4. Schrijft de waarde naar de console, geformatteerd 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 er 1024 mogelijke waarden tussen 0 en 1023 worden geretourneerd. Het delen van de waarde met 10,23 vertegenwoordigt de waarde als een percentage.
        • Het percentage wordt afgerond op de dichtstbijzijnde 0,1.
      5. Slaapt 500 ms.
  4. Maak de app. Als u de .NET CLI gebruikt, voert u dotnet build uit. Als u in Visual Studio wilt bouwen, drukt u op Ctrl+Shift+B.

  5. Implementeer de app als een zelfstandige app in de SBC. Zie Deploy-.NET-apps voor Raspberry Pi voor instructies. Zorg ervoor dat u het uitvoerbare bestand uitvoerende rechten 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 je de potentiometerwijzerplaat draait. Dit komt doordat de potentiometer de spanning varieert die aan CH0 van de ADC wordt geleverd. De ADC vergelijkt de invoerspanning 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 te lezen van een analoog-naar-digitaal conversieprogramma.

De broncode ophalen

De bron voor deze zelfstudie is beschikbaar op GitHub.

Volgende stappen