Delen via


APC's gebruiken in toepassingen op hoog niveau

In dit onderwerp wordt beschreven hoe u analog-to-digital converters (ACS) gebruikt in een toepassing op hoog niveau. Zie Randapparatuur gebruiken in een realtime-compatibele toepassing voor informatie over het gebruik van ADC in RTApps.

Azure Sphere ondersteunt analoge naar digitale conversie. Een ADC converteert een analoge invoer naar een bijbehorende digitale waarde. Het aantal invoerkanalen en de resolutie (als aantal ADC-uitvoerbits) zijn afhankelijk van het apparaat.

Het voorbeeld van ADC_HighLevelApp laat zien hoe u toegang krijgt tot APC's op een MT3620-apparaat.

De ADC Peripheral-fragmenten laten twee manieren zien om te communiceren met ADC's met behulp van vereenvoudigde of geavanceerde functies.

De MT3620 bevat een 12-bits ADC met 8 invoerkanalen. De ADC vergelijkt een ingangsspanning met een referentiespanning en produceert een waarde tussen 0 en 4095 als uitvoer. De ADC-invoerkanalen en de GPIO-pinnen GPIO41 via GPIO48 worden toegewezen aan dezelfde pinnen op de MT3260. Als uw toepassing echter de ADC gebruikt, worden alle 8 pinnen toegewezen voor gebruik als ADC-invoer. Geen van deze kan worden gebruikt voor GPIO.

ADC-vereisten

Toepassingen die communiceren met ADC's moeten het headerbestand adc.h bevatten en ADC-instellingen toevoegen aan het toepassingsmanifest.

Alle toepassingen moeten hun doelhardware instellen en het bijbehorende headerbestand voor de hardwaredefinitie bevatten.

Koptekstbestanden

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

Vervang path-to-your-target-hardware.h door het pad naar het headerbestand voor uw hardware.

Toepassingsmanifestinstellingen

De ADC-instelling in het toepassingsmanifest bevat de ADC-controllers die door de toepassing worden geopend. Als u deze instellingen wilt configureren, voegt u de Adc mogelijkheid toe aan het toepassingsmanifest en voegt u vervolgens elke ADC-controller toe aan de mogelijkheid. Het onderwerp Azure Sphere-toepassingsmanifest bevat meer informatie.

Gebruik in uw code de constanten die zijn gedefinieerd voor uw hardware om de ADC-controllers te identificeren. De compiler vertaalt deze waarden naar onbewerkte waarden wanneer u de app bouwt.

Hier volgt bijvoorbeeld een fragment uit een toepassingsmanifest voor een toepassing die is gericht op een MT3620-referentieontwikkelingsbord (RDB).

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

In het volgende fragment ziet u hoe u dezelfde ADC-controller opgeeft in een toepassing die is gericht op de Avnet MT3620 Starter Kit:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Implementatieoverzicht

Als u uw toepassing wilt implementeren voor toegang tot ADC, gebruikt u een van de volgende twee benaderingen:

In dit onderwerp worden beide methoden beschreven. U vindt hier de volledige voorbeeldcode voor elke methode:

ADC-toegang met vereenvoudigde functies

Toepassingen op hoog niveau van Azure Sphere hebben toegang tot ADC's door ADC-API's van Applibs aan te roepen.

Een ADC-controller openen

Als u een ADC-controller wilt openen voor toegang, roept u ADC_Open aan en geeft u de id van de controller door als parameter. Er wordt een bestandsdescriptor geretourneerd als de aanroep is geslaagd. Anders wordt er een foutwaarde geretourneerd.

int ADC_Open(ADC_ControllerId id);

Lezen van een ADC

Als u wilt lezen uit de ADC, roept u ADC_Poll aan. U geeft de volgende parameters door aan ADC_Poll: de bestandsdescriptor die wordt geretourneerd door ADC_Open, het ADC-kanaal en een aanwijzer naar de locatie waar de ADC-waarde wordt opgeslagen.

Als u het aantal geldige bits (resolutie) wilt ophalen dat door de functie ADC_Poll wordt geretourneerd, roept u ADC_GetSampleBitCount aan.

De ADC-referentiespanning instellen

Roep ADC_SetReferenceVoltage aan om de ADC-referentiespanning in te stellen.

De MT3620 heeft een on-chip, 2,5 volt referentie. Het kan ook worden aangesloten op een externe spanningsreferentie die kleiner is dan of gelijk is aan 2,5 volt.

ADC-toegang met geavanceerde functies

Als alternatief voor de vereenvoudigde functies op hoog niveau om te communiceren met het randapparaat, kunt u gebruikmaken van de ioctl-bibliotheek om functionaliteit te openen. In deze sectie wordt uitgelegd hoe u dit doet en hoe het gebruik van ioctls verschilt van het gebruik van de algemene Linux-functies.

ADC Advanced Functions Snippet laat zien hoe u ADC kunt lezen met behulp van de geavanceerde functies van Azure Sphere.

Als voorbeeld ziet u een vergelijking van het lezen van ADC met de vereenvoudigde, geavanceerde en Linux sysfs-implementaties:

Het ADC-kanaal openen

Als u een ADC-controller wilt openen voor toegang, gebruikt u de Linux-aanroep open die wordt doorgegeven in het pad naar de map die begint met /dev/adc<number> waar 'number' de controller-id is. Er wordt een bestandsdescriptor geretourneerd als de aanroep is geslaagd. Anders wordt een foutwaarde geretourneerd.

Zie Voorbeeld van implementatie voor parameters, machtigingen en foutcontrole.

De kanaalspecificatie ophalen

Wanneer u de geavanceerde functies gebruikt, haalt u de kanaalspecificatie op door ioctl-aanroepen te gebruiken voordat u polling uitvoert, de referentiespanning instelt of het aantal voorbeeldbits ophaalt. Deze stap kan worden overgeslagen door een aantal van de verkregen waarden hard te coderen, maar wordt niet aanbevolen. Houd er rekening mee dat deze stap wordt verwerkt door code die wordt geleverd in de eenvoudige functies.


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

De referentiespanning instellen

De referentiespanning van een kanaal instellen met behulp van de geavanceerde API:

  1. Stel de ADC-informatie in die is ingevuld in de iio_ioctl_chan_spec_buffer structuur die is opgehaald in De specificatie Get-kanaal.

  2. Haal de eigenschapsindex op van de eigenschap die moet worden ingesteld voor het kanaal.

  3. Schrijf de referentiespanning met behulp van de informatie over de eigenschappenindex en de kanaalspecificatie.

Ga als volgende te werk om de index van de referentiespanningseigenschap op te halen:

  1. Gebruik vanuit de iio_ioctl_chan_spec_buffer structuur die is opgehaald in de specificatie Kanaal ophalen de waarde uit het channel veld en gebruik vanuit het channel veld de waarde uit het ext_info veld. Het ext_info veld is een iio_ioctl_chan_spec_ext_info struct die het hoofd is van een gekoppelde lijst met eigenschapsbeschrijvingen voor het kanaal.

  2. Vanaf 0 doorkruist u de lijst met het tellen van de knooppunten totdat het name veld overeenkomt met de reference_voltage tekenreeks.

    • Elk knooppunt in de lijst heeft een 'volgende'-veld dat verwijst naar het volgende knooppunt in de lijst. Het laatste knooppunt verwijst naar NULL.
    • Het resulterende teller is de index van de eigenschap.
  3. Als u de referentiespanning wilt instellen, gebruikt u de IIO_WRITE_CHANNEL_EXT_INFO_IOCTL ioctl die een struct van het type iio_ioctl_write_chan_ext_infogebruikt, die de relevante gegevens bevat (in dit geval de spanning), het in te stellen kanaal en de specifieke eigenschap (referentiespanning) die voor dat kanaal is ingesteld.

Het aantal voorbeeldbits ophalen

De referentiespanning instellen met behulp van de geavanceerde API's:

  1. Zorg ervoor dat u de informatie van het juiste ADC-kanaal krijgt. Deze informatie wordt ingevuld in de iio_ioctl_chan_spec_buffer structuur die is opgehaald in de sectie Kanaalspecificatie ophalen.

  2. Haal de eigenschapsindex op van de eigenschap die u wilt lezen voor het kanaal, wat in dit geval het aantal voorbeeldbits is.

  3. Gebruik Linux-ioctls om het aantal voorbeeldbits op te halen met behulp van de eigenschapsindex en kanaalspecificatie.

Als u de eigenschappenindex van het aantal voorbeeldbits wilt ophalen, gebruikt u een proces dat identiek is aan Referentiespanning instellen. Tijdens het herhalen van de gekoppelde lijst met de naam ext_info van het type iio_ioctl_chan_spec_ext_info, komt u echter overeen met de tekenreeks current_bits.

Roep de ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL aan om een struct van het type iio_ioctl_read_chan_ext_info te vullen met de benodigde gegevens in het bufferveld.

Het ADC-kanaal lezen

Als u het ADC-kanaal wilt lezen, pollt u met behulp van de ioctl-aanroep IIO_READ_RAW_CHANNEL_INFO_IOCTL, die wordt doorgegeven in de struct iio_ioctl_raw_channel_info die wordt gevuld met de gegevens van het ADC-kanaal.

Voorbeeld van implementatie

Als u ADC wilt lezen met behulp van de geavanceerde implementatie van Azure Sphere, raadpleegt u het fragment in het voorbeeld van de ADC Advanced-app.

Zie LinuxSysfsNodes om de verschillen in semantiek tussen interactie met het randapparaat bij het coderen voor Azure Sphere en het coderen voor een algemeen Linux-systeem te vergelijken.

MT3620-ondersteuning

De ondersteunde ADC-functies voor de MT3620 worden vermeld in MT3620-ondersteuningsstatus. In de gebruikershandleiding voor het MT3620-ontwikkelbord worden de pin-indeling en speldfuncties beschreven.

De map HardwareDefinitions in de installatiemap van de Microsoft Azure Sphere SDK bevat definities voor algemene Azure Sphere-ontwikkelborden, -modules en -chips. Het bevat header- en JSON-bestanden die de hoofdinterfaces definiëren voor de MT3620, MT3620 RDB, samen met andere MT3620-hardware. De standaardlocatie voor de map HardwareDefinitions is C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows en /opt/azurespheresdk/HardwareDefinitions op Linux.