Sdílet prostřednictvím


Č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-confignajdete 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:

Fritzing diagram znázorňující obvod s ADC MCP3008 a potenciometrem

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
Diagram znázorňující pinout MCP3008 Diagram znázorňující pinout hlavičky Raspberry Pi GPIO Obrázek se svolením Raspberry Pi Foundation.
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:

  1. 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
    
  2. 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-*
    
  3. 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:

    • hardwareSpiSettingsje nastavená na novou instanci .SpiConnectionSettings Konstruktor nastaví busId parametr na hodnotu 0 a chipSelectLine parametr na hodnotu 0.
    • Deklarace using vytvoří instanci SpiDevice tak, že zavolá SpiDevice.Create a předá hardwareSpiSettings. To SpiDevice představuje sběrnici SPI. Deklarace using zajišťuje odstranění objektu a správné uvolnění hardwarových prostředků.
    • Jiná using deklarace vytvoří instanci Mcp3008 a předá do SpiDevice konstruktoru .
    • Smyčka while běží neomezeně dlouho. Každá iterace:
      1. Vymaže konzolu.
      2. Načte hodnotu CH0 v ADC voláním mcp.Read(0).
      3. Zapíše nezpracovanou hodnotu do konzoly.
      4. 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.
      5. Spí 500 ms.
  4. Sestavení aplikace Pokud používáte .NET CLI, spusťte dotnet buildpříkaz . K sestavení v sadě Visual Studio stiskněte klávesu Ctrl+Shift+B.

  5. 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.

  6. 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.

  7. 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.

Další kroky