Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un convertidor analógico a digital (ADC) es un dispositivo que puede leer un valor de voltaje de entrada analógico y convertirlo en un valor digital. Los ADC se usan para leer valores de los termistors, los potenciómetros y otros dispositivos que cambian la resistencia en función de ciertas condiciones.
En este tema, usará .NET para leer valores de un ADC a medida que modula el voltaje de entrada con un potenciómetro.
Prerrequisitos
- Equipo con placa única (ARMv7 o superior) basado en ARM (SBC)
- MCP3008 convertidor analógico a digital
- Potenciómetro de tres pins
- Placa de pruebas
- Cables de puente
- Tarjeta de expansión GPIO para Raspberry Pi (opcional/recomendada)
- SDK de .NET 8 o posterior
Nota:
Este tutorial se escribe suponiendo que el dispositivo de destino sea Raspberry Pi. Sin embargo, este tutorial se puede usar para cualquier SBC basado en Linux que admita .NET, como Orange Pi, ODROID, etc.
Preparación del equipo SBC
Asegúrese de que el CLS está configurado para admitir los siguientes servicios:
- SSH
- SPI
Para muchos dispositivos, no se requiere ninguna configuración adicional. Para Raspberry Pi, use el raspi-config
comando . Para obtener más información sobre raspi-config
, consulte la documentación de Raspberry Pi.
Preparación del hardware
Use los componentes de hardware para compilar el circuito como se muestra en el diagrama siguiente:
El MCP3008 usa la interfaz periférico serie (SPI) para comunicarse. A continuación se muestran las conexiones de la MCP3008 a Raspberry Pi y potenciómetro:
- VDD a 3.3V (se muestra en rojo)
- VREF a 3.3V (rojo)
- De AGND a la toma de tierra (negro)
- De CLK a SCLK (naranja)
- De DOUT a MISO (naranja)
- DIN a MOSI (naranja)
- De CS/SHDN a CE0 (verde)
- De DGND a la toma de tierra (negro)
- De CH0 a un pin variable (central) en el potenciómetro (amarillo)
Proporcione 3,3V y una toma de tierra a los pines externos del potenciómetro. El orden no es importante.
Consulte los siguientes diagramas de anclaje según sea necesario:
MCP3008 | Raspberry Pi GPIO |
---|---|
![]() |
![]() Imagen cortesía de Raspberry Pi Foundation. |
Sugerencia
Se recomienda una placa de pruebas de GPIO junto con una placa para optimizar las conexiones con el encabezado de GPIO.
Creación de la aplicación
Complete los pasos siguientes en el entorno de desarrollo preferido:
Cree una aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígneles el nombre AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorial
Agregue el paquete Iot.Device.Bindings al proyecto. Utilice la CLI de .NET desde el directorio del proyecto o Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.2.0-*
Reemplace el contenido de Program.cs por el código siguiente:
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); }
En el código anterior:
hardwareSpiSettings
se asigna a una nueva instancia deSpiConnectionSettings
. El constructor establece elbusId
parámetro en 0 y elchipSelectLine
parámetro en 0.- Una declaración using crea una instancia de
SpiDevice
mediante una llamada aSpiDevice.Create
y pasandohardwareSpiSettings
. EstoSpiDevice
representa el bus SPI. Lausing
declaración garantiza que el objeto se elimina y los recursos de hardware se liberan correctamente. - Otra declaración
using
crea una instancia deMcp3008
y pasaSpiDevice
en el constructor. - Un
while
bucle se ejecuta indefinidamente. Cada iteración:- Se borra la consola.
- Lee el valor de CH0 en el ADC llamando a
mcp.Read(0)
. - Escribe el valor sin procesar en la consola.
- Escribe el valor en la consola con formato de porcentaje.
- Para calcular el porcentaje, el valor se divide en 10,23. El MCP3008 es un ADC de 10 bits, lo que significa que devuelve 1024 valores posibles que van de 0 a 1023. Dividir el valor en 10,23 representa el valor como un porcentaje.
- El porcentaje se redondea al 0,1 más cercano.
- Se suspende durante 500 ms.
Compile la aplicación. Si usa la CLI de .NET, ejecute
dotnet build
. Para realizar la compilación en Visual Studio, presione Ctrl+Mayús+B.Despliegue la aplicación en el SBC como una aplicación autónoma. Para obtener instrucciones, consulte Implementación de aplicaciones .NET en Raspberry Pi. Asegúrese de conceder al ejecutable permiso de ejecución mediante
chmod +x
.Ejecute la aplicación en Raspberry Pi cambiando al directorio de implementación y ejecutando el ejecutable.
./AdcTutorial
Observe la salida a medida que gira la esfera del potenciómetro. Esto se debe al potenciómetro variando el voltaje suministrado a CH0 en el ADC. El ADC compara el voltaje de entrada en CH0 con el voltaje de referencia suministrado a VREF para generar un valor.
Para finalizar el programa, presione Ctrl+C.
¡Felicidades! Ha usado SPI para leer valores de un convertidor analógico a digital.
Obtención del código fuente
El origen de este tutorial está disponible en GitHub.