Čtení hodnot z analogově-digitálního konvertoru
Převodník ADC (analog-to-digital) je zařízení, které dokáže číst hodnotu analogového vstupního napětí a převést ji na digitální hodnotu. Řadiče řízení přístupu se používají ke čtení hodnot z termistorů, potenciometrů a dalších zařízení, která mění odpor v závislosti na určitých podmínkách.
V tomto tématu použijete .NET ke čtení hodnot z ADC při modulaci vstupního napětí pomocí potenciometru.
Požadavky
- Počítač s jednou deskou (SBC) s procesorem ARM (ARMv7 nebo vyšším)
- Převodník analog-to-digital MCP3008
- Třípinový potenciometr
- Prkénko
- Dráty propojek
- Breakout board Raspberry Pi GPIO (volitelné/doporučené)
- .NET SDK 7 nebo novější
Poznámka
Tento kurz je napsán za předpokladu, že cílové zařízení je Raspberry Pi. Tento kurz se ale dá použít pro jakýkoli linuxový SBC, který podporuje .NET, například Orange Pi, ODROID a další.
Příprava SBC
Ujistěte se, že je váš SBC nakonfigurovaný tak, aby podporoval následující služby:
- SSH
- SPI
U mnoha zařízení se nevyžaduje žádná další konfigurace. V případě Raspberry Pi použijte raspi-config
příkaz . Další informace o raspi-config
najdete v dokumentaci k Raspberry Pi.
Příprava hardwaru
Pomocí hardwarových komponent sestavte okruh, jak je znázorněno v následujícím diagramu:
MCP3008 používá ke komunikaci rozhraní SPI (Serial Peripheral Interface). Následují připojení z MCP3008 k Raspberry Pi a potenciometru:
- VDD až 3,3V (zobrazeno červeně)
- VREF na 3,3V (červená)
- AGND k zemi (černá)
- CLK na SCLK (oranžová)
- DOUT to MISO (oranžová)
- DIN do MOSI (oranžová)
- CS/SHDN na CE0 (zelená)
- DGND do země (černá)
- CH0 na proměnný (střední) kolík na potenciometru (žlutý)
Podá 3.3V a uzemněný na vnější kolíky na potenciometru. Pořadí není důležité.
Podle potřeby si projděte následující diagramy pinoutů:
MCP3008 | Raspberry Pi GPIO |
---|---|
Obrázek se svolením Raspberry Pi Foundation. |
Tip
Pro zjednodušení připojení k hlavičce GPIO se doporučuje breakout board GPIO ve spojení s breadboardem.
Vytvoření aplikace
V upřednostňovaném vývojovém prostředí proveďte následující kroky:
Vytvořte novou konzolovou aplikaci .NET pomocí rozhraní příkazového řádku .NET nebo sady Visual Studio. Pojmenujte ho AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorial
Přidejte do projektu balíček Iot.Device.Bindings . Použijte rozhraní příkazového řádku .NET z adresáře projektu nebo sadu Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Obsah souboru Program.cs nahraďte tímto kódem:
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); }
V předchozím kódu:
-
hardwareSpiSettings
je nastavená na novou instanci .SpiConnectionSettings
Konstruktor nastavíbusId
parametr na hodnotu 0 achipSelectLine
parametr na hodnotu 0. -
Deklarace using vytvoří instanci
SpiDevice
tak, že zavoláSpiDevice.Create
a předáhardwareSpiSettings
. ToSpiDevice
představuje sběrnici SPI. Deklaraceusing
zajišťuje odstranění objektu a správné uvolnění hardwarových prostředků. - Jiná
using
deklarace vytvoří instanciMcp3008
a předá doSpiDevice
konstruktoru . - Smyčka
while
běží neomezeně dlouho. Každá iterace:- Vymaže konzolu.
- Načte hodnotu CH0 v ADC voláním
mcp.Read(0)
. - Zapíše nezpracovanou hodnotu do konzoly.
- Zapíše hodnotu do konzoly naformátovanou jako procento.
- Při výpočtu procenta se hodnota vydělí hodnotou 10,23. MCP3008 je 10bitový ADC, což znamená, že vrací 1024 možných hodnot v rozsahu 0–1023. Vydělení hodnoty číslem 10,23 představuje hodnotu jako procento.
- Procento se zaokrouhlí na nejbližší hodnotu 0,1.
- Spí 500 ms.
-
Sestavení aplikace Pokud používáte .NET CLI, spusťte
dotnet build
příkaz . K sestavení v sadě Visual Studio stiskněte klávesu Ctrl+Shift+B.Nasaďte aplikaci do SBC jako samostatnou aplikaci. Pokyny najdete v tématu Nasazení aplikací .NET do Raspberry Pi. Ujistěte se, že jste spustitelnému souboru dali oprávnění ke spuštění pomocí příkazu
chmod +x
.Spusťte aplikaci na Raspberry Pi přepnutím do adresáře nasazení a spuštěním spustitelného souboru.
./AdcTutorial
Při otáčení potenciometru sledujte výstup. To je způsobeno tím, že potenciometr mění napětí dodané na CH0 na ADC. ADC porovnává vstupní napětí na CH0 s referenčním napětím přidaných do VREF za účelem vygenerování hodnoty.
Ukončete program stisknutím klávesy Ctrl+C.
Gratulujeme! Použili jste SPI ke čtení hodnot z analogově-digitálního převaděče.
Získání zdrojového kódu
Zdroj pro tento kurz je k dispozici na GitHubu.