共用方式為


從類比到數位轉換器讀取值

類比對數位轉換器(ADC)是一種裝置,可以讀取模擬輸入電壓值,並將其轉換成數位值。 ADC 用於從rmistors、強量計和其他裝置讀取值,這些裝置會根據特定條件而改變阻力。

在這個主題中,你會使用 .NET 讀取 ADC 的數值,同時用電位器調變輸入電壓。

先決條件

  • ARM 型 (ARMv7 或更新版本) 單板電腦 (SBC)
  • MCP3008 類比轉數位轉換器
  • 三針有效計
  • 麵包板
  • 跳線
  • Raspberry Pi GPIO 擴展板(可選/建議)
  • .NET SDK 10 或更新版本

備註

本教學課程是以Raspberry Pi為目標裝置所撰寫。 不過,這個教學也可以用於任何支援 .NET 的 Linux 基礎 SBC,例如 Orange Pi、ODROID 等。

準備 SBC (單板電腦)

請確定您的 SBC 已設定為支援下列服務:

  • SSH
  • SPI

對於許多裝置,不需要額外的設定。 對於 Raspberry Pi,請使用指令 raspi-config 。 欲了解更多相關 raspi-config資訊,請參閱 Raspberry Pi 文件

準備硬體

使用硬體元件來建置線路,如下圖所示:

這是一個Fritzing原理圖,顯示一個由MCP3008 ADC和電位器組成的電路

MCP3008會使用序列周邊介面 (SPI) 進行通訊。 以下是從 MCP3008 到 Raspberry Pi 和強效計的連接:

  • VDD 到 3.3V(紅色顯示)
  • VREF 至 3.3V(紅色)
  • AGND 到地面 (黑色)
  • CLK 至 SCLK (橙色)
  • DOUT 至 MISO(橘色)
  • DIN 轉為 MOSI(橘色)
  • CS/SHDN 至 CE0 (綠色)
  • DGND 到地面 (黑色)
  • CH0 到可變 (中間) 針腳在強力計 (黃色)

將 3.3V 和地面提供給強力計上的外部針腳。 訂單不重要。

請參閱下列針腳圖(視需要)

MCP3008 Raspberry Pi GPIO
顯示 MCP3008 腳位的示意圖 一張顯示 Raspberry Pi GPIO 接頭腳位的示意圖。圖片由Raspberry Pi基金會提供。
圖片由Raspberry Pi基金會提供

小提示

建議使用 GPIO 分流板搭配麵包板,以簡化與 GPIO 標頭的連接。

建立應用程式

在慣用的開發環境中完成下列步驟:

  1. 請使用 .NET CLIVisual Studio 建立一個新的 .NET 控制台應用程式。 叫它 AdcTutorial

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Iot.Device.Bindings 套件加入專案。 請使用專案目錄中的 .NET CLIVisual Studio

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. 使用下列程式碼取代 Program.cs 的內容:

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

    在上述程式碼中:

    • hardwareSpiSettings 被設定為 SpiConnectionSettings 的一個新實例。 建構子將參數設 busId 為 0, chipSelectLine 參數設為 0。
    • 使用宣告來呼叫SpiDevice.Create,並傳遞hardwareSpiSettings,從而建立SpiDevice的實例。 這 SpiDevice 表示 SPI 匯流排。 宣 using 告確保物件被處置,硬體資源被正確釋放。
    • 另一個 using 宣告會建立 的 Mcp3008 實例,並將 傳 SpiDevice 入建構子。
    • 循環 while 是無限循環的。 每次迭代
      1. 清除控制台。
      2. 透過呼叫 mcp.Read(0)來讀取 ADC 上的 CH0 值。
      3. 將原始值寫入主控台。
      4. 將數值格式化為百分比後寫入控制台。
        • 若要計算百分比,此值除以 10.23。 MCP3008是 10 位 ADC,這表示它會傳回 1024 個可能的值,範圍介於 0-1023。 將值除以 10.23 以百分比表示值。
        • 百分比會四捨五入為最接近的 0.1。
      5. 休眠 500 毫秒。
  4. 建置應用程式。 如果使用 .NET CLI,請執行 dotnet build。 要在Visual Studio中建構,請按 Ctrl+Shift+B

  5. 將應用程式部署至 SBC 作為獨立應用程式。 相關說明請參考 Deploy .NET 應用程式到 Raspberry Pi。 務必使用chmod +x給可執行檔執行權限。

  6. 切換至部署目錄並執行可執行檔,在Raspberry Pi上執行應用程式。

    ./AdcTutorial
    

    當您旋轉強速計撥號時,觀察輸出。 這是因為強量計會改變在 ADC 上提供給 CH0 的電壓。 ADC將CH0的輸入電壓與提供給VREF 的參考電壓比較,以產生一個數值。

  7. Ctrl+C 終止程式。

祝賀! 您已使用 SPI 從類比至數位轉換器讀取數值。

取得原始程式碼

本教學的原始碼為 可於 GitHub 取得。

後續步驟