Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een analog-to-digital converter (ADC) is een apparaat dat een analoge invoerspanningswaarde kan lezen en deze kan omzetten in een digitale waarde. ADC's worden gebruikt voor het lezen van waarden van thermistors, potentiometers en andere apparaten die de weerstand veranderen op basis van bepaalde voorwaarden.
In dit onderwerp gebruikt u .NET om waarden van een ADC te lezen terwijl u de invoerspanning moduleert met een potentiometer.
Vereiste voorwaarden
- OP ARM gebaseerde (ARMv7 of hoger) single-board computer (SBC)
- MCP3008 analog-to-digital converter
- Drie-pin potentiometer
- Breadboard
- Jumperkabels
- Raspberry Pi GPIO breakout board (optioneel/aanbevolen)
- .NET SDK 10 of hoger
Opmerking
Deze handleiding is geschreven, ervan uitgaande dat het doelapparaat een Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke linux-SBC die ondersteuning biedt voor .NET, zoals Orange Pi, ODROID en meer.
De SBC voorbereiden
Zorg ervoor dat uw SBC is geconfigureerd ter ondersteuning van de volgende services:
- SSH
- SPI
Voor veel apparaten is geen extra configuratie vereist. Gebruik de raspi-config opdracht voor Raspberry Pi. Raadpleeg de raspi-config voor meer informatie.
De hardware voorbereiden
Gebruik de hardwareonderdelen om het circuit te bouwen zoals wordt weergegeven in het volgende diagram:
De MCP3008 gebruikt Serial Peripheral Interface (SPI) om te communiceren. Hier volgen de verbindingen van de MCP3008 naar de Raspberry Pi en de potentiometer:
- VDD tot 3.3V (rood weergegeven)
- VREF naar 3.3V (rood)
- AGND naar aarde (zwart)
- CLK naar SCLK (oranje)
- DOUT naar MISO (oranje)
- DIN naar MOSI (oranje)
- CS/SHDN naar CE0 (groen)
- DGND naar aarde (zwart)
- CH0 naar variabele (middelste) pin op potentiometer (geel)
Voorzie 3.3V en massa aan de buitenste pinnetjes op de potentiometer. De volgorde is niet belangrijk.
Raadpleeg indien nodig de volgende pinoutdiagrammen:
| MCP3008 | Raspberry Pi GPIO |
|---|---|
|
|
Afbeelding met dank aan Raspberry Pi Foundation. |
Hint
Een GPIO-breakoutbord in combinatie met een breadboard wordt aanbevolen om verbindingen met de GPIO-header te stroomlijnen.
De app maken
Voer de volgende stappen uit in de ontwikkelomgeving van uw voorkeur:
Maak een nieuwe .NET Console-app met behulp van de .NET CLI of Visual Studio. Noem het AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorialVoeg het pakket Iot.Device.Bindings toe aan het project. Gebruik .NET CLI uit de projectmap of Visual Studio.
dotnet package add Iot.Device.Bindings --version 4.1.0Vervang de inhoud van Program.cs door de volgende code:
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); }In de voorgaande code:
-
hardwareSpiSettingswordt ingesteld op een nieuwe instantie vanSpiConnectionSettings. De constructor stelt debusIdparameter in op 0 en dechipSelectLineparameter op 0. - Een using-declaratie maakt een exemplaar van
SpiDevicedoorSpiDevice.Createaan te roepen enhardwareSpiSettingsmee te geven. DitSpiDevicevertegenwoordigt de SPI-bus. Deusingdeclaratie zorgt ervoor dat het object wordt verwijderd en hardwarebronnen correct worden vrijgegeven. - Met een andere
usingdeclaratie wordt een exemplaar vanMcp3008gemaakt en wordtSpiDeviceaan de constructor doorgegeven. - Een
whilelus draait voor onbepaalde tijd door. Elke iteratie:- De console wordt leeggemaakt.
- Leest de waarde van CH0 op de ADC door aan te roepen
mcp.Read(0). - Hiermee wordt de onbewerkte waarde naar de console geschreven.
- Schrijft de waarde naar de console, geformatteerd als een percentage.
- Als u het percentage wilt berekenen, wordt de waarde gedeeld door 10,23. De MCP3008 is een 10-bits ADC, wat betekent dat er 1024 mogelijke waarden tussen 0 en 1023 worden geretourneerd. Het delen van de waarde met 10,23 vertegenwoordigt de waarde als een percentage.
- Het percentage wordt afgerond op de dichtstbijzijnde 0,1.
- Slaapt 500 ms.
-
Maak de app. Als u de .NET CLI gebruikt, voert u
dotnet builduit. Als u in Visual Studio wilt bouwen, drukt u op Ctrl+Shift+B.Implementeer de app als een zelfstandige app in de SBC. Zie Deploy-.NET-apps voor Raspberry Pi voor instructies. Zorg ervoor dat u het uitvoerbare bestand uitvoerende rechten geeft met behulp van
chmod +x.Voer de app uit op de Raspberry Pi door over te schakelen naar de implementatiemap en het uitvoerbare bestand uit te voeren.
./AdcTutorialBekijk de uitvoer terwijl je de potentiometerwijzerplaat draait. Dit komt doordat de potentiometer de spanning varieert die aan CH0 van de ADC wordt geleverd. De ADC vergelijkt de invoerspanning op CH0 met de referentiespanning die aan VREF wordt geleverd om een waarde te genereren.
Beëindig het programma door op Ctrl+C te drukken.
Gefeliciteerd! U hebt SPI gebruikt om waarden te lezen van een analoog-naar-digitaal conversieprogramma.
De broncode ophalen
De bron voor deze zelfstudie is beschikbaar op GitHub.