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 centrum danych ADC podczas modulowania napięcia wejściowego za pomocą potentometru.

Wymagania wstępne

  • Komputer z jedną płytą (ARMv7 lub nowszy) oparty na architekturze ARM (SBC)
  • MCP3008 konwertera analogowo-cyfrowego
  • Potentometr z trzema wyprowadzeniami
  • Breadboard
  • Przewody skoczkowe
  • Płytka rozdzielcza GPIO do Raspberry Pi (opcjonalnie/zalecane)
  • .NET SDK 10 lub nowszy

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 .NET, takich jak Orange Pi, ODROID i nie tylko.

Przygotowywanie SBC

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

  • 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 na 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 zmiennego (środkowego) wyprowadzenia na potencjometrze (żółty)

Dostarczać 3,3V i uziemić do zewnętrznych wyprowadzeń 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.

Tip

Płytka wyprowadzeń GPIO w połączeniu z płytką stykową zaleca się w celu usprawnienia połączeń z nagłówkiem GPIO.

Tworzenie aplikacji

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

  1. Utwórz nową aplikację konsoli .NET przy użyciu interfejsu wiersza polecenia .NET lub 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 Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.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 jest ustawiona na nowe wystąpienie klasy SpiConnectionSettings. Konstruktor ustawia busId parametr na 0, a chipSelectLine parametr na 0.
    • Deklaracja using tworzy wystąpienie SpiDevice przez wywołanie SpiDevice.Create i przekazanie argumentu 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 argument SpiDevice do konstruktora.
    • Pętla while jest uruchamiana w nieskończoność. Każda iteracja:
      1. Czyści konsolę.
      2. Odczytuje wartość CH0 na ADC poprzez wywołanie 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. Śpi 500 ms.
  4. Kompilowanie aplikacji. Jeśli korzystasz z .NET CLI, wykonaj dotnet build. Aby skompilować Visual Studio, naciśnij Ctrl+Shift+B.

  5. Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Deploy .NET aplikacje do urządzenia Raspberry Pi. Upewnij się, że nadajesz plikowi wykonywalnemu uprawnienia do wykonywania przy użyciu 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 klawisze 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 GitHub.

Następne kroki