Waarden lezen van een analoog-naar-digitaal-conversieprogramma
Een analoog-naar-digitaal converter (ADC) is een apparaat dat een analoge ingangsspanningswaarde kan lezen en omzetten in een digitale waarde. AOC's worden gebruikt voor het lezen van waarden van thermistors, potentiometers en andere apparaten die de weerstand wijzigen op basis van bepaalde voorwaarden.
In dit onderwerp gebruikt u .NET om waarden van een ADC te lezen terwijl u de ingangsspanning moduleert met een potentiometer.
Vereisten
- Op ARM gebaseerde (ARMv7 of hoger) computer met één bord (SBC)
- MCP3008 analoog-naar-digitaal converter
- Potentiometer met drie spelden
- Breadboard
- Jumper-draden
- Raspberry Pi GPIO breakout board (optioneel/aanbevolen)
- .NET SDK 7 of hoger
Notitie
Deze zelfstudie is geschreven, ervan uitgaande dat het doelapparaat Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke op Linux gebaseerde SBC die .NET ondersteunt, zoals Orange Pi, ODROID en meer.
De SBC voorbereiden
Zorg ervoor dat uw SBC is geconfigureerd om de volgende services te ondersteunen:
- SSH
- SPI
Voor veel apparaten is geen aanvullende configuratie vereist. Gebruik voor Raspberry Pi de raspi-config
opdracht . Raadpleeg de Raspberry Pi-documentatie voor meer informatie overraspi-config
.
De hardware voorbereiden
Gebruik de hardwareonderdelen om het circuit te bouwen, zoals wordt weergegeven in het volgende diagram:
De MCP3008 maakt gebruik van Serial Peripheral Interface (SPI) om te communiceren. Hier volgen de verbindingen van de MCP3008 met de Raspberry Pi en potentiometer:
- VDD tot 3,3V (rood weergegeven)
- VVERW naar 3,3V (rood)
- AGND op de grond (zwart)
- CLK naar SCLK (oranje)
- DOUT naar MISO (oranje)
- DIN naar MOSI (oranje)
- CS/SHDN naar CE0 (groen)
- DGND aan de grond (zwart)
- CH0 naar variabele (middelste) pin op potentiometer (geel)
Leveren 3.3V en aarden aan de buitenste pinnen op de potentiometer. Volgorde is niet belangrijk.
Raadpleeg indien nodig de volgende pin-outdiagrammen:
MCP3008 | Raspberry Pi GPIO |
---|---|
Afbeelding met dank aan Raspberry Pi Foundation. |
Tip
Een GPIO-breakoutboard 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. Geef het de naam AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorial
Voeg het pakket Iot.Device.Bindings toe aan het project. Gebruik .NET CLI vanuit de projectmap of Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Vervang 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:
-
hardwareSpiSettings
is ingesteld op een nieuw exemplaar vanSpiConnectionSettings
. De constructor stelt debusId
parameter in op 0 en dechipSelectLine
parameter op 0. - Een using-declaratie maakt een exemplaar van
SpiDevice
door aan te roepenSpiDevice.Create
en door te geven inhardwareSpiSettings
. DitSpiDevice
vertegenwoordigt de SPI-bus. Deusing
declaratie zorgt ervoor dat het object wordt verwijderd en hardwareresources correct worden vrijgegeven. - Een andere
using
declaratie maakt een exemplaar vanMcp3008
en geeft deSpiDevice
door aan de constructor. - Een
while
lus wordt voor onbepaalde tijd uitgevoerd. Elke iteratie:- Hiermee wordt de console gewist.
- Leest de waarde van CH0 op de ADC door aan te roepen
mcp.Read(0)
. - Hiermee schrijft u de onbewerkte waarde naar de console.
- Hiermee schrijft u de waarde naar de console die is opgemaakt 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 deze 1024 mogelijke waarden tussen 0 en 1023 retourneert. De waarde delen door 10,23 vertegenwoordigt de waarde als een percentage.
- Het percentage wordt afgerond op de dichtstbijzijnde 0,1.
- Slaapt 500 ms.
-
de app bouwen. Als u de .NET CLI gebruikt, voert u uit
dotnet build
. Druk op Ctrl+Shift+B om in Visual Studio te bouwen.Implementeer de app in de SBC als een zelfstandige app. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbare uitvoermachtiging 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.
./AdcTutorial
Bekijk de uitvoer terwijl u de potentiometerknop draait. Dit komt doordat de potentiometer de spanning varieert die aan CH0 op de ADC wordt geleverd. De ADC vergelijkt de ingangsspanning 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 uit een analoog-naar-digitaal conversieprogramma te lezen.
De broncode ophalen
De bron voor deze zelfstudie is beschikbaar op GitHub.