Utiliser les ADC dans les applications de haut niveau
Cette rubrique explique comment utiliser des convertisseurs analogique-numérique (ADC) dans une application de haut niveau. Consultez Utiliser des périphériques dans une application prenant en charge le temps réel pour plus d’informations sur l’utilisation d’ADC dans les applications en temps réel.
Azure Sphere prend en charge la conversion analogique en numérique. Un ADC convertit une entrée analogique en valeur numérique correspondante. Le nombre de canaux d’entrée et la résolution (en tant que nombre de bits de sortie ADC) dépendent de l’appareil.
L’exemple ADC_HighLevelApp montre comment accéder aux ADC sur un appareil MT3620.
Les extraits de code ADC Peripheral montrent deux façons d’interagir avec les ADC à l’aide de fonctions simplifiées ou avancées .
Le MT3620 contient un ADC 12 bits avec 8 canaux d’entrée. L’ADC compare une tension d’entrée à une tension de référence et produit une valeur comprise entre 0 et 4095 comme sortie. Les canaux d’entrée ADC et les broches GPIO GPIO41 à GPIO48 correspondent aux mêmes broches sur le MT3260. Toutefois, si votre application utilise l’ADC, les 8 broches sont allouées pour être utilisées comme entrées ADC. Aucun d’entre eux ne peut être utilisé pour GPIO.
Conditions requises pour ADC
Les applications qui communiquent avec les ADC doivent inclure le fichier d’en-tête adc.h et ajouter des paramètres ADC au manifeste de l’application.
Toutes les applications doivent définir leur matériel cible et inclure le fichier d’en-tête de définition de matériel correspondant.
Fichiers d’en-tête
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
Remplacez « path-to-your-target-hardware.h » par le chemin d’accès au fichier d’en-tête de votre matériel.
Paramètres du manifeste d’application
Le paramètre ADC dans le manifeste de l’application répertorie les contrôleurs ADC auxquels l’application accède. Pour configurer ces paramètres, ajoutez la Adc
fonctionnalité au manifeste de l’application, puis ajoutez chaque contrôleur ADC à la fonctionnalité. La rubrique du manifeste d’application Azure Sphere contient plus de détails.
Dans votre code, utilisez les constantes définies pour votre matériel afin d’identifier les contrôleurs ADC. Le compilateur traduit ces valeurs en valeurs brutes lorsque vous générez l’application.
Par exemple, voici un extrait d’un manifeste d’application pour une application qui cible une carte de développement de référence (RDB) MT3620.
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
L’extrait suivant montre comment spécifier le même contrôleur ADC dans une application qui cible le Kit de démarrage Avnet MT3620 :
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
Vue d’ensemble de l’implémentation
Pour implémenter votre application pour accéder à ADC, utilisez l’une des deux approches suivantes :
Cette rubrique décrit les deux méthodes. Vous trouverez l’exemple de code complet pour chaque méthode ici :
Accès ADC avec des fonctions simplifiées
Les applications de haut niveau Azure Sphere peuvent accéder aux ADC en appelant les API ADC des bibliothèques d’applications.
Ouvrir un contrôleur ADC
Pour ouvrir un contrôleur ADC à des fins d’accès, appelez ADC_Open et passez l’ID du contrôleur en tant que paramètre. Un descripteur de fichier est retourné si l’appel réussit. Sinon, une valeur d’erreur est retournée.
int ADC_Open(ADC_ControllerId id);
Lecture à partir d’un ADC
Pour lire à partir de l’ADC, appelez ADC_Poll. Vous transmettez les paramètres suivants à ADC_Poll : le descripteur de fichier retourné par ADC_Open, le canal ADC et un pointeur vers l’emplacement où la valeur ADC sera stockée.
Pour obtenir le nombre de bits valides (résolution) retourné par la fonction ADC_Poll, appelez ADC_GetSampleBitCount.
Définir la tension de référence ADC
Appelez ADC_SetReferenceVoltage pour définir la tension de référence ADC.
Le MT3620 dispose d’une référence sur puce de 2,5 volts. Elle peut également être connectée à une référence de tension externe inférieure ou égale à 2,5 volts.
Accès ADC avec des fonctions avancées
En guise d’alternative aux fonctions simplifiées de haut niveau pour interagir avec le périphérique, vous pouvez tirer parti de la bibliothèque ioctl pour ouvrir des fonctionnalités. Cette section explique comment procéder et en quoi l’utilisation d’ioctls diffère de l’utilisation des fonctions Linux génériques.
L’extrait de code fonctions avancées ADC montre comment lire ADC à l’aide des fonctions avancées Azure Sphere.
Par exemple, vous pouvez voir une comparaison côte à côte de la lecture d’ADC avec les implémentations sysfs simplifiées, avancées et linux :
- Extrait de code de fonctions simplifiées ADC
- Extrait de code de nœuds Sysfs ADC Linux
- Extrait de code ADC Advanced Functions
Ouvrir le canal ADC
Pour ouvrir un contrôleur ADC à des fins d’accès, utilisez l’appel Linux open
en passant le chemin d’accès au répertoire qui commence par /dev/adc<number>
où « numéro » est l’ID du contrôleur. Un descripteur de fichier est retourné si l’appel a réussi. Sinon, une valeur d’erreur est retournée.
Consultez Exemple d’implémentation pour les paramètres, les autorisations et la vérification des erreurs.
Obtenir la spécification du canal
Lors de l’utilisation des fonctions avancées, obtenez la spécification du canal en utilisant des appels ioctl avant l’interrogation, la définition de la tension de référence ou l’obtention du nombre de bits de l’exemple. Cette étape peut être ignorée en codant en dur certaines des valeurs obtenues, mais elle n’est pas recommandée. Notez que cette étape est gérée par le code fourni dans les fonctions 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
Définir la tension de référence
Pour définir la tension de référence d’un canal à l’aide de l’API avancée :
Définissez les informations ADC renseignées dans la
iio_ioctl_chan_spec_buffer
structure récupérée dans la spécification Get Channel.Obtient l’index de propriété de la propriété à définir pour le canal.
Écrivez la tension de référence à l’aide de l’index de propriété et des informations de spécification de canal.
Pour obtenir l’index de la propriété de tension de référence :
À partir de la
iio_ioctl_chan_spec_buffer
structure récupérée dans la spécification Get Channel, utilisez la valeur duchannel
champ et, à partir duchannel
champ, utilisez la valeur duext_info
champ. Leext_info
champ est uniio_ioctl_chan_spec_ext_info
struct qui est le début d’une liste liée de descripteurs de propriété pour le canal.À partir de 0, parcourez la liste en comptant les nœuds jusqu’à ce que le
name
champ corresponde à lareference_voltage
chaîne.- Chaque nœud de la liste a un champ « suivant » qui pointe vers le nœud suivant dans la liste. Le dernier nœud pointe vers NULL.
- Le compteur obtenu est l’index de la propriété .
Pour définir la tension de référence, utilisez le
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl qui accepte un struct de typeiio_ioctl_write_chan_ext_info
, qui contient les données pertinentes (dans ce cas, la tension), le canal à définir et la propriété spécifique (tension de référence) définie pour ce canal.
Obtenir l’exemple de nombre de bits
Pour définir la tension de référence à l’aide des API avancées :
Veillez à obtenir les informations du canal ADC approprié. Ces informations sont renseignées dans la
iio_ioctl_chan_spec_buffer
structure qui a été récupérée dans la section Obtenir la spécification du canal.Obtenez l’index de propriété de la propriété que vous souhaitez lire pour le canal, qui dans ce cas est l’exemple de nombre de bits.
Utilisez ioctls Linux pour obtenir l’exemple de nombre de bits à l’aide de l’index de propriété et de la spécification du canal.
Pour obtenir l’index de propriété de l’exemple de nombre de bits, utilisez un processus identique à Définir la tension de référence. Toutefois, lors de l’itération sur la liste liée appelée ext_info
de type iio_ioctl_chan_spec_ext_info
, faites correspondre la chaîne current_bits
.
Appelez ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
pour remplir un struct de type iio_ioctl_read_chan_ext_info
avec les données nécessaires dans le buffer
champ.
Lire le canal ADC
Pour lire le canal ADC, interrogez à l’aide de l’appel IIO_READ_RAW_CHANNEL_INFO_IOCTL
ioctl , en passant le struct iio_ioctl_raw_channel_info
qui sera rempli avec les données du canal ADC.
Exemple d’implémentation
Pour lire ADC à l’aide de l’implémentation avancée d’Azure Sphere, consultez l’extrait de code dans l’exemple d’application ADC Advanced.
Pour comparer les différences sémantiques entre l’interaction avec le périphérique lors du codage pour Azure Sphere et le codage pour un système Linux générique, consultez LinuxSysfsNodes.
Prise en charge de MT3620
Les fonctionnalités ADC prises en charge pour le MT3620 sont répertoriées dans État de prise en charge mt3620. Le guide de l’utilisateur de la carte de développement MT3620 décrit la disposition des broches et les fonctions d’épingle.
Le dossier HardwareDefinitions du répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Azure Sphere contient les définitions des cartes de développement, modules et puces Azure Sphere courants. Il contient des fichiers d’en-tête et JSON qui définissent les interfaces master pour mt3620, MT3620 RDB, ainsi que d’autres matériels MT3620. L’emplacement par défaut du dossier HardwareDefinitions est C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
sur Windows et /opt/azurespheresdk/HardwareDefinitions
sur Linux.