Partilhar via


Utilizar ADCs em aplicações de alto nível

Este tópico descreve como utilizar conversores analógicos para digitais (ADCs) numa aplicação de alto nível. Veja Utilizar periféricos numa aplicação com capacidade em tempo real para obter informações sobre a utilização do ADC no RTApps.

O Azure Sphere suporta conversão analógica para digital. Um ADC converte uma entrada analógica num valor digital correspondente. O número de canais de entrada e a resolução (como número de bits de saída do ADC) são dependentes do dispositivo.

O exemplo de ADC_HighLevelApp demonstra como aceder aos ADCs num dispositivo MT3620.

Os fragmentos periféricos do ADC demonstram duas formas de interagir com os ADCs através de funções simplificadas ou avançadas .

O MT3620 contém um ADC de 12 bits com 8 canais de entrada. O ADC compara uma tensão de entrada com uma tensão de referência e produz um valor entre 0 e 4095 como saída. Os canais de entrada do ADC e o GPIO afixam o mapa GPIO41 a GPIO48 aos mesmos pinos no MT3260. No entanto, se a sua aplicação utilizar o ADC, todos os 8 pinos são alocados para utilização como entradas ADC. Nenhum deles pode ser utilizado para GPIO.

Requisitos do ADC

As aplicações que comunicam com os ADCs têm de incluir o ficheiro de cabeçalho adc.h e adicionar definições de ADC ao manifesto da aplicação.

Todas as aplicações têm de definir o hardware de destino e incluir o ficheiro de cabeçalho de definição de hardware correspondente.

Ficheiros de Cabeçalho

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

Substitua "path-to-your-target-hardware.h" pelo caminho para o ficheiro de cabeçalho do hardware.

Definições do manifesto da aplicação

A definição ADC no manifesto da aplicação lista os controladores ADC que são acedidos pela aplicação. Para configurar estas definições, adicione a Adc capacidade ao manifesto da aplicação e, em seguida, adicione cada controlador ADC à capacidade. O tópico de manifesto de aplicação do Azure Sphere tem mais detalhes.

No código, utilize as constantes definidas para o hardware para identificar os controladores ADC. O compilador irá traduzir estes valores para valores não processados quando criar a aplicação.

Por exemplo, eis um excerto de um manifesto de aplicação para uma aplicação que visa um quadro de desenvolvimento de referência (RDB) MT3620.

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

O seguinte excerto mostra como especificar o mesmo controlador ADC numa aplicação que visa o Kit de Iniciação Avnet MT3620:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Descrição geral da implementação

Para implementar a sua aplicação para aceder ao ADC, utilize uma de duas abordagens:

Este tópico descreve ambos os métodos. Pode encontrar o código de exemplo completo para cada método aqui:

Acesso ADC com funções simplificadas

As aplicações de alto nível do Azure Sphere podem aceder aos ADCs ao chamar APIs ADC do Applibs.

Abrir um controlador ADC

Para abrir um controlador ADC para acesso, chame ADC_Open e transmita o ID do controlador como um parâmetro. Um descritor de ficheiros será devolvido se a chamada for efetuada com êxito. Caso contrário, será devolvido um valor de erro.

int ADC_Open(ADC_ControllerId id);

Ler a partir de um ADC

Para ler a partir do ADC, chame ADC_Poll. Transmite os seguintes parâmetros para ADC_Poll: o descritor de ficheiros devolvido por ADC_Open, o canal ADC e um ponteiro para onde o valor ADC será armazenado.

Para obter o número de bits válidos (resolução) devolvidos pela função ADC_Poll, chame ADC_GetSampleBitCount.

Definir a tensão de referência do ADC

Chame ADC_SetReferenceVoltage para definir a tensão de referência do ADC.

O MT3620 tem uma referência de 2,5 volts no chip. Em alternativa, pode ser ligado a uma referência de tensão externa inferior ou igual a 2,5 volts.

Acesso ADC com funções avançadas

Como alternativa às funções simplificadas de alto nível para interagir com o periférico, pode tirar partido da biblioteca ioctl para abrir a funcionalidade. Esta secção explica como fazê-lo e como a utilização de ioctls difere da utilização das funções genéricas do Linux.

O Fragmento de Funções Avançadas do ADC mostra como ler o ADC com as funções avançadas do Azure Sphere.

Por exemplo, pode ver uma comparação lado a lado da leitura do ADC com as implementações sysfs simplificadas, avançadas e linux:

Abrir o canal ADC

Para abrir um controlador ADC para acesso, utilize a chamada do Linux open que transmite o caminho para o diretório, que começará com /dev/adc<number> onde "number" é o ID do controlador. Um descritor de ficheiros é devolvido se a chamada tiver sido efetuada com êxito. Caso contrário, é devolvido um valor de erro.

Veja Implementação de Exemplo para parâmetros, permissões e verificação de erros.

Obter a especificação do canal

Ao utilizar as funções avançadas, obtenha a especificação do canal utilizando chamadas ioctl antes da consulta, definindo a tensão de referência ou obtendo a contagem de bits de exemplo. Este passo pode ser ignorado ao codificar alguns dos valores obtidos, mas não é recomendado. Tenha em atenção que este passo é processado por código fornecido nas funções 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

Definir a tensão de referência

Para definir a tensão de referência de um canal com a API avançada:

  1. Defina as informações do ADC preenchidas na iio_ioctl_chan_spec_buffer estrutura obtida na especificação Obter Canal.

  2. Obtenha o índice de propriedades da propriedade a definir para o canal.

  3. Escreva a tensão de referência com o índice de propriedades e as informações de especificação do canal.

Para obter o índice da propriedade de tensão de referência:

  1. A partir da iio_ioctl_chan_spec_buffer estrutura obtida na especificação Obter Canal, utilize o valor do channel campo e, a channel partir do campo, utilize o valor do ext_info campo. O ext_info campo é uma iio_ioctl_chan_spec_ext_info estrutura que é o cabeçalho de uma lista ligada de descritores de propriedades para o canal.

  2. A partir de 0, percorra a lista que conta os nós até que o name campo corresponda à reference_voltage cadeia.

    • Cada nó na lista tem um campo "seguinte" que aponta para o nó seguinte na lista. O último nó aponta para NULL.
    • O contador resultante é o índice da propriedade .
  3. Para definir a tensão de referência, utilize o IIO_WRITE_CHANNEL_EXT_INFO_IOCTL ioctl que recebe uma estrutura do tipo iio_ioctl_write_chan_ext_info, que contém os dados relevantes (neste caso, a tensão), o canal a definir e a propriedade específica (tensão de referência) definida para esse canal.

Obter a contagem de bits de exemplo

Para definir a tensão de referência com as APIs avançadas:

  1. Certifique-se de que está a obter as informações do canal ADC adequado. Estas informações são preenchidas na iio_ioctl_chan_spec_buffer estrutura que foi obtida na secção Obter Especificação de Canal.

  2. Obtenha o índice de propriedades da propriedade que pretende ler para o canal, que neste caso é a contagem de bits de exemplo.

  3. Utilize os ioctls do Linux para obter a contagem de bits de exemplo com o índice de propriedades e a especificação do canal.

Para obter o índice de propriedades da contagem de bits de exemplo, utilize um processo idêntico a Definir tensão de referência. No entanto, ao iterar através da lista ligada chamada ext_info do tipo iio_ioctl_chan_spec_ext_info, corresponde à cadeia current_bits.

Chame o ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL para preencher uma estrutura do tipo iio_ioctl_read_chan_ext_info com os dados necessários no buffercampo.

Ler o canal ADC

Para ler o canal ADC, consulte a chamada IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl , transmitindo a estrutura iio_ioctl_raw_channel_info que será preenchida com os dados do canal ADC.

Implementação de exemplo

Para ler o ADC com a implementação avançada do Azure Sphere, veja o fragmento no exemplo de aplicação Avançada do ADC.

Para comparar as diferenças na semântica entre interagir com o periférico ao codificar para o Azure Sphere e codificar para um sistema Linux genérico, veja LinuxSysfsNodes.

Suporte de MT3620

As funcionalidades do ADC suportadas para o MT3620 estão listadas no Estado de Suporte do MT3620. O guia do utilizador do quadro de desenvolvimento MT3620 descreve o esquema de pinos e as funções de afixar.

A pasta HardwareDefinitions no diretório de instalação do SDK do Microsoft Azure Sphere contém definições para quadros de desenvolvimento, módulos e chips comuns do Azure Sphere. Contém ficheiros de cabeçalho e JSON que definem as interfaces mestras para o RDB MT3620, MT3620, juntamente com outro hardware MT3620. A localização predefinida para a pasta HardwareDefinitions é C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions no Windows e /opt/azurespheresdk/HardwareDefinitions no Linux.