Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
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 |
---|---|
![]() |
![]() 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:
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
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-*
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 ofSpiConnectionSettings
. Konstruktor ustawiabusId
parametr na 0, achipSelectLine
parametr na 0. - A using declaration creates an instance of
SpiDevice
by callingSpiDevice.Create
and passing inhardwareSpiSettings
. Reprezentuje toSpiDevice
magistralę SPI. Deklaracjausing
gwarantuje, że obiekt zostanie usunięty, a zasoby sprzętowe zostaną prawidłowo zwolnione. - Inna
using
deklaracja tworzy wystąpienieMcp3008
i przekazujeSpiDevice
do konstruktora. - Pętla
while
jest uruchamiana w nieskończoność. Każda iteracja:- Czyści konsolę.
- Odczytuje wartość CH0 na ADC, wywołując
mcp.Read(0)
. - Zapisuje wartość surową do konsoli.
- 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.
- Sleeps 500 ms.
-
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.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
.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.
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.