Utiliser des ADC dans les applications de haut niveau
Important
Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).
Cette rubrique explique comment utiliser des convertisseurs analogiques-numériques (ADC) dans une application générale. Pour plus d’informations sur l’utilisation des ADC dans les applications en temps réel, consultez Utiliser des périphériques dans une application prenant en charge le 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 (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 périphérique ADC 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. Cet ADC compare une tension en entrée à une tension de référence, puis produit une valeur comprise entre 0 et 4 095 en tant que sortie. Les canaux d’entrée ADC et les broches GPIO de GPIO41 à GPIO48 correspondent aux mêmes broches sur le MT3260. Toutefois, si votre application utilise cet ADC, alors les 8 broches sont toutes allouées à des entrées ADC. Aucune d’elles ne peut être utilisée pour GPIO.
Exigences pour les 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 matérielle 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 du fichier d’en-tête de votre matériel.
Paramètres de manifeste de l’application
Le paramètre ADC du manifeste de l’application liste les contrôleurs ADC auxquels l’application accède. Pour configurer ces paramètres, ajoutez la fonctionnalité Adc
au manifeste de l’application, puis ajoutez chaque contrôleur ADC à la fonctionnalité. Pour plus d’informations, consultez la rubrique sur le manifeste de l’application Azure Sphere.
Dans votre code, utilisez les constantes définies pour votre matériel afin d’identifier les contrôleurs ADC. Le compilateur convertit ces valeurs en valeurs brutes lorsque vous générez l’application.
Par exemple, voici un extrait d’un manifeste d’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 starter kit 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 générales Azure Sphere peuvent accéder aux ADC en appelant des API ADC des bibliothèques d’applications.
Ouvrir un contrôleur ADC
Pour ouvrir un contrôleur ADC afin d’y accéder, appelez ADC_Open et passez l’ID du contrôleur en tant que paramètre. Un descripteur de fichier est retourné en cas de réussite de l’appel. Dans le cas contraire, une valeur d’erreur est retournée.
int ADC_Open(ADC_ControllerId id);
Lire à partir d’un ADC
Pour lire à partir d’un ADC, appelez ADC_Poll. Vous passez les paramètres suivants à ADC_Poll : le descripteur de fichier retourné par ADC_Open, le canal ADC et un pointeur vers l’emplacement de stockage de la valeur ADC.
Pour obtenir le nombre de bits valides (résolution) retournés 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 a une tension de référence de 2,5 volts sur circuit intégré. Elle peut également être connectée à une tension de référence 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 comment utiliser ioctls diffère de l’utilisation des fonctions Linux génériques.
L’extrait de code ADC Advanced Functions 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 des nœuds Sysfs Linux ADC
- Extrait de code aDC Advanced Functions
Ouvrir le canal ADC
Pour ouvrir un contrôleur ADC pour l’accès, utilisez l’appel Linux open
qui passe le chemin d’accès au répertoire, qui commence par /dev/adc<number>
l’emplacement où « number » 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 l’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 à l’aide d’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 coder 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 structure récupérée dans la
iio_ioctl_chan_spec_buffer
spécification Get Channel.Obtenez l’index de propriété de la propriété à définir pour le canal.
Écrivez la tension de référence à l’aide des informations de spécification de l’index de propriété et du canal.
Pour obtenir l’index de la propriété de tension de référence :
Dans la structure récupérée dans la
iio_ioctl_chan_spec_buffer
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 chef d’une liste liée de descripteurs de propriétés 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 de la liste. Le dernier nœud pointe vers NULL.
- Le compteur résultant 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 prend 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 :
Vérifiez que vous obtenez les informations du canal ADC approprié. Ces informations sont renseignées dans la
iio_ioctl_chan_spec_buffer
structure 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 les 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
, correspond à la chaîne current_bits
.
Appelez le 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 avancé ADC.
Pour comparer les différences de sémantique 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 la carte MT3620
Pour la carte MT3620, les fonctionnalités ADC prises en charge sont listées dans État de la prise en charge du MT3620. Le guide de l’utilisateur pour la carte de développement MT3620 décrit la disposition des broches ainsi que leurs fonctions.
Le dossier HardwareDefinitions du répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Azure Sphere contient des définitions pour les 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 principales pour la base de données RDB MT3620, MT3620, ainsi que d’autres matériels MT3620. L’emplacement par défaut du dossier HardwareDefinitions se trouve C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
sur Windows et /opt/azurespheresdk/HardwareDefinitions
sur Linux.
Le référentiel d’exemples Azure Sphere sur GitHub contient des fichiers d’en-tête et JSON qui définissent des interfaces principales SPI pour la puce MT3620 et MT3620 RDB, ainsi que d’autres matériels MT3620.-->