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 8 nebo novější

Poznámka:

Tento kurz je napsán za předpokladu, že cílové zařízení je Raspberry Pi. Tento kurz však lze 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.3 V (č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í uspořádání pinů MCP3008 Diagram znázorňující zapojení hlavičky Raspberry Pi GPIO. Obrázek se 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 .NET CLI z adresáře projektu nebo sady Visual Studio.

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

    • hardwareSpiSettings je nastaveno 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. Toto SpiDevice představuje sběrnici SPI. Deklarace using zajišťuje, že objekt je ukončen a hardwarové prostředky jsou uvolněny správně.
    • 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 .NET CLI, spusťte dotnet build. Pokud chcete sestavovat v sadě Visual Studio, stiskněte kombinaci kláves 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 spustitelnému souboru udělíte oprávnění execute 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 pro tento kurz je k dispozici na GitHubu.

Další kroky