Dela via


Läsa värden från en analog-till-digital konverterare

En analog-till-digital konverterare (ADC) är en enhet som kan läsa ett analogt indataspänningsvärde och konvertera det till ett digitalt värde. APC:er används för att läsa värden från thermistors, potentiometer och andra enheter som ändrar resistens baserat på vissa villkor.

I det här avsnittet använder du .NET för att läsa värden från en ADC när du modulerar inspänningen med en potentiometer.

Förutsättningar

  • ARM-baserad (ARMv7 eller senare) enkelkortsdator (SBC)
  • MCP3008 analog-till-digital-konverterare
  • Potentiometer med tre stift
  • Skärbräda
  • Bygelkablar
  • Raspberry Pi GPIO breakout board (valfritt/rekommenderas)
  • .NET SDK 8 eller senare

Anmärkning

Den här handledningen är skriven med antagandet att målenheten är en Raspberry Pi. Den här handledningen kan dock användas för alla Linux-baserade SBC som stöder .NET, till exempel Orange Pi, ODROID med mera.

Förbereda SBC

Kontrollera att din SBC har konfigurerats för att stödja följande tjänster:

  • SSH
  • SPI

För många enheter krävs ingen ytterligare konfiguration. Använd kommandot för Raspberry Pi raspi-config . Mer information om raspi-configfinns i Raspberry Pi-dokumentationen.

Förbereda maskinvaran

Använd maskinvarukomponenterna för att skapa kretsen enligt följande diagram:

Ett Fritzing-diagram som visar en krets med en MCP3008 ADC och en potentiometer

MCP3008 använder SPI (Serial Peripheral Interface) för att kommunicera. Följande är anslutningarna från MCP3008 till Raspberry Pi och potentiometern:

  • VDD till 3,3V (visas i rött)
  • VREF till 3,3V (röd)
  • AGND till jord (svart)
  • CLK till SCLK (orange)
  • DUT till MISO (orange)
  • DIN till MOSI (orange)
  • CS/SHDN till CE0 (grön)
  • DGND till jord (svart)
  • CH0 till variabelt (centralt) ben på potentiometer (gul)

Leverera 3,3V och jord till de yttre stiften på potentiometern. Ordning är oviktig.

Se vid behov följande kopplingsschema:

MCP3008 Raspberry Pi GPIO
Ett diagram som visar pinout-koden för MCP3008 Ett diagram som visar pinout-koden för Raspberry Pi GPIO-huvudet. Bild med tillstånd Raspberry Pi Foundation.
Bild med tillstånd Raspberry Pi Foundation.

Tips/Råd

En GPIO-utbrytartavla tillsammans med en brödskiva rekommenderas för att effektivisera anslutningarna till GPIO-huvudet.

Skapa appen

Slutför följande steg i den utvecklingsmiljö du föredrar:

  1. Skapa en ny .NET-konsolapp med hjälp av .NET CLI eller Visual Studio. Ge den namnet AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Lägg till paketet Iot.Device.Bindings i projektet. Använd antingen .NET CLI från projektkatalogen eller Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Ersätt innehållet i Program.cs med följande kod:

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

    I koden ovan:

    • hardwareSpiSettings ställs in som en ny instans av SpiConnectionSettings. Konstruktorn anger parametern busId till 0 och parametern chipSelectLine till 0.
    • En användningsdeklaration skapar en instans av SpiDevice genom att anropa SpiDevice.Create och skicka in hardwareSpiSettings. Detta SpiDevice representerar SPI-bussen. Deklarationen using säkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.
    • En annan using deklaration skapar en instans av Mcp3008 och skickar SpiDevice den till konstruktorn.
    • En while loop körs på obestämd tid. Varje iteration:
      1. Rensar konsolen.
      2. Läser värdet för CH0 på ADC genom att anropa mcp.Read(0).
      3. Skriver raw-värdet till konsolen.
      4. Skriver värdet till konsolen formaterat som procent.
        • För att beräkna procentandelen divideras värdet med 10,23. MCP3008 är en 10-bitars ADC, vilket innebär att den returnerar 1024 möjliga värden mellan 0 och 1023. Att dividera värdet med 10,23 representerar värdet i procent.
        • Procentandelen avrundas till närmaste 0,1.
      5. Väntar i 500 ms.
  4. Skapa appen. Om du använder .NET CLI kör du dotnet build. Om du vill skapa i Visual Studio trycker du på Ctrl+Skift+B.

  5. Distribuera appen till SBC som en fristående app. Anvisningar finns i Distribuera .NET-appar till Raspberry Pi. Se till att ge den körbara filen körningsbehörighet med hjälp av chmod +x.

  6. Kör appen på Raspberry Pi genom att växla till mappen för distribution och köra den körbara filen.

    ./AdcTutorial
    

    Observera resultatet när du vrider potentiometerratten. Detta beror på att potentiometern varierar den spänning som levereras till CH0 på ADC. ADC jämför indataspänningen på CH0 med referensspänningen som levereras till VREF för att generera ett värde.

  7. Avsluta programmet genom att trycka på Ctrl+C.

Grattis! Du har använt SPI för att läsa värden från en analog-till-digital konverterare.

Hämta källkoden

Källan för den här handledningen är tillgänglig på GitHub.

Nästa steg