Uso de ADC en aplicaciones de alto nivel
Importante
Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).
Este tema describe cómo usar convertidores de señales analógicas a digitales (ADC) en una aplicación de alto nivel. Consulte Uso de periféricos en una aplicación con respuesta en tiempo real para obtener información sobre el uso de ADC en RTApps.
Azure Sphere admite la conversión de señales analógicas a digitales. Un ADC convierte una entrada analógica en su valor digital correspondiente. El número de canales de entrada y la resolución (como el número de bits de salida de ADC) dependen del dispositivo.
El ejemplo ADC_HighLevelApp muestra cómo comunicarse con los ADC en un dispositivo MT3620.
Los fragmentos de código periféricos de ADC muestran dos maneras de interactuar con los ADC mediante funciones simplificadas o avanzadas .
El dispositivo MT3620 contiene un ADC de 12 bits con 8 canales de entrada. El ADC compara el voltaje de entrada con el voltaje de referencia y genera un valor de salida de entre 0 y 4095. Los canales de entrada del ADC y los pines del GPIO GPIO41 a GPIO48 se asignan a los mismos pines del dispositivo MT3260. Sin embargo, si la aplicación usa el ADC, los 8 pines se asignan como entradas del ADC. Ninguno de ellos se puede usar para GPIO.
Requisitos del ADC
Las aplicaciones que se comunican con los ADC deben incluir el archivo de encabezado adc.h y agregar la configuración de los ADC al manifiesto de aplicación.
Todas las aplicaciones deben establecer su hardware de destino e incluir el archivo de encabezado de definición de hardware correspondiente.
Archivos de encabezado
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
Reemplace "rutaDeAccesoAlHardwareDeDestino.h" por la ruta de acceso al archivo de encabezado de su hardware.
Configuración del manifiesto de aplicación
La configuración del ADC en el manifiesto de aplicación enumera los controladores de ADC a los que la aplicación tiene acceso. Para configurar estas opciones, agregue la funcionalidad Adc
al manifiesto de aplicación y, a continuación, agregue cada controlador de ADC a la funcionalidad. El tema Manifiesto de aplicación de Azure Sphere contiene más detalles.
En el código, use las constantes que se definen para el hardware con el fin de identificar los controladores de ADC. El compilador traducirá estos valores a valores sin formato al compilar la aplicación.
Por ejemplo, el siguiente es un extracto de un manifiesto de aplicación de una aplicación que tiene como destino una placa de desarrollo de referencia (RDB) MT3620.
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
En el siguiente extracto se muestra cómo especificar los mismos controladores de ADC en una aplicación dirigida a Avnet MT3620 Starter Kit:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
Información general sobre la implementación
Para implementar la aplicación para acceder a ADC, use uno de estos dos enfoques:
En este tema se describen ambos métodos. Puede encontrar el código de ejemplo completo para cada método aquí:
- Fragmento de código de funciones simplificadas de ADC
- Fragmento de código de funciones avanzadas de ADC
Acceso a ADC con funciones simplificadas
Las aplicaciones de alto nivel de Azure Sphere pueden acceder a los ADC mediante llamadas a las API de ADC de las bibliotecas de aplicaciones.
Apertura de un controlador de ADC
Para abrir un controlador de ADC para poder acceder a él, llame a ADC_Open y pase el identificador del controlador como parámetro. Se devolverá un descriptor de archivo si la llamada se realiza correctamente. De lo contrario, se devolverá un valor de error.
int ADC_Open(ADC_ControllerId id);
Lectura de un controlador de ADC
Para leer un ADC, llame a ADC_Poll. Se pasan los parámetros siguientes a ADC_Poll: el descriptor de archivo devuelto por ADC_Open, el canal ADC y un puntero donde se almacenará el valor de ADC.
Para obtener el número de bits válidos (resolución) devueltos por la función ADC_Poll, llame a ADC_GetSampleBitCount.
Establecimiento del voltaje de referencia de un controlador de ADC
Llame a ADC_SetReferenceVoltage para establecer el voltaje de referencia del controlador de ADC.
MT3620 tiene un voltaje de referencia de 2,5 voltios en el chip. También se puede conectar a un voltaje de referencia externo que sea menor o igual que 2,5 voltios.
Acceso a ADC con funciones avanzadas
Como alternativa a las funciones simplificadas de alto nivel para interactuar con el periférico, puede aprovechar la biblioteca ioctl para abrir la funcionalidad. En esta sección se explica cómo hacerlo y cómo usar ioctls difiere del uso de las funciones genéricas de Linux.
El fragmento de código de funciones avanzadas de ADC muestra cómo leer ADC mediante las funciones avanzadas de Azure Sphere.
Por ejemplo, puede ver una comparación en paralelo de la lectura de ADC con las implementaciones simplificadas, avanzadas y linux sysfs:
- Fragmento de código de funciones simplificadas de ADC
- Fragmento de código de nodos sysfs de ADC Linux
- Fragmento de código de funciones avanzadas de ADC
Abrir el canal de ADC
Para abrir un controlador de ADC para el acceso, use la llamada de Linux open
que pasa la ruta de acceso al directorio que comenzará por /dev/adc<number>
donde "number" es el identificador del controlador. Se devuelve un descriptor de archivo si la llamada se realizó correctamente. De lo contrario, se devuelve un valor de error.
Consulte Implementación de ejemplo para parámetros, permisos y comprobación de errores.
Obtención de la especificación del canal
Al usar las funciones avanzadas, obtenga la especificación del canal mediante llamadas ioctl antes de sondear, establecer el voltaje de referencia o obtener el recuento de bits de muestra. Este paso se puede omitir codificando de forma rígida algunos de los valores obtenidos, pero no se recomienda. Tenga en cuenta que este paso se controla mediante código proporcionado en las funciones simples.
// Used to get the size of the buffer to allocate for the channel specification
IIO_GET_CHANNEL_SPEC_BUFFER_TOTAL_SIZE_IOCTL
// Used to get the channel specification and set the ‘iio_ioctl_chan_spec_buffer’ struct properly
IIO_GET_CHANNEL_SPEC_BUFFER_IOCTL
Establecer el voltaje de referencia
Para establecer el voltaje de referencia de un canal mediante la API avanzada:
Establezca la información de ADC rellenada en la
iio_ioctl_chan_spec_buffer
estructura que se recuperó en la especificación Obtener canal.Obtenga el índice de propiedad de la propiedad que se va a establecer para el canal.
Escriba el voltaje de referencia mediante el índice de propiedades y la información de especificación del canal.
Para obtener el índice de la propiedad de voltaje de referencia:
En la estructura recuperada en la
iio_ioctl_chan_spec_buffer
especificación Obtener canal, use el valor delchannel
campo y, desde elchannel
campo, use el valor delext_info
campo. Elext_info
campo es unaiio_ioctl_chan_spec_ext_info
estructura que es el encabezado de una lista vinculada de descriptores de propiedad para el canal.A partir de 0, recorra la lista contando los nodos hasta que el
name
campo coincida con lareference_voltage
cadena.- Cada nodo de la lista tiene un campo "siguiente" que apunta al siguiente nodo de la lista. El último nodo apunta a NULL.
- El contador resultante es el índice de la propiedad .
Para establecer el voltaje de referencia, utilice el
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl que toma una estructura de tipoiio_ioctl_write_chan_ext_info
, que contiene los datos pertinentes (en este caso el voltaje), el canal que se va a establecer y la propiedad específica (voltaje de referencia) que se establece para ese canal.
Obtención del recuento de bits de ejemplo
Para establecer el voltaje de referencia mediante las API avanzadas:
Asegúrese de obtener la información del canal de ADC adecuado. Esta información se rellena en la
iio_ioctl_chan_spec_buffer
estructura que se recuperó en la sección Obtener especificación del canal.Obtenga el índice de propiedad de la propiedad que desea leer para el canal, que en este caso es el recuento de bits de ejemplo.
Use ioctls de Linux para obtener el recuento de bits de ejemplo mediante el índice de propiedades y la especificación del canal.
Para obtener el índice de propiedad del recuento de bits de muestra, use un proceso idéntico a Establecer voltaje de referencia. Sin embargo, al iterar en la lista vinculada denominada ext_info
de tipo iio_ioctl_chan_spec_ext_info
, coincide con la cadena current_bits
.
Llame al ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
para rellenar una estructura de tipo iio_ioctl_read_chan_ext_info
con los datos necesarios en el buffer
campo.
Leer el canal de ADC
Para leer el canal de ADC, sondee mediante la llamada IIO_READ_RAW_CHANNEL_INFO_IOCTL
ioctl , pasando la estructura iio_ioctl_raw_channel_info
que se rellenará con los datos del canal de ADC.
Implementación de ejemplo
Para leer ADC mediante la implementación avanzada de Azure Sphere, consulte el fragmento de código en el ejemplo de aplicación avanzada de ADC.
Para comparar las diferencias en la semántica entre interactuar con el periférico al codificar para Azure Sphere y codificar para un sistema Linux genérico, consulte LinuxSysfsNodes.
Compatibilidad de MT3620
Las especificaciones de ADC admitidas para la placa MT3620 se enumeran en Estado de compatibilidad de MT3620. En la guía del usuario de la placa de desarrollo MT3620, se dscribe la distribución y la función de los pines.
La carpeta HardwareDefinitions del directorio de instalación del SDK de Microsoft Azure Sphere contiene definiciones para paneles de desarrollo, módulos y chips comunes de Azure Sphere. Contiene archivos JSON y encabezados que definen las interfaces maestras para el RDB MT3620, MT3620, junto con otro hardware MT3620. La ubicación predeterminada de la carpeta HardwareDefinitions está C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
en Windows y /opt/azurespheresdk/HardwareDefinitions
en Linux.
El repositorio de ejemplos de Azure Sphere en GitHub contiene archivos JSON y encabezados que definen interfaces maestras SPI para el chip MT3620 y RDB MT3620, junto con otros hardware MT3620.>