模拟到数字转换器(ADC)是一种设备,可以读取模拟输入电压值并将其转换为数字值。 ADC 用于从热敏器、强量计和其他设备读取值,这些设备会根据某些条件更改阻力。
在本文中,您将使用 .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,请使用该命令。 有关详细信息 ,请参阅 Raspberry Pi 文档。
准备硬件
使用硬件组件生成线路,如下图所示:
显示具有MCP3008 ADC 和强量计的线路的 Fritzing 示意图
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 Foundation 提供。 |
小提示
建议将 GPIO 扩展板与面包板结合使用,以简化与 GPIO 接头的连接。
创建应用
在首选开发环境中完成以下步骤:
使用 .NET CLI 或 Visual Studio 创建新的.NET控制台应用。 将其命名为 AdcTutorial。
dotnet new console -o AdcTutorial cd AdcTutorial将 Iot.Device.Bindings 包添加到项目。 使用项目目录中的 .NET CLI 或 Visual Studio。
dotnet package add Iot.Device.Bindings --version 4.1.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); }在前面的代码中:
- 设置为新实例 。 构造函数将 参数设置为 0,并将 参数设置为 0。
- using 声明通过调用和传入创建实例。 这 表示 SPI 总线。 该声明确保对象被释放,并且硬件资源得到正确释放。
- 另一 个声明创建一个实例 并将其传递到 构造函数中。
- 循环无限期运行。 每次迭代:
- 清除控制台。
- 通过调用 读取 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。 请确保使用 .. 授予可执行文件执行权限。
切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行应用。
./AdcTutorial旋转电位差计刻度时观察输出。 这是因为强量计会改变在 ADC 上提供给 CH0 的电压。 ADC 将 CH0 上的输入电压与提供给 VREF 的参考电压进行比较,以生成值。
按 CtrlC 终止程序。
祝贺! 你已使用 SPI 从模拟到数字转换器读取值。
获取源代码
本教程的源代码在 GitHub 上可用。
后续步骤
了解如何使用通用输入/输出让 LED 闪烁