Udostępnij za pośrednictwem


Odczytywanie wartości z konwertera analogowo-cyfrowego

Konwerter analogowo-cyfrowy (ADC) to urządzenie, które może odczytywać wartość napięcia wejściowego analogowego i konwertować je na wartość cyfrową. ADC są używane do odczytywania wartości z termistorów, potencjometrów i innych urządzeń, które zmieniają opór w zależności od określonych warunków.

W tym temacie użyjesz .NET do odczytywania wartości z przetwornika ADC podczas modulowania napięcia wejściowego za pomocą potencjometru.

Wymagania wstępne

  • Komputer z jedną płytą (ARMv7 lub nowszy) oparty na architekturze ARM (SBC)
  • MCP3008 konwertera analogowo-cyfrowego
  • Three-pin potentiometer
  • Breadboard
  • Przewody skoczkowe
  • Płytka rozdzielcza GPIO do Raspberry Pi (opcjonalnie/zalecane)
  • .NET SDK 8 or later

Uwaga

Ten samouczek został napisany przy założeniu, że docelowe urządzenie to Raspberry Pi. Jednak ten samouczek może być używany dla dowolnego systemu Linux opartego na protokole SBC, który obsługuje platformę .NET, taką jak Orange Pi, ODROID i nie tylko.

Prepare the SBC

Upewnij się, że protokół SBC jest skonfigurowany do obsługi następujących usług:

  • Protokół SSH
  • SPI

W przypadku wielu urządzeń nie jest wymagana żadna dodatkowa konfiguracja. W przypadku urządzenia Raspberry Pi użyj polecenia raspi-config. Aby uzyskać więcej informacji na temat raspi-config, zapoznaj się z dokumentacją Raspberry Pi.

Przygotowywanie sprzętu

Użyj składników sprzętowych do skompilowania obwodu, jak pokazano na poniższym diagramie:

Diagram Fritzing przedstawiający obwód z MCP3008 ADC i potentometrem

MCP3008 używa interfejsu szeregowego peryferyjnego (SPI) do komunikacji. Poniżej przedstawiono połączenia z MCP3008 do urządzenia Raspberry Pi i potentometru:

  • DD V do 3.3V (pokazano na czerwono)
  • VREF do 3.3V (czerwony)
  • AGND to ground (black)
  • CLK to SCLK (orange)
  • DOUT to MISO (orange)
  • DIN to MOSI (orange)
  • CS/SHDN to CE0 (green)
  • DGND to ground (black)
  • CH0 to variable (middle) pin on potentiometer (yellow)

Supply 3.3V and ground to the outer pins on the potentiometer. Kolejność jest nieważna.

Refer to the following pinout diagrams as needed:

MCP3008 Raspberry Pi GPIO
A diagram showing the pinout of the MCP3008 A diagram showing the pinout of the Raspberry Pi GPIO header. Image courtesy Raspberry Pi Foundation.
Obraz dzięki uprzejmości Raspberry Pi Foundation.

Tip

A GPIO breakout board in conjunction with a breadboard is recommended to streamline connections to the GPIO header.

Tworzenie aplikacji

Wykonaj następujące kroki w preferowanym środowisku projektowym:

  1. Utwórz nową aplikację konsolową platformy .NET przy użyciu interfejsu wiersza polecenia platformy .NET lub programu Visual Studio. Nadaj mu nazwę AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Dodaj pakiet Iot.Device.Bindings do projektu. Użyj .NET CLI z katalogu projektu lub programu Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Zastąp zawartość pliku Program.cs następującym kodem:

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

    W poprzednim kodzie:

    • hardwareSpiSettings is set to a new instance of SpiConnectionSettings. Konstruktor ustawia busId parametr na 0, a chipSelectLine parametr na 0.
    • A using declaration creates an instance of SpiDevice by calling SpiDevice.Create and passing in hardwareSpiSettings. Reprezentuje to SpiDevice magistralę SPI. Deklaracja using gwarantuje, że obiekt zostanie usunięty, a zasoby sprzętowe zostaną prawidłowo zwolnione.
    • Inna using deklaracja tworzy wystąpienie Mcp3008 i przekazuje SpiDevice do konstruktora.
    • Pętla while jest uruchamiana w nieskończoność. Każda iteracja:
      1. Czyści konsolę.
      2. Odczytuje wartość CH0 na ADC, wywołując mcp.Read(0).
      3. Zapisuje wartość surową do konsoli.
      4. Zapisuje wartość na konsoli w formacie procentowym.
        • Aby obliczyć wartość procentową, wartość jest podzielona przez 10,23. MCP3008 jest 10-bitowym ADC, co oznacza, że zwraca 1024 możliwe wartości z zakresu od 0 do 1023. Podzielenie wartości o 10,23 reprezentuje wartość jako wartość procentową.
        • Wartość procentowa jest zaokrąglona do najbliższej wartości 0,1.
      5. Sleeps 500 ms.
  4. Kompilowanie aplikacji. Jeśli używasz interfejsu wiersza polecenia platformy .NET, uruchom polecenie dotnet build. Aby skompilować w programie Visual Studio, naciśnij Ctrl+Shift+B.

  5. Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Wdrażanie aplikacji .NET na urządzeniach Raspberry Pi. Make sure to give the executable execute permission using chmod +x.

  6. Uruchom aplikację na urządzeniu Raspberry Pi, przełączając się do katalogu wdrożenia i uruchamiając plik wykonywalny.

    ./AdcTutorial
    

    Obserwuj dane wyjściowe podczas obracania tarczy potentometru. Jest to spowodowane potentometrem, który zmienia napięcie dostarczone do CH0 w ADC. ADC porównuje napięcie wejściowe CH0 z napięciem odniesienia dostarczonym do VREF w celu wygenerowania wartości.

  7. Zakończ program, naciskając Ctrl+C.

Gratulacje! Użyłeś SPI do odczytu wartości z konwertera analogowo-cyfrowego.

Pobieranie kodu źródłowego

Źródło tego samouczka jest dostępne w witrynie GitHub.

Następne kroki