Udostępnij za pośrednictwem


Używanie adcs w aplikacjach wysokiego poziomu

W tym temacie opisano, jak używać konwerterów analogowo-cyfrowych (ADCs) w aplikacji wysokiego poziomu. Zobacz Używanie urządzeń peryferyjnych w aplikacji obsługowej w czasie rzeczywistym, aby uzyskać informacje na temat używania usługi ADC w usłudze RTApps.

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

Przykład ADC_HighLevelApp pokazuje, jak uzyskiwać dostęp do komputerów ADCs na urządzeniu MT3620.

Fragmenty elementów peryferyjnych usługi ADC przedstawiają dwa sposoby interakcji z komputerami ADC przy użyciu funkcji uproszczonych lub zaawansowanych .

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 produkuje wartość z przedziału od 0 do 4095 jako wartość wyjściową. Kanały wejściowe ADC i gpio przypina gpio41 do GPIO48 mapować do tych samych pinezki na MT3260. Jeśli jednak aplikacja korzysta z usługi ADC, wszystkie 8 pinów zostanie przydzielonych do użycia jako dane wejściowe ADC. Żadna z nich nie może być używana dla obiektu GPIO.

Wymagania usługi ADC

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

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

Pliki nagłówków

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

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

Ustawienia manifestu aplikacji

Ustawienie ADC w manifeście aplikacji zawiera listę kontrolerów usługi ADC, do których uzyskuje dostęp aplikacja. Aby skonfigurować te ustawienia, dodaj Adc możliwość do manifestu aplikacji, a następnie dodaj każdy kontroler ADC do funkcji. Temat manifestu aplikacji Azure Sphere zawiera więcej szczegółów.

W kodzie użyj stałych zdefiniowanych dla sprzętu, aby zidentyfikować kontrolery ADC. Kompilator przetłumaczy te wartości na wartości raw podczas tworzenia aplikacji.

Na przykład oto fragment manifestu aplikacji dla aplikacji, która jest skierowana do tablicy deweloperów odwołań MT3620 (RDB).

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

Poniższy fragment przedstawia sposób określania tego samego kontrolera ADC w aplikacji docelowej 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 jednej z dwóch metod:

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

Dostęp usługi ADC z uproszczonymi funkcjami

Aplikacje wysokiego poziomu Azure Sphere mogą uzyskiwać dostęp do dokumentów ADCs, wywołując interfejsy API usługi ADC applibs.

Otwieranie kontrolera usługi ADC

Aby otworzyć kontroler ADC w celu uzyskania dostępu, wywołaj ADC_Open i przekaż identyfikator kontrolera jako parametr. Jeśli połączenie zakończy się pomyślnie, zostanie zwrócony deskryptor pliku. W przeciwnym razie zostanie zwrócona wartość błędu.

int ADC_Open(ADC_ControllerId id);

Czytanie z usługi ADC

Aby czytać z usługi ADC, wywołaj ADC_Poll. Przekazujesz następujące parametry do ADC_Poll: deskryptor pliku zwracany przez ADC_Open, kanał ADC i wskaźnik do miejsca przechowywania wartości ADC.

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

Ustawianie napięcia odniesienia ADC

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

Mt3620 ma wiór o napięciu 2,5 V. Alternatywnie można go podłączyć do zewnętrznego odniesienia napięcia, które jest mniejsze lub równe 2,5 V.

Dostęp usługi ADC z funkcjami zaawansowanymi

Alternatywą dla funkcji uproszczonych wysokiego poziomu do interakcji z urządzeniem peryferyjnym, można skorzystać z biblioteki ioctl, aby otworzyć funkcję. W tej sekcji wyjaśniono, jak to zrobić i czym różni się używanie ioctls od używania ogólnych funkcji systemu Linux.

Wstawka funkcji zaawansowanych usługi ADC pokazuje, jak czytać usługę ADC przy użyciu zaawansowanych funkcji Azure Sphere.

Na przykład można zobaczyć porównanie obok siebie czytania ADC z uproszczonymi, zaawansowanymi i linuxowymi implementacjami sysfs:

Otwieranie kanału usługi ADC

Aby otworzyć kontroler ADC w celu uzyskania dostępu, użyj połączenia z systemem Linux open przechodzącego ścieżką do katalogu, która rozpocznie się od /dev/adc<number> miejsca, w którym "numer" jest identyfikatorem kontrolera. Jeśli połączenie zakończyło się pomyślnie, zostanie zwrócony deskryptor pliku. W przeciwnym razie jest zwracana wartość błędu.

Zobacz Przykład implementacji parametrów, uprawnień i sprawdzania błędów.

Uzyskiwanie specyfikacji kanału

Podczas korzystania z funkcji zaawansowanych, uzyskać specyfikację kanału za pomocą wywołań ioctl przed sondowaniem, ustawienie napięcia odniesienia lub uzyskanie liczby bitów próbki. Ten krok można pominąć przez twarde 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 odniesienia kanału przy użyciu zaawansowanego interfejsu API:

  1. Ustaw informacje usługi ADC wypełnione strukturą pobraną iio_ioctl_chan_spec_buffer w specyfikacji get channel.

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

  3. Napisz napięcie odniesienia, korzystając z informacji o indeksie właściwości i specyfikacji kanału.

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

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

  2. Rozpoczynając od 0, przechodzij przez listę zliczania węzłów, aż name pole będzie zgodne z ciągiem reference_voltage .

    • Każdy węzeł na liście ma "następne" pole wskazujące następny węzeł na liście. Ostatni węzeł wskazuje wartość NULL.
    • Licznik wyniku 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 strukturze typu iio_ioctl_write_chan_ext_info, który zawiera odpowiednie dane (w tym przypadku napięcia), kanału do ustawienia, a konkretna właściwość (napięcie odniesienia), która jest ustawiona dla tego kanału.

Uzyskiwanie 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 strukturze pobranej iio_ioctl_chan_spec_buffer w sekcji Pobierz specyfikację kanału.

  2. Pobierz indeks właściwości, którą chcesz odczytać dla kanału, który w tym przypadku jest liczbą bitów przykładowych.

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

Aby uzyskać indeks właściwości licznika bitów próbek, należy użyć procesu identycznego z ustawieniem napięcia odniesienia. Jednak podczas iteracji nad połączoną listą o nazwie ext_info typ iio_ioctl_chan_spec_ext_info, uwzględnij ciąg current_bits.

Wywołaj ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL , aby wypełnić strukturę typu iio_ioctl_read_chan_ext_info niezbędnymi danymi bufferw polu.

Odczytywanie kanału usługi ADC

Aby odczytać kanał ADC, ankieta przy użyciu wywołania IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl , przechodząc w strukturze iio_ioctl_raw_channel_info , które zostaną wypełnione danymi z kanału ADC.

Przykład implementacji

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

Aby porównać różnice w semantyce między interakcją z urządzeniem peryferyjnym podczas kodowania w usłudze Azure Sphere a kodowaniem dla ogólnego systemu Linux, zobacz LinuxSysfsNodes.

Pomoc techniczna mt3620

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

Folder HardwareDefinitions w katalogu instalacji zestawu Microsoft Azure Sphere SDK zawiera definicje typowych tablic programistycznych, modułów i mikroukładów Platformy Azure Sphere. Zawiera ona pliki nagłówków i JSON definiujące interfejsy główne bazy danych MT3620, MT3620 RDB oraz inne sprzętowe mt3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions system Windows i /opt/azurespheresdk/HardwareDefinitions Linux.