상위 수준 애플리케이션에서 ADC 사용

이 항목에서는 고급 애플리케이션에서 ADC(아날로그-디지털 변환기)를 사용하는 방법을 설명합니다. RTApps에서 ADC 사용에 대한 자세한 내용은 실시간 지원 애플리케이션에서 주변 장치 사용을 참조하세요.

Azure Sphere는 아날로그와 디지털 변환을 지원합니다. ADC는 아날로그 입력을 해당 디지털 값으로 변환합니다. 입력 채널 수와 해상도(ADC 출력 비트 수)는 디바이스에 따라 달라집니다.

ADC_HighLevelApp 샘플은 MT3620 디바이스에서 ADC에 액세스하는 방법을 보여 줍니다.

ADC 주변 장치 코드 조각은 간소화된 함수 또는 고급 함수를 사용하여 ADC와 상호 작용하는 두 가지 방법을 보여 줍니다.

MT3620에는 8개의 입력 채널이 있는 12비트 ADC가 포함되어 있습니다. ADC는 입력 전압과 참조 전압을 비교하고 0에서 4095 사이의 값을 출력으로 생성합니다. ADC 입력 채널 및 GPIO 핀 GPIO41~GPIO48 MT3260의 동일한 핀에 매핑됩니다. 그러나 애플리케이션에서 ADC를 사용하는 경우 8개의 핀이 모두 ADC 입력으로 사용하도록 할당됩니다. GPIO에 사용할 수 있는 것은 없습니다.

ADC 요구 사항

ADC와 통신하는 애플리케이션은 adc.h 헤더 파일을 포함하고 애플리케이션 매니페스트에 ADC 설정을 추가해야 합니다.

모든 애플리케이션은 대상 하드웨어를 설정하고 해당 하드웨어 정의 헤더 파일을 포함해야 합니다.

헤더 파일

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

"path-to-your-target-hardware.h"를 하드웨어의 헤더 파일 경로로 바꿉니다.

애플리케이션 매니페스트 설정

애플리케이션 매니페스트의 ADC 설정에는 애플리케이션에서 액세스하는 ADC 컨트롤러가 나열됩니다. 이러한 설정을 구성하려면 애플리케이션 매니페스트에 기능을 추가 Adc 한 다음 각 ADC 컨트롤러를 기능에 추가합니다. Azure Sphere 애플리케이션 매니페스트 항목에는 자세한 내용이 있습니다.

코드에서 하드웨어에 대해 정의된 상수를 사용하여 ADC 컨트롤러를 식별합니다. 컴파일러는 앱을 빌드할 때 이러한 값을 원시 값으로 변환합니다.

예를 들어 MT3620 RDB(참조 개발 보드)를 대상으로 하는 애플리케이션에 대한 애플리케이션 매니페스트에서 발췌한 내용이 여기에 있습니다.

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

다음 발췌문에서는 Avnet MT3620 스타터 키트를 대상으로 하는 애플리케이션에서 동일한 ADC 컨트롤러를 지정하는 방법을 보여 줍니다.

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

구현 개요

ADC에 액세스하기 위한 애플리케이션을 구현하려면 다음 두 가지 방법 중 하나를 사용합니다.

이 항목에서는 두 가지 방법을 모두 설명합니다. 각 메서드에 대한 전체 샘플 코드는 여기에서 찾을 수 있습니다.

간소화된 함수를 사용하여 ADC 액세스

Azure Sphere 상위 수준 애플리케이션은 Applibs ADC API를 호출하여 ADC에 액세스할 수 있습니다.

ADC 컨트롤러 열기

액세스를 위해 ADC 컨트롤러를 열려면 ADC_Open 호출하고 컨트롤러의 ID를 매개 변수로 전달합니다. 호출에 성공하면 파일 설명자가 반환됩니다. 그렇지 않으면 오류 값이 반환됩니다.

int ADC_Open(ADC_ControllerId id);

ADC에서 읽기

ADC에서 읽으려면 ADC_Poll 호출합니다. 다음 매개 변수를 ADC_Poll 전달합니다. ADC_Open 반환된 파일 설명자, ADC 채널 및 ADC 값이 저장될 위치에 대한 포인터입니다.

ADC_Poll 함수에서 반환된 유효한 비트(해상도)의 수를 얻으려면 ADC_GetSampleBitCount 호출합니다.

ADC 참조 전압 설정

ADC_SetReferenceVoltage 호출하여 ADC 참조 전압을 설정합니다.

MT3620에는 온칩 2.5볼트 참조가 있습니다. 또는 2.5볼트보다 작거나 같은 외부 전압 참조에 연결할 수 있습니다.

고급 함수를 사용하여 ADC 액세스

주변 장치와 상호 작용하는 개략적인 간소화된 함수 대신 ioctl 라이브러리를 활용하여 기능을 열 수 있습니다. 이 섹션에서는 이 작업을 수행하는 방법과 ioctls 사용이 일반 Linux 함수 사용과 어떻게 다른지 설명합니다.

ADC Advanced Functions 코드 조각 은 Azure Sphere 고급 함수를 사용하여 ADC를 읽는 방법을 보여 줍니다.

