Compartir a través de


Leer valores de un convertidor analógico a digital

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:

Diagrama de Fritzing que muestra un circuito con un MCP3008 ADC y un potenciómetro

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
Diagrama en el que se muestran los pines de MCP3008 Diagrama que muestra la disposición de pines del encabezado GPIO de Raspberry Pi. Imagen proporcionada por Raspberry Pi Foundation.
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:

  1. 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
    
  2. 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-*
    
  3. 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 de SpiConnectionSettings. El constructor establece el busId parámetro en 0 y el chipSelectLine parámetro en 0.
    • Una declaración using crea una instancia de SpiDevice mediante una llamada a SpiDevice.Create y pasando hardwareSpiSettings. Esto SpiDevice representa el bus SPI. La using declaración garantiza que el objeto se elimina y los recursos de hardware se liberan correctamente.
    • Otra declaración using crea una instancia de Mcp3008 y pasa SpiDevice en el constructor.
    • Un while bucle se ejecuta indefinidamente. Cada iteración:
      1. Se borra la consola.
      2. Lee el valor de CH0 en el ADC llamando a mcp.Read(0).
      3. Escribe el valor sin procesar en la consola.
      4. 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.
      5. Se suspende durante 500 ms.
  4. 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.

  5. 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.

  6. 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.

  7. 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.

Pasos siguientes