Sdílet prostřednictvím


Čtení hodnot z analogového a digitálního převaděče

Analog-to-digital converter (ADC) je zařízení, které může číst hodnotu analogového vstupního napětí a převést ho na digitální hodnotu. AdCs se používají ke čtení hodnot z termistorů, potenciometrů a dalších zařízení, která mění odolnost na základě určitých podmínek.

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) založený na ARM (ARMv7 nebo novější)
  • MCP3008 analogově-digitální převodník
  • Třípólový potenciometr
  • Prkénko na krájení
  • Propojovací vodiče
  • Raspberry Pi GPIO rozšiřující deska (volitelné/doporučené)
  • .NET SDK 10 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, jako je Orange Pi, ODROID a další.

Příprava SBC

Ujistěte se, že je vaše SBC nakonfigurovaná tak, aby podporovala následující služby:

  • SSH
  • SPI

U mnoha zařízení není nutná žádná další konfigurace. V případě Raspberry Pi použijte raspi-config příkaz. Další informace najdete raspi-configv dokumentaci k Raspberry Pi.

Příprava hardwaru

Pomocí hardwarových komponent sestavte okruh, jak je znázorněno v následujícím diagramu:

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

MCP3008 ke komunikaci používá rozhraní SPI (Serial Peripheral Interface). Následují připojení z MCP3008 k Raspberry Pi a potenciometru:

  • VDD až 3.3V (zobrazený červeně)
  • VREF na 3.3V (červené)
  • AGND k zemi (černá)
  • CLK až SCLK (oranžová)
  • DOUT do MISO (oranžová)
  • DIN do MOSI (oranžová)
  • CS/SHDN až CE0 (zelená)
  • DGND k zemi (černá)
  • CH0 na proměnný (prostřední) vývod na potenciometru (žlutý)

Přívodní 3,3V a uzemnění vnějších kolíků na potenciometru. Pořadí není důležité.

Podle potřeby nahlédněte do následujících schémat zapojení:

MCP3008 Raspberry Pi GPIO
Diagram znázorňující pinout MCP3008 Diagram znázorňující rozložení pinů hlavičky Raspberry Pi - GPIO. Obrázek s laskavým svolením Raspberry Pi Foundation.
Obrázek se svolením Raspberry Pi Foundation.

Návod

Pro zjednodušení připojení k hlavičce GPIO se doporučuje použít rozšiřovací desku GPIO ve spojení s kontaktním polem.

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í .NET CLI nebo Visual Studio. Pojmenujte ji 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 Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.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:

    • hardwareSpiSettings je nastaven na novou instanci SpiConnectionSettings. Konstruktor nastaví busId parametr na 0 a chipSelectLine parametr na 0.
    • Deklarace using vytvoří instanci SpiDevice voláním SpiDevice.Create a předáním hardwareSpiSettings. Tato SpiDevice představuje sběrnici SPI. Deklarace using zajišťuje, že objekt je správně zlikvidován a hardwarové prostředky jsou uvolněny.
    • Další using deklarace vytvoří instanci Mcp3008 a předá SpiDevice do konstruktoru.
    • Smyčka while běží neomezeně dlouho. Každá iterace:
      1. Vymaže konzolu.
      2. Přečte hodnotu CH0 v ADC voláním mcp.Read(0).
      3. Zapíše nezpracovanou hodnotu do konzoly.
      4. Zapíše hodnotu do konzoly formátované jako procento.
        • Pokud chcete vypočítat procento, hodnota se vydělí hodnotou 10,23. MCP3008 je 10bitový ADC, což znamená, že vrací 1024 možných hodnot v rozsahu 0–1023. Rozdělení hodnoty hodnotou 10,23 představuje hodnotu v procentech.
        • Procento se zaokrouhlí na nejbližší hodnotu 0,1.
      5. Spí 500 ms.
  4. Sestavení aplikace Pokud používáte rozhraní příkazového řádku .NET, spusťte dotnet build. Pokud chcete sestavit projekt ve Visual Studiu, stiskněte Ctrl+Shift+B.

  5. Nasaďte aplikaci do SBC jako samostatnou aplikaci. Pokyny najdete v tématu Deploy .NET aplikací na Raspberry Pi. Ujistěte se, že dáte spustitelnému souboru oprávnění k provádění pomocí 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í číselníku potenciometru sledujte výstup. Příčinou je to, že potenciometr mění napětí dodávané na CH0 u ADC. ADC porovnává vstupní napětí na CH0 s referenčním napětím dodaném do VREF za účelem vygenerování hodnoty.

  7. Ukončete program stisknutím kláves Ctrl+C.

Gratulujeme! Ke čtení hodnot z analogového a digitálního převaděče jste použili rozhraní SPI.

Získání zdrojového kódu

Zdroj tohoto kurzu je k dispozici na GitHub.

Další kroky