예를 들어 간소화된, 고급 및 Linux sysfs 구현을 사용하여 ADC를 읽는 것과 나란히 비교하는 것을 볼 수 있습니다.

ADC 채널 열기

액세스하기 위해 ADC 컨트롤러를 열려면 'number'가 컨트롤러 ID인 위치로 /dev/adc<number> 시작하는 디렉터리의 경로를 전달하는 Linux open 호출을 사용합니다. 호출에 성공하면 파일 설명자가 반환됩니다. 그렇지 않으면 오류 값이 반환됩니다.

매개 변수, 권한 및 오류 검사는 예제 구현 을 참조하세요.

채널 사양 가져오기

고급 함수를 사용하는 동안 폴링하기 전에 ioctl 호출을 사용하거나 참조 전압을 설정하거나 샘플 비트 수를 가져와 채널 사양을 가져옵니다. 이 단계는 가져온 값 중 일부를 하드 코딩하여 건너뛸 수 있지만 권장되지는 않습니다. 이 단계는 간단한 함수에서 제공하는 코드로 처리됩니다.


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

참조 전압 설정

고급 API를 사용하여 채널의 참조 전압을 설정하려면 다음을 수행합니다.

  1. 채널 가져오기 사양에서 검색된 구조에 iio_ioctl_chan_spec_buffer 채워진 ADC 정보를 설정합니다.

  2. 채널에 대해 설정할 속성의 속성 인덱스 가져오기

  3. 속성 인덱스 및 채널 사양 정보를 사용하여 참조 전압을 작성합니다.

참조 전압 속성의 인덱스 가져오기:

  1. iio_ioctl_chan_spec_buffer채널 가져오기 사양에서 검색된 구조에서 필드의 값을 channel 사용하고 필드에서 channel 필드의 값을 ext_info 사용합니다. ext_info 필드는 채널에 iio_ioctl_chan_spec_ext_info 대한 속성 설명자의 연결된 목록의 머리인 구조체입니다.

  2. 0부터 필드가 문자열과 일치할 때까지 노드를 계산하는 namereference_voltage 목록을 트래버스합니다.

    • 목록의 각 노드에는 목록의 다음 노드를 가리키는 "다음" 필드가 있습니다. 마지막 노드는 NULL을 가리킵니다.
    • 결과 카운터는 속성의 인덱스입니다.
  3. 참조 전압을 설정하려면 관련 데이터(이 경우 전압), 설정할 채널 및 해당 채널에 대해 설정된 특정 속성(참조 전압)을 포함하는 형식iio_ioctl_write_chan_ext_info의 구조체에서 사용하는 ioctl을 사용합니다IIO_WRITE_CHANNEL_EXT_INFO_IOCTL.

샘플 비트 수 가져오기

고급 API를 사용하여 참조 전압을 설정하려면 다음을 수행합니다.

  1. 적절한 ADC 채널의 정보를 가져오고 있는지 확인합니다. 이 정보는 채널 사양 가져오기 섹션에서 검색된 구조로 채워집니다 iio_ioctl_chan_spec_buffer .

  2. 채널에 대해 읽으려는 속성의 속성 인덱스(이 경우 샘플 비트 수)를 가져옵니다.

  3. Linux ioctls를 사용하여 속성 인덱스 및 채널 사양을 사용하여 샘플 비트 수를 가져옵니다.

샘플 비트 수의 속성 인덱스 를 가져오려면 참조 전압 설정과 동일한 프로세스를 사용합니다. 그러나 형식iio_ioctl_chan_spec_ext_info이라는 ext_info 연결된 목록을 반복하는 동안 문자열current_bits과 일치합니다.

ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL 을 호출하여 형식 iio_ioctl_read_chan_ext_info 구조체를 필드에 필요한 데이터 buffer로 채웁다.

ADC 채널 읽기

ADC 채널을 읽으려면 ioctl 호출 IIO_READ_RAW_CHANNEL_INFO_IOCTL을 사용하여 폴링하고 ADC 채널의 데이터로 채워지는 구조 iio_ioctl_raw_channel_info 체를 전달합니다.

구현 예제

Azure Sphere 고급 구현을 사용하여 ADC를 읽으려면 ADC 고급 앱 샘플의 코드 조각을 참조하세요.

Azure Sphere를 코딩할 때 주변 장치와 상호 작용하는 것과 일반 Linux 시스템에 대한 코딩 간의 의미 체계 차이를 비교하려면 LinuxSysfsNodes를 참조하세요.

MT3620 지원

MT3620에 지원되는 ADC 기능은 MT3620 지원 상태에 나열됩니다. MT3620 개발 보드 사용자 가이드에서는 핀 레이아웃 및 핀 함수에 대해 설명합니다.

Microsoft Azure Sphere SDK 설치 디렉터리의 HardwareDefinitions 폴더에는 일반적인 Azure Sphere 개발 보드, 모듈 및 칩에 대한 정의가 포함되어 있습니다. 여기에는 다른 MT3620 하드웨어와 함께 MT3620, MT3620 RDB에 대한 master 인터페이스를 정의하는 헤더 및 JSON 파일이 포함되어 있습니다. HardwareDefinitions 폴더의 기본 위치는 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions Windows 및 /opt/azurespheresdk/HardwareDefinitions Linux에 있습니다.