Condividi tramite


Usare ADC in applicazioni di alto livello

Importante

Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).

Questo argomento descrive come usare i convertitori analogico-digitale (ADC) in un'applicazione di alto livello. Per informazioni sull'uso di ADC in RTApps, vedere Usare periferiche in un'applicazione con funzionalità in tempo reale.

Azure Sphere supporta la conversione analogico-digitale. Un convertitore ADC converte un input analogico in un valore digitale corrispondente. Il numero di canali di input e la risoluzione (ovvero il numero di bit di output di ADC) dipendono dal dispositivo.

L'esempio ADC_HighLevelApp illustra come accedere ai convertitori ADC in un dispositivo MT3620.

I frammenti di periferiche ADC illustrano due modi per interagire con le schede di dominio di Azure usando funzioni semplificate o avanzate .

MT3620 contiene un convertitore ADC a 12 bit con 8 canali di input. Il convertitore ADC confronta la tensione di input con una tensione di riferimento e genera come output un valore compreso tra 0 e 4095. Viene eseguito il mapping dei canali di input di ADC e dei pin GPIO da GPIO41 a GPIO48 ai pin corrispondenti nel dispositivo MT3260. Tuttavia, se l'applicazione usa il convertitore ADC, tutti e 8 i pin vengono allocati per l'uso come input di ADC. Nessun pin può essere usato per GPIO.

Requisiti di ADC

Le applicazioni che comunicano con i convertitori ADC devono includere il file di intestazione adc.h e aggiungere le impostazioni di ADC al manifesto dell'applicazione.

Tutte le applicazioni devono impostare il relativo hardware di destinazione e includere il corrispondente file di intestazione di definizione dell'hardware.

File di intestazione

 #include <applibs/adc.h>
 #include "path-to-your-target-hardware.h"

Sostituire "path-to-your-target-hardware.h" con il percorso del file di intestazione dell'hardware in uso.

Impostazioni del manifesto dell'applicazione

L'impostazione di ADC nel manifesto dell'applicazione include i controller ADC a cui accede l'applicazione. Per configurare queste impostazioni, aggiungere la funzionalità Adc al manifesto dell'applicazione e quindi aggiungere ogni controller ADC a tale funzionalità. Per informazioni più dettagliate, vedere l'argomento relativo al manifesto dell'applicazione di Azure Sphere.

Nel codice usare le costanti definite per l'hardware in uso per identificare i controller ADC. Il compilatore convertirà questi valori in valori non elaborati quando si compila l'app.

Ad esempio, di seguito è riportato un estratto del manifesto di un'applicazione che ha come destinazione una scheda RDB (Reference Development Board) MT3620.

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

Nell'estratto seguente viene illustrato come specificare lo stesso controller ADC in un'applicazione che ha come destinazione Avnet MT3620 Starter Kit:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Panoramica dell'implementazione

Per implementare l'applicazione per l'accesso ad ADC, usare uno dei due approcci seguenti:

In questo argomento vengono descritti entrambi i metodi. Il codice di esempio completo per ogni metodo è disponibile qui:

Accesso ADC con funzioni semplificate

Le applicazioni di alto livello di Azure Sphere possono accedere ai controller ADC chiamando le API ADC di Applibs.

Aprire un controller ADC

Per aprire un controller ADC per l'accesso, chiamare ADC_Open e passare l'ID del controller come parametro. Se la chiamata ha esito positivo, verrà restituito un descrittore di file. In caso contrario, verrà restituito un valore di errore.

int ADC_Open(ADC_ControllerId id);

Leggere i dati di un controller ADC

Per leggere i dati di un controller ADC, chiamare ADC_Poll. Ad ADC_Poll vengono passati i parametri seguenti: il descrittore di file restituito da ADC_Open, il canale ADC e un puntatore alla posizione in cui verrà archiviato il valore ADC.

Per ottenere il numero di bit validi (risoluzione) restituito dalla funzione ADC_Poll, chiamare ADC_GetSampleBitCount.

Impostare la tensione di riferimento per ADC

Chiamare ADC_SetReferenceVoltage per impostare la tensione di riferimento di ADC.

Il riferimento di serie del dispositivo MT3620 è pari a 2,5 volt. In alternativa, il dispositivo può essere connesso a un riferimento di tensione esterno inferiore o pari a 2,5 volt.

Accesso ad AdC con funzioni avanzate

In alternativa alle funzioni semplificate di alto livello per interagire con la periferica, è possibile sfruttare la libreria ioctl per aprire la funzionalità. Questa sezione illustra come eseguire questa operazione e come l'uso di ioctls differisce dall'uso delle funzioni Linux generiche.

AdC Advanced Functions Snippet mostra come leggere ADC usando le funzioni avanzate di Azure Sphere.

Ad esempio, è possibile visualizzare un confronto side-by-side della lettura di ADC con le implementazioni semplificate, avanzate e linux sysfs:

Aprire il canale ADC

Per aprire un controller ADC per l'accesso, usare la chiamata Linux open passando il percorso della directory che inizierà con /dev/adc<number> dove 'number' è l'ID controller. Se la chiamata ha avuto esito positivo, viene restituito un descrittore di file. In caso contrario, viene restituito un valore di errore.

Vedere Implementazione di esempio per parametri, autorizzazioni e controllo degli errori.

Ottenere la specifica del canale

Quando si usano le funzioni avanzate, ottenere la specifica del canale usando chiamate ioctl prima del polling, impostare la tensione di riferimento o ottenere il conteggio dei bit di esempio. Questo passaggio può essere ignorato hardcoded alcuni dei valori ottenuti, ma non è consigliabile. Si noti che questo passaggio viene gestito dal codice fornito nelle funzioni semplici.


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

Impostare la tensione di riferimento

Per impostare la tensione di riferimento di un canale usando l'API avanzata:

  1. Impostare le informazioni di ADC popolate nella iio_ioctl_chan_spec_buffer struttura recuperata nella specifica Get Channel.

  2. Ottiene l'indice delle proprietà della proprietà da impostare per il canale.

  3. Scrivere la tensione di riferimento usando le informazioni sull'indice della proprietà e sulla specifica del canale.

Per ottenere l'indice della proprietà di tensione di riferimento:

  1. iio_ioctl_chan_spec_buffer Dalla struttura recuperata nella specifica Get Channel usare il valore del channel campo e, dal channel campo, usare il valore del ext_info campo. Il ext_info campo è uno iio_ioctl_chan_spec_ext_info struct che rappresenta l'intestazione di un elenco collegato di descrittori di proprietà per il canale.

  2. A partire da 0, attraversare l'elenco contando i nodi fino a quando il name campo non corrisponde alla reference_voltage stringa.

    • Ogni nodo nell'elenco ha un campo "successivo" che punta al nodo successivo nell'elenco. L'ultimo nodo punta a NULL.
    • Il contatore risultante è l'indice della proprietà .
  3. Per impostare la tensione di riferimento, usare l'ioctl IIO_WRITE_CHANNEL_EXT_INFO_IOCTL che accetta uno struct di tipo iio_ioctl_write_chan_ext_info, che contiene i dati pertinenti (in questo caso la tensione), il canale da impostare e la proprietà specifica (tensione di riferimento) impostata per tale canale.

Ottenere il conteggio dei bit di esempio

Per impostare la tensione di riferimento usando le API avanzate:

  1. Assicurarsi di ottenere le informazioni del canale ADC appropriato. Queste informazioni vengono popolate nella struttura recuperata nella sezione Get Channel Specification .This information is populated in the iio_ioctl_chan_spec_buffer structure that was retrieved in the Get Channel Specification section.

  2. Ottenere l'indice delle proprietà della proprietà da leggere per il canale, che in questo caso è il numero di bit di esempio.

  3. Usare ioctls Linux per ottenere il conteggio dei bit di esempio usando l'indice delle proprietà e la specifica del canale.

Per ottenere l'indice della proprietà del conteggio dei bit di esempio, usare un processo identico a Set reference voltage (Imposta tensione di riferimento). Tuttavia, durante l'iterazione sull'elenco collegato denominato ext_info di tipo iio_ioctl_chan_spec_ext_info, corrispondono alla stringa current_bits.

Chiamare ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL per popolare uno struct di tipo iio_ioctl_read_chan_ext_info con i dati necessari nel buffercampo.

Leggere il canale ADC

Per leggere il canale ADC, eseguire il polling usando la chiamata IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl , passando lo struct iio_ioctl_raw_channel_info che verrà popolato con i dati del canale ADC.

Implementazione di esempio

Per leggere ADC usando l'implementazione avanzata di Azure Sphere, vedere il frammento di codice nell'esempio di app ADC Advanced.

Per confrontare le differenze nella semantica tra l'interazione con la periferica durante la codifica per Azure Sphere e la codifica per un sistema Linux generico, vedere LinuxSysfsNodes.

Supporto di MT3620

Le funzionalità ADC supportate per MT3620 sono indicate in MT3620: stato del supporto. Il manuale utente della scheda di sviluppo MT3620 descrive il layout dei pin e le relative funzioni.

La cartella HardwareDefinitions nella directory di installazione di Microsoft Azure Sphere SDK contiene definizioni per schede di sviluppo, moduli e chip di Azure Sphere comuni. Contiene file di intestazione e JSON che definiscono le interfacce master per MT3620, MT3620 RDB, insieme ad altri hardware MT3620. Il percorso predefinito per la cartella HardwareDefinitions si trova C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows e /opt/azurespheresdk/HardwareDefinitions in Linux.

Il repository di esempi di Azure Sphere in GitHub contiene file di intestazione e JSON che definiscono interfacce master SPI per il chip MT3620 e MT3620 RDB, insieme ad altri hardware MT3620.>