Odczytywanie wartości z przetwornika analogowo-cyfrowego

Przetwornik analogowy-cyfrowy (ADC) to urządzenie, które może odczytać wartość napięcia wejściowego analogowego i przekształcić je w wartość cyfrową. AdCs są używane do odczytywania wartości z termistorów, potentometrów i innych urządzeń, które zmieniają odporność na podstawie określonych warunków.

W tym temacie użyjesz platformy .NET do odczytywania wartości z usługi ADC podczas modulowania napięcia wejściowego za pomocą potentometru.

Wymagania wstępne

  • Komputer jednowłotowy oparty na usłudze ARM (ARMv7 lub nowszy) (SBC)
  • Konwerter analogowy-cyfrowy MCP3008
  • Potentometr z trzema pinami
  • Makiet
  • Przewody skoczkowe
  • Tablica breakout urządzenia Raspberry Pi GPIO (opcjonalnie/zalecana)
  • Zestaw .NET SDK 7 lub nowszy

Uwaga

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

Przygotowywanie protokołu SBC

Upewnij się, że usługa SBC jest skonfigurowana 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 raspi-config polecenia . Aby uzyskać więcej informacji na temat raspi-configusługi , zapoznaj się z dokumentacją urządzenia Raspberry Pi.

Przygotowywanie sprzętu

Użyj składników sprzętowych, aby skompilować obwód, jak pokazano na poniższym diagramie:

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

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

  • V DD do 3.3V (pokazano na czerwono)
  • VREF do 3.3V (czerwony)
  • AgND do ziemi (czarny)
  • CLK do SCLK (pomarańczowy)
  • DOUT do MISO (pomarańczowy)
  • DIN do MOSI (pomarańczowy)
  • CS/SHDN do CE0 (zielony)
  • DGND do ziemi (czarny)
  • CH0 do zmiennej (środkowa) pin na potentometrze (żółty)

Dostarcz 3,3V i uziemij do zewnętrznych szpilek na potentometrze. Kolejność jest nieważna.

W razie potrzeby zapoznaj się z następującymi diagramami przypinania:

MCP3008 Raspberry Pi GPIO
Diagram przedstawiający wyprowadzenia MCP3008 Diagram przedstawiający wyprowadzenia nagłówka GPIO urządzenia Raspberry Pi. Obraz dzięki uprzejmości Raspberry Pi Foundation.
Obraz dzięki uprzejmości Raspberry Pi Foundation.

Porada

Tablica podziału GPIO w połączeniu z tablicą do chleba zaleca się usprawnić połączenia z nagłówkiem GPIO.

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 interfejsu wiersza polecenia platformy .NET z katalogu projektu lub programu Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.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);
    }
    

    Powyższy kod ma następujące działanie:

    • hardwareSpiSettings jest ustawiona na nowe wystąpienie klasy SpiConnectionSettings. Konstruktor ustawia busId parametr na wartość 0, a chipSelectLine parametr na 0.
    • Deklaracja using tworzy wystąpienie SpiDevice obiektu przez wywołanie SpiDevice.Create i przekazanie elementu hardwareSpiSettings. Reprezentuje to SpiDevice magistralę SPI. Deklaracja using zapewnia, że obiekt jest usuwany, a zasoby sprzętowe są prawidłowo zwalniane.
    • Inna using deklaracja tworzy wystąpienie obiektu Mcp3008 i przekazuje element SpiDevice do konstruktora.
    • Pętla while jest uruchamiana na czas nieokreślony. Każda iteracja:
      1. Czyści konsolę.
      2. Odczytuje wartość CH0 w usłudze ADC przez wywołanie metody mcp.Read(0).
      3. Zapisuje nieprzetworzone wartości w konsoli.
      4. Zapisuje wartość w konsoli sformatowaną jako wartość procentową.
        • Aby obliczyć wartość procentową, wartość jest podzielona przez 10,23. MCP3008 jest 10-bitowym ADC, co oznacza, że zwraca 1024 możliwe wartości o wartościach od 0 do 1023. Podzielenie wartości przez 10,23 reprezentuje wartość jako wartość procentową.
        • Wartość procentowa jest zaokrąglona do najbliższej wartości 0,1.
      5. Śpi 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 klawisze Ctrl+Shift+B.

  5. Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Wdrażanie aplikacji .NET na urządzeniach Raspberry Pi. Pamiętaj, aby nadać wykonywalne uprawnienie do wykonywania przy użyciu polecenia 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 na ADC. ADC porównuje napięcie wejściowe na CH0 z napięciem odniesienia dostarczonym do VREF w celu wygenerowania wartości.

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

Gratulacje! Użyto spi do odczytywania wartości z konwertera analogowy-cyfrowy.

Uzyskiwanie kodu źródłowego

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

Następne kroki