Udostępnij za pośrednictwem


Korzystanie z usług ADCs w aplikacjach wysokiego poziomu

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

W tym temacie opisano sposób używania konwerterów analogowo-cyfrowych (ADC) w aplikacji wysokiego poziomu. Aby uzyskać informacje na temat używania usługi ADC w usłudze RTApps, zobacz Używanie urządzeń peryferyjnych w aplikacji obsługującej czas rzeczywistym.

Usługa Azure Sphere obsługuje konwersję analogową do cyfrowej. Usługa ADC konwertuje dane wejściowe analogowe na odpowiadającą mu wartość cyfrową. Liczba kanałów wejściowych i rozdzielczość (jako liczba bitów wyjściowych usługi ADC) jest zależna od urządzenia.

W przykładzie ADC_HighLevelApp pokazano, jak uzyskać dostęp do usług ADCs na urządzeniu MT3620.

Fragmenty kodu peryferyjnego usługi ADC przedstawiają dwa sposoby interakcji z usługami ADCs przy użyciu uproszczonych lub zaawansowanych funkcji.

Mt3620 zawiera 12-bitową usługę ADC z 8 kanałami wejściowymi. ADC porównuje napięcie wejściowe z napięciem odniesienia i generuje wartość z zakresu od 0 do 4095 jako jego wyjścia. Kanały wejściowe usługi ADC i gpIO wyprowadza GPIO41 do GPIO48 mapuje się na te same wyprowadzenia na MT3260. Jeśli jednak aplikacja używa usługi ADC, wszystkie 8 wyprowadzeń są przydzielane do użycia jako dane wejściowe usługi ADC. Żaden z nich nie może być używany do gpIO.

Wymagania dotyczące usługi ADC

Aplikacje komunikujące się z usługami ADCs muszą zawierać plik nagłówka adc.h i dodać ustawienia usługi ADC do manifestu aplikacji.

Wszystkie aplikacje muszą ustawić sprzęt docelowy i dołączyć odpowiedni plik nagłówka definicji sprzętu.

Pliki nagłówkowe

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

Zastąp ciąg "path-to-your-target-hardware.h" ścieżką do pliku nagłówka dla sprzętu.

Ustawienia manifestu aplikacji

Ustawienie usługi ADC w manifeście aplikacji zawiera listę kontrolerów usługi ADC, które są dostępne przez aplikację. Aby skonfigurować te ustawienia, dodaj Adc możliwość do manifestu aplikacji, a następnie dodaj każdy kontroler usługi ADC do możliwości. Temat manifestu aplikacji usługi Azure Sphere zawiera więcej szczegółów.

W kodzie użyj stałych zdefiniowanych dla sprzętu, aby zidentyfikować kontrolery usługi ADC. Kompilator przełoży te wartości na nieprzetworzone wartości podczas kompilowania aplikacji.

Na przykład poniżej przedstawiono fragment manifestu aplikacji przeznaczonego dla aplikacji przeznaczonej dla tablicy deweloperskiej referencyjnej MT3620 (RDB).

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

Poniższy fragment przedstawia sposób określania tego samego kontrolera usługi ADC w aplikacji przeznaczonej dla zestawu startowego Avnet MT3620:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Omówienie implementacji

Aby zaimplementować aplikację na potrzeby uzyskiwania dostępu do usługi ADC, użyj jednego z dwóch podejść:

W tym temacie opisano obie metody. Pełny przykładowy kod dla każdej metody można znaleźć tutaj:

Dostęp do usługi ADC z uproszczonymi funkcjami

Aplikacje wysokiego poziomu usługi Azure Sphere mogą uzyskiwać dostęp do usług ADCs, wywołując interfejsy API usługi ADC dla biblioteki Applibs.

Otwieranie kontrolera usługi ADC

Aby otworzyć kontroler usługi ADC w celu uzyskania dostępu, wywołaj ADC_Open i przekaż identyfikator kontrolera jako parametr. Deskryptor plików zostanie zwrócony, jeśli wywołanie zakończy się pomyślnie. W przeciwnym razie zostanie zwrócona wartość błędu.

int ADC_Open(ADC_ControllerId id);

Odczyt z usługi ADC

Aby odczytać z usługi ADC, wywołaj ADC_Poll. Należy przekazać następujące parametry do ADC_Poll: deskryptor pliku zwrócony przez ADC_Open, kanał usługi ADC i wskaźnik, do którego będzie przechowywana wartość usługi ADC.

Aby uzyskać liczbę prawidłowych bitów (rozdzielczość) zwracanych przez funkcję ADC_Poll, wywołaj ADC_GetSampleBitCount.

Ustawianie napięcia odniesienia usługi ADC

Wywołaj ADC_SetReferenceVoltage , aby ustawić napięcie referencyjne ADC.

Mt3620 ma układ 2,5 wolta. Alternatywnie może być podłączony do zewnętrznego odwołania napięcia, które jest mniejsze lub równe 2,5 wolta.

Dostęp do usługi ADC z funkcjami zaawansowanymi

Alternatywą dla uproszczonych funkcji wysokiego poziomu w celu interakcji z urządzeniami peryferyjnymi można skorzystać z biblioteki ioctl, aby otworzyć funkcje. W tej sekcji wyjaśniono, jak to zrobić i jak korzystanie z ioctls różni się od używania ogólnych funkcji systemu Linux.

Fragment kodu usługi ADC Advanced Functions przedstawia sposób odczytywania usługi ADC przy użyciu zaawansowanych funkcji usługi Azure Sphere.

Na przykład można zobaczyć równoległe porównanie odczytu usługi ADC z uproszczonymi, zaawansowanymi i linux implementacjami systemu sysfs:

