類比對數位轉換器(ADC)是一種裝置,可以讀取模擬輸入電壓值,並將其轉換成數位值。 ADC 用於從rmistors、強量計和其他裝置讀取值,這些裝置會根據特定條件而改變阻力。
在本主題中,您會使用 .NET 來讀取 ADC 的值,因為您會使用強量計調整輸入電壓。
先決條件
- ARM 型 (ARMv7 或更新版本) 單板電腦 (SBC)
- MCP3008 類比數位轉換器
- 三針有效計
- 麵包板
- 跳線
- Raspberry Pi GPIO 擴展板(可選/建議)
- .NET SDK 8 或更新版本
備註
本教學課程是以Raspberry Pi為目標裝置所撰寫。 不過,本教學課程可用於支援 .NET 的任何 Linux 型 SBC,例如 Orange Pi、ODROID 等等。
準備 SBC (單板電腦)
請確定您的 SBC 已設定為支援下列服務:
- SSH
- SPI
對於許多裝置,不需要額外的設定。 針對 Raspberry Pi,請使用 raspi-config
命令。 如需 raspi-config
的詳細資訊,請參閱 Raspberry Pi 文件。
準備硬體
使用硬體元件來建置線路,如下圖所示:
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 |
---|---|
![]() |
![]() 圖片由Raspberry Pi Foundation 提供。 |
小提示
建議使用 GPIO 分流板搭配麵包板,以簡化與 GPIO 標頭的連接。
建立應用程式
在慣用的開發環境中完成下列步驟:
使用 .NET CLI 或 Visual Studio 建立新的 .NET 控制台應用程式。 將它命名為 AdcTutorial。
dotnet new console -o AdcTutorial cd AdcTutorial
將 Iot.Device.Bindings 套件新增至專案。 從項目目錄或Visual Studio使用 .NET CLI。
dotnet add package Iot.Device.Bindings --version 3.2.0-*
使用下列程式碼取代 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。 -
using 宣告會透過呼叫
SpiDevice
並傳入SpiDevice.Create
來建立hardwareSpiSettings
的實例。 這SpiDevice
表示 SPI 總線。 宣告using
確保物件被處置且硬體資源被正確釋放。 - 另一
using
宣告會建立Mcp3008
的實例,並將SpiDevice
傳遞至建構函式。 -
while
迴圈會無限期執行。 每次迭代- 清除控制台。
- 呼叫
mcp.Read(0)
來讀取 ADC 上的 CH0 值。 - 將原始值寫入主控台。
- 將數值格式化為百分比後寫入控制台。
- 若要計算百分比,此值除以 10.23。 MCP3008是 10 位 ADC,這表示它會傳回 1024 個可能的值,範圍介於 0-1023。 將值除以 10.23 以百分比表示值。
- 百分比會四捨五入為最接近的 0.1。
- 休眠 500 毫秒。
-
建置應用程式。 如果使用 .NET CLI,請執行
dotnet build
。 若要在 Visual Studio 中建置,請按 Ctrl+Shift+B。將應用程式部署至 SBC 作為獨立應用程式。 如需指示,請參閱 將 .NET 應用程式部署至Raspberry Pi。 請務必使用 提供可執行檔
chmod +x
許可權。切換至部署目錄並執行可執行檔,在Raspberry Pi上執行應用程式。
./AdcTutorial
當您旋轉強速計撥號時,觀察輸出。 這是因為強量計會改變在 ADC 上提供給 CH0 的電壓。 ADC 會將 CH0 上的輸入電壓與提供給 VREF 的參考電壓進行比較,以產生值。
按 Ctrl+C 終止程式。
祝賀! 您已使用 SPI 從類比至數位轉換器讀取數值。
取得原始程式碼
本教學課程的來源 可在 GitHub 上取得。