Notatka
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 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:
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 |
|---|---|
|
|
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:
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 AdcTutorialDodaj 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.0Zastą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:
-
hardwareSpiSettingsjest ustawiona na nowe wystąpienie klasySpiConnectionSettings. Konstruktor ustawiabusIdparametr na 0, achipSelectLineparametr na 0. - Deklaracja using tworzy wystąpienie
SpiDeviceprzez wywołanieSpiDevice.Createi przekazanie argumentuhardwareSpiSettings. Reprezentuje toSpiDevicemagistralę SPI. Deklaracjausinggwarantuje, że obiekt zostanie usunięty, a zasoby sprzętowe zostaną prawidłowo zwolnione. - Inna
usingdeklaracja tworzy wystąpienieMcp3008i przekazuje argumentSpiDevicedo konstruktora. - Pętla
whilejest uruchamiana w nieskończoność. Każda iteracja:- Czyści konsolę.
- Odczytuje wartość CH0 na ADC poprzez wywołanie
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.
- Śpi 500 ms.
-
Kompilowanie aplikacji. Jeśli korzystasz z .NET CLI, wykonaj
dotnet build. Aby skompilować Visual Studio, naciśnij Ctrl+Shift+B.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.Uruchom aplikację na urządzeniu Raspberry Pi, przełączając się do katalogu wdrożenia i uruchamiając plik wykonywalny.
./AdcTutorialObserwuj 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 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.