É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-ket a termisztorok, a potenciométerek és más olyan eszközök értékeinek olvasására használják, amelyek bizonyos feltételek alapján módosítják az ellenállást.

Ebben a témakörben a .NET használatával fog értékeket olvasni egy ADC-ből, 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 átalakító
  • Három tűs potenciométer
  • Kenyérvágódeszka
  • Jumper drótok
  • Raspberry Pi GPIO-melléklap (nem kötelező/ajánlott)
  • .NET SDK 7 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 minden olyan Linux-alapú SBC-hez használható, amely támogatja a .NET-et, például az Orange Pi-t, az ODROID-ot és egyebeket.

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ében nincs szükség további konfigurációra. Raspberry Pi esetén használja a raspi-config parancsot. További információt a raspi-configRaspberry Pi dokumentációjában talál.

A hardver előkészítése

A hardverösszetevők használatával hozza létre a kapcsolatcsoportot az alábbi ábrán látható módon:

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

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

  • VDD –3,3V (pirossal)
  • VREF –3,3V (piros)
  • AGND földig (fekete)
  • CLK-ról SCLK-ra (narancssárga)
  • DOUT to MISO (narancssárga)
  • DIN-ből MOSI-ba (narancssárga)
  • CS/SHDN–CE0 (zöld)
  • DGND földig (fekete)
  • CH0–változó (középső) tű a potentiométeren (sárga)

3,3V-os tápellátás és földelés a potenciométer külső csapjaihoz. A sorrend nem lényeges.

Szükség szerint tekintse meg a következő kitűződiagramokat:

MCP3008 Raspberry Pi GPIO
Az MCP3008 pinoutját ábrázoló diagram A Raspberry Pi GPIO fejlécének pinoutját ábrázoló diagram. Kép jóvoltból Raspberry Pi Foundation.
Kép jóvoltból Raspberry Pi Foundation.

Tipp

A GPIO-mellékfal és a rajztábla együttes használata ajánlott a GPIO fejléchez való csatlakozás egyszerűsítéséhez.

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

    A fenti kód a következőket végzi el:

    • hardwareSpiSettings a értéke a következő új példánya SpiConnectionSettings: . A konstruktor a paramétert busId 0-ra, a paramétert chipSelectLine pedig 0-ra állítja.
    • A használó deklaráció egy példányt SpiDevice hoz létre a hívással SpiDevice.Create és a beadással hardwareSpiSettings. Ez SpiDevice a SPI-buszt jelöli. A using deklaráció biztosítja, hogy az objektum el legyen távolítva, és a hardvererőforrások megfelelően legyenek felszabadítva.
    • 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 a hívásával mcp.Read(0).
      3. A nyers értéket a konzolra írja.
      4. Az értéket százalékként formázva írja a konzolra.
        • A százalék kiszámításához az érték 10,23-ra van osztva. Az MCP3008 egy 10 bites ADC, ami azt jelenti, hogy 1024 lehetséges értéket ad vissza 0 és 1023 között. Az érték 10,23-tal való felosztása százalékként jelöli az értéket.
        • A százalékos érték kerekítése a legközelebbi 0,1 értékre történik.
      5. 500 ms alvó állapotban van.
  4. Az alkalmazás létrehozása. Ha a .NET CLI-t használja, futtassa a parancsot dotnet build. A Visual Studióban való buildeléshez nyomja le a CtrlShift+Bbillentyűkombinációt+.

  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ó végrehajtási engedélyt a használatával chmod +xadja meg.

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

    ./AdcTutorial
    

    Figyelje meg a kimenetet, miközben elforgatja a potenciométer-tárcsázást. 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 biztosított referenciafeszültséggel egy érték létrehozásához.

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

Gratulálunk! A SPI-t használta az értékek analóg-digitális konverterből való olvasására.

A forráskód lekérése

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

Következő lépések