Megosztás:


Értékek olvasása analóg-digitális konverterből

Az analóg-digitális átalakító (ADC) egy olyan eszköz, amely képes beolvasni egy analóg bemeneti feszültségértéket, és digitális értékké alakítani. Az ADC-k a termisztorok, a potenciométerek és más olyan eszközök értékeinek olvasására szolgálnak, amelyek bizonyos feltételek alapján módosítják az ellenállást.

Ebben a témakörben a .NET használatával fogja beolvasni az ADC értékeit, miközben a bemeneti feszültséget egy potenciométerrel modulálja.

Előfeltételek

  • ARM-alapú (ARMv7 vagy újabb) egylapos számítógép (SBC)
  • MCP3008 analóg-digitális konverter
  • Három tűs potenciométer
  • Kenyérvágódeszka
  • Átvezető vezetékek
  • Raspberry Pi GPIO-melléklap (opcionális/ajánlott)
  • .NET SDK 8 vagy újabb

Megjegyzés

Ez az oktatóanyag meg van írva, feltéve, hogy a céleszköz Raspberry Pi. Ez az oktatóanyag azonban bármilyen Linux-alapú SBC-hez használható, amely támogatja a .NET-et, például az Orange Pi-t, az ODROID-ot és sok mást.

Az SBC előkészítése

Győződjön meg arról, hogy az SBC a következő szolgáltatások támogatására van konfigurálva:

  • SSH
  • SPI

Sok eszköz esetén nincs szükség további konfigurációra. Raspberry Pi esetén használja a raspi-config parancsot. További információkért raspi-configtekintse meg a Raspberry Pi dokumentációját.

A hardver előkészítése

A következő ábrán látható módon használja a hardver összetevőket az áramkör megépítéséhez.

Fritzing diagram egy MCP3008 ADC-vel és egy potenciométerrel rendelkező kapcsolatcsoportról

A MCP3008 soros periféria interfészt (SPI) használ a kommunikációhoz. A következő kapcsolatok a MCP3008 és a Raspberry Pi és a potenciométer között:

  • VDD 3,3V-ra (pirossal jelölve)
  • VREF-ről 3,3V-ra (piros)
  • AGND földhöz (fekete)
  • CLK–SCLK (narancssárga)
  • DOUT a MISO (narancssárga)
  • DIN-ből MOSI-ba (narancssárga)
  • CS/SHDN–CE0 (zöld)
  • DGND földeléshez (fekete)
  • CH0 csatlakoztatása a potenciométer változó (középső) tűjéhez (sárga)

A potenciométer külső csapjaihoz 3,3V-os tápellátást kell biztosítani. A sorrend nem lényeges.

Szükség szerint tekintse meg a következő kivezetési rajzokat:

MCP3008 Raspberry Pi GPIO
A MCP3008 pinoutját ábrázoló diagram Ábra a Raspberry Pi GPIO fejlécének kiosztásáról. A kép a Raspberry Pi Foundation jóvoltából.
Kép jóvoltból Raspberry Pi Foundation.

Jótanács

A GPIO csatlakozólap és a próbaáramköri lap együttes használata javasolt a GPIO-fejléchez való kapcsolódások egyszerűsítése érdekében.

Az alkalmazás létrehozása

Hajtsa végre a következő lépéseket az előnyben részesített fejlesztési környezetben:

  1. Hozzon létre egy új .NET-konzolalkalmazást a .NET CLI vagy a Visual Studio használatával. Nevezze el AdcTutorial néven.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Adja hozzá az Iot.Device.Bindings csomagot a projekthez. Használja a .NET CLI-t a projektkönyvtárból vagy a Visual Studióból.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Cserélje le a Program.cs fájl tartalmát a következő kódra:

    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);
    }
    

    Az előző kódban:

    • hardwareSpiSettings új példányát a SpiConnectionSettings-ra/-re állítják. A konstruktor a paramétert busId 0-ra, a paramétert chipSelectLine pedig 0-ra állítja.
    • A using nyilatkozat létrehoz egy SpiDevice példányt azáltal, hogy meghívja a SpiDevice.Create-t, és átadja a hardwareSpiSettings-t. Ez SpiDevice a SPI buszt jelöli. A using deklaráció biztosítja az objektum ártalmatlanítását és a hardvererőforrások megfelelő kiadását.
    • Egy másik using deklaráció létrehoz egy példányt Mcp3008 , és átadja a SpiDevice konstruktornak.
    • A while hurok határozatlan ideig fut. Minden iteráció:
      1. Törli a konzolt.
      2. Beolvassa a CH0 értékét az ADC-n egy függvény meghívásával mcp.Read(0).
      3. A nyers értéket a konzolra írja.
      4. Százalékként formázott értéket ír a konzolra.
        • A százalék kiszámításához az érték 10,23-ra van osztva. A MCP3008 egy 10 bites ADC, ami azt jelenti, hogy 1024 lehetséges értéket ad vissza 0 és 1023 között. Ha az értéket 10,23-tal osztja el, az értéket százalékként jelöli.
        • A százalékos érték a legközelebbi 0,1 értékre van kerekítve.
      5. 500 ms-ig alszik.
  4. Hozza létre az alkalmazást. Ha a .NET parancssori felületet használja, futtassa a parancsot dotnet build. A Visual Studióban való buildeléshez nyomja le a CtrlShift+B+.

  5. Helyezze üzembe az alkalmazást az SBC-ben önálló alkalmazásként. Útmutatásért lásd: .NET-alkalmazások üzembe helyezése a Raspberry Pi-ben. Győződjön meg arról, hogy a végrehajtható fájlnak végrehajtás engedélyt ad, a chmod +x használatával.

  6. Futtassa az alkalmazást a Raspberry Pi-en az üzembehelyezési könyvtárra való váltással és a végrehajtható fájl futtatásával.

    ./AdcTutorial
    

    Figyelje meg a kimenetet a potenciométer gomb forgatása közben. Ennek az az oka, hogy a potenciométer az ADC-n ch0-nek adott feszültséget változtatja. Az ADC összehasonlítja a CH0 bemeneti feszültségét a VREF-nek adott referenciafeszültséggel, hogy értéket hozzon létre.

  7. Állítsa le a programot a CtrlC+ lenyomásával.

Gratulálok! Az SPI segítségével olvasta be az értékeket egy analóg-digitális konverterből.

A forráskód lekérése

Az oktatóanyag forrása a GitHubon érhető el.

Következő lépések