Otwieranie kanału usługi ADC

Aby otworzyć kontroler usługi ADC na potrzeby dostępu, użyj wywołania systemu Linux open przekazującego ścieżkę do katalogu, który rozpocznie się od /dev/adc<number> tego, gdzie "number" jest identyfikatorem kontrolera. Deskryptor plików jest zwracany, jeśli wywołanie zakończyło się pomyślnie. W przeciwnym razie zwracana jest wartość błędu.

Zobacz Przykład implementacji, aby zapoznać się z parametrami, uprawnieniami i sprawdzaniem błędów.

Pobieranie specyfikacji kanału

Korzystając z zaawansowanych funkcji, pobierz specyfikację kanału przy użyciu wywołań ioctl przed sondowaniem, ustawiając napięcie odniesienia lub uzyskując przykładową liczbę bitów. Ten krok można pominąć przez stałe kodowanie niektórych uzyskanych wartości, ale nie jest to zalecane. Należy pamiętać, że ten krok jest obsługiwany przez kod podany w prostych funkcjach.


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

Ustawianie napięcia odniesienia

Aby ustawić napięcie referencyjne kanału przy użyciu zaawansowanego interfejsu API:

  1. Ustaw informacje usługi ADC wypełnione w iio_ioctl_chan_spec_buffer strukturze, która została pobrana w specyfikacji pobierania kanału.

  2. Pobierz indeks właściwości właściwości, aby ustawić dla kanału.

  3. Zapisz napięcie odniesienia przy użyciu indeksu właściwości i informacji o specyfikacji kanału.

Aby uzyskać indeks właściwości napięcia referencyjnego:

  1. Ze struktury pobranej iio_ioctl_chan_spec_buffer w sekcji Pobierz specyfikację kanału użyj wartości z channel pola, a z channel pola użyj wartości z ext_info pola. Pole ext_info jest strukturą iio_ioctl_chan_spec_ext_info , która jest nagłówkiem połączonej listy deskryptorów właściwości dla kanału.

  2. Począwszy od 0, przejdź przez listę zliczając węzły, aż name pole będzie zgodne z ciągiem reference_voltage .

    • Każdy węzeł na liście ma pole "dalej", które wskazuje następny węzeł na liście. Ostatni węzeł wskazuje wartość NULL.
    • Wynikowy licznik jest indeksem właściwości .
  3. Aby ustawić napięcie odniesienia, należy użyć IIO_WRITE_CHANNEL_EXT_INFO_IOCTL ioctl, który przyjmuje w strukturę typu iio_ioctl_write_chan_ext_info, która zawiera odpowiednie dane (w tym przypadku napięcie), kanał do ustawienia i konkretną właściwość (napięcie odniesienia), która jest ustawiona dla tego kanału.

Pobieranie przykładowej liczby bitów

Aby ustawić napięcie odniesienia przy użyciu zaawansowanych interfejsów API:

  1. Upewnij się, że otrzymujesz informacje o odpowiednim kanale usługi ADC. Te informacje są wypełniane w iio_ioctl_chan_spec_buffer strukturze pobranej w sekcji Pobierz specyfikację kanału.

  2. Pobierz indeks właściwości właściwości, którą chcesz odczytać dla kanału. W tym przypadku jest to przykładowa liczba bitów.

  3. Użyj ioctls systemu Linux, aby uzyskać przykładową liczbę bitów przy użyciu indeksu właściwości i specyfikacji kanału.

Aby uzyskać indeks właściwości przykładowej liczby bitów, użyj procesu identycznego z ustawieniem napięcia odniesienia. Jednak podczas iteracji na połączonej liście o nazwie ext_info typu iio_ioctl_chan_spec_ext_info, dopasuj ciąg current_bits.

Wywołaj element ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL , aby wypełnić strukturę typu iio_ioctl_read_chan_ext_info niezbędnymi danymi w bufferpolu.

Odczytywanie kanału usługi ADC

Aby odczytać kanał usługi ADC, sonduj przy użyciu wywołania IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl , przekazując strukturę iio_ioctl_raw_channel_info , która zostanie wypełniona danymi z kanału usługi ADC.

Przykładowa implementacja

Aby odczytać usługę ADC przy użyciu zaawansowanej implementacji usługi Azure Sphere, zobacz fragment kodu w przykładzie aplikacji zaawansowanej usługi ADC.

Aby porównać różnice w semantyce między interakcją z urządzeniami peryferyjnymi podczas kodowania dla usługi Azure Sphere i kodowania dla ogólnego systemu Linux, zobacz LinuxSysfsNodes.

Obsługa mt3620

Obsługiwane funkcje usługi ADC dla mt3620 są wymienione w obszarze Stan pomocy technicznej mt3620. Podręcznik użytkownika tablicy deweloperów MT3620 opisuje układ pinezki i funkcje przypinania.

Folder HardwareDefinitions w katalogu instalacyjnym zestawu SDK usługi Microsoft Azure Sphere zawiera definicje typowych tablic deweloperskich, modułów i mikroukładów usługi Azure Sphere. Zawiera on pliki nagłówkowe i JSON, które definiują interfejsy główne dla mt3620, MT3620 RDB, wraz z innym sprzętem MT3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions system Windows i /opt/azurespheresdk/HardwareDefinitions Linux.

Repozytorium przykładów usługi Azure Sphere w usłudze GitHub zawiera pliki nagłówkowe i JSON, które definiują interfejsy główne SPI dla mikroukładu MT3620 i bazy danych RDB MT3620, wraz z innymi sprzętami MT3620.>