3D 광학 ToF(Time-of-Flight) 감지 설계를 빠르게 시작하는 방법

작성자: Stephen Evanczuk

DigiKey 북미 편집자 제공

광시간차(ToF) 거리 측정은 산업용 감지, 제스처 기반 사용자 인터페이스 등 다양한 응용 분야에서 기본적인 역할을 합니다. 정확한 고속 다중 픽셀 ToF 센서의 출시로 개발자는 이러한 응용 분야에 필요한 보다 정교한 3D 감지 알고리즘을 구현할 수 있습니다. 하지만 다중 픽셀 광학 감지 서브 시스템의 복잡성으로 인해 개발이 지체됩니다.

이 기사에서는 ToF의 기본 원리를 설명합니다. 그런 다음 개발자가 정확한 1D 및 3D 거리 측정 응용 제품의 시제품을 빠르게 제작하고 맞춤형 광학 ToF 감지 솔루션을 신속하게 구현할 수 있도록 지원하는 Broadcom의 광학 ToF 평가 키트를 소개합니다.

광학 ToF 기술 기본 사항

여러 응용 분야에 필요한 정확한 거리를 얻기 위해 사용되는 광학 ToF 기술은 빛이 공기를 통해 이동하는 데 필요한 시간을 기준으로 측정합니다. 이러한 측정을 수행하는 데 사용되는 구체적인 계산은 일반적으로 직접 ToF 및 간접 ToF라는 두 가지 접근 방식에 따라 달라집니다. 직접 ToF(펄스 거리 측정이라고도 함)에서 장치는 방정식 1을 사용하여 ToF 센서에서 특정 광 펄스를 전송한 시간과 수신한 시간의 간격을 측정합니다.

방정식 1 방정식 1

여기서,

c0 = 진공에서의 빛의 속도

∆T = 전송 후 수신 시점까지 경과한 시간

개념적으로는 간단하지만 이 접근 방식으로 정확하게 측정하려면 강력한 송신기 및 수신기, 신호 대 잡음 향상, 정밀한 펄스 에지 감지 등 다양한 과제에 직면하게 됩니다.

반면 간접 ToF 방법에서는 변조된 지속파를 사용하여 방정식 2에 따라 전송된 신호와 수신된 신호 사이의 위상 차이를 측정합니다.

d = c0 / 2fmod x ∆φ/2π 방정식 2

여기서,

c0 = 진공에서의 빛의 속도

fmod = 레이저 변조 주파수

∆φ = 결정된 위상 차이

송신기와 수신기의 전력 요구 사항을 줄이는 외에도 간접 ToF 접근 방식은 3D 거리 측정 및 동작 감지를 수행하도록 설계 복잡성을 간소화하여 펄스 형상 요구 사항을 완화합니다.

직접 방법과 간접 방법은 모두 광학 프런트 엔드를 주의해서 설계하고 송신기 신호와 수신기 신호를 정밀하게 제어해야 합니다. 수년 동안 개발자는 송신 장치와 수신 장치를 단일 패키지로 결합하는 통합 광학 ToF 센서를 활용할 수 있었습니다. 그럼에도 불구하고 이전 세대 장치의 경우 개발자는 일반적으로 전력 소비, 범위, 정확도, 속도 등 일부 성능 또는 작동 특성 조합을 트레이드 오프해야 했습니다. 그런 타협은 최대 10m 범위의 중거리에서 작동해야 하는 증가하는 산업용 감지 분야에서 주요 장애물로 부상했습니다.

Broadcom의 AFBR-S50MV85G와 같은 고급 간접 ToF 센서 모듈은 최소 패키지 크기와 전력 소비를 유지하면서 중거리 범위에서 정확한 고속 결과에 대한 증가하는 요구를 해결하기 위해 특별히 설계되었습니다. 이 센서를 기반으로 하는 Broadcom의 AFBR-S50MV85G-EK 평가 키트 및 관련 소프트웨어 개발 키트(SDK)는 다중 픽셀 ToF 센서 개발 플랫폼을 제공하여 개발자가 3D ToF 감지 응용 제품을 빠르게 구현할 수 있도록 지원합니다.

통합 모듈에서 ToF 거리 측정을 간소화하는 방법

산업용 감지 분야에 맞게 개발된 AFBR-S50MV85G 모듈은 단일 패키지에서 전체 광학 ToF 감지 솔루션을 제공합니다. 이 모듈에는 적외선(IR) 조명을 위한 850nm 수직 캐비티 표면 광방출 레이저(VCSEL), 육각형 32픽셀 센서 매트릭스, VCSEL 및 센서 광학용 통합 렌즈, 주문형 반도체(ASIC)가 부품으로 통합되어 있습니다.

감지 매트릭스를 기준으로 고정 위치에 정렬되는 송신기는 대상 물체를 비추어 감지 매트릭스의 일부 픽셀이 반사된 IR 신호를 감지하도록 합니다. 기본 작동에서 이 기능을 활용하면 내장된 주변광 억제 기능 덕분에 직사광선에서도 모듈에서 흰색, 검은색, 컬러, 금속색 또는 반사면까지 정확한 거리를 측정할 수 있습니다.

물체까지의 거리가 감소하면 시차 오류가 자동으로 보정되므로 사실상 거리 하한 없이 측정할 수 있습니다. 이와 동시에 IR 조명과 감지 매트릭스를 조합하여 동작, 속도, 경사각, 측면 정렬 등 물체에 대한 추가 정보를 이용할 수 있습니다. 따라서 이 모듈은 통과하거나 접근하는 대상 물체의 방향과 속도를 결정하는 데 필요한 데이터를 제공할 수 있습니다(그림 1).

Broadcom AFBR-S50MV85G 모듈의 8 x 4 픽셀 감지 매트릭스에서 수집되는 데이터의 구성도(확대하려면 클릭)그림 1: AFBR-S50MV85G 모듈의 8 x 4 픽셀 감지 매트릭스에서 수집되는 데이터를 사용하여 개발자는 물체 이동 특성을 측정 가능한 3D 응용 제품을 구현할 수 있습니다. (이미지 출처: Broadcom)

VCSEL 및 감지 매트릭스의 정밀한 작동을 조율하여 모듈에 내장된 ASIC는 VCSEL 구동, 감지 매트릭스의 아날로그 신호 캡처, 디지털 신호 조정 등에 필요한 모든 회로망을 제공합니다(그림 2).

Broadcom의 AFBR-S50MV85G 모듈에 통합된 ASIC 구성도그림 2: AFBR-S50MV85G 모듈에 통합된 ASIC에는 모듈의 VCSEL 광원을 구동하고, 감지 매트릭스에서 수신된 신호를 획득하고, SPI 버스를 통해 전송하기 위한 디지털 신호를 생성하는 데 필요한 모든 회로망이 포함되어 있습니다. (이미지 출처: Broadcom)

ASIC의 통합 공급 회로망을 사용하면 모듈에서 단일 5V 공급 장치를 작동할 수 있으며, 통합된 출고 시 보정형 및 온도 보정형 저항기 커패시터(RC) 발진기 및 디지털 위상 고정 루프(PLL)는 모든 필요한 클록 신호를 제공합니다. 이러한 통합 덕분에 개발자는 마이크로 컨트롤러 장치(MCU)와 일부 추가적인 외부 부품을 사용하여 모듈을 설계에 쉽게 통합할 수 있습니다. MCU와 연결하려면, 모듈의 데이터 기반 신호를 위한 범용 입/출력(GPIO) 핀만 필요하며 모듈의 디지털 신호 주변 장치 인터페이스(SPI)를 통해 연결하면 됩니다(그림 3).

Broadcom의 AFBR-S50MV85G 모듈 구성도(확대하려면 클릭)그림 3: Broadcom의 AFBR-S50MV85G 모듈은 전체 ToF 감지 시스템을 구현하는 데 MCU와 일부 추가 부품만 있으면 됩니다. (이미지 출처: Broadcom)

간단한 이 하드웨어 설계를 보완하여 거리 측정을 구현하는 데 필요한 관련 소프트웨어 기능은 모두 Broadcom의 ToF 드라이버 소프트웨어에서 제공됩니다. 이 모듈은 거리 측정 분야를 위한 광학 데이터 수집을 처리하지만 Broadcom AFBR-S50 SDK에 포함된 Broadcom ToF 드라이버 소프트웨어는 모든 하드웨어 구성, 보정 및 측정 단계를 수행합니다. 측정 중에 드라이버 소프트웨어는 픽셀의 거리 값과 진폭 값을 모두 추출합니다.

거리 측정 응용 제품을 빠르게 개발하는 방법

AFBR-S50 SDK와 결합된 Broadcom의 AFBR-S50MV85G-EK 평가 키트는 거리 측정 응용 제품을 빠르게 개발하고 시제품을 제작하기 위한 포괄적인 플랫폼을 제공합니다. 키트에는 AFBR-S50MV85G 모듈을 포함하는 어댑터 기판, Arm Cortex-M0+ MCU를 기반으로 하는 NXP FRDM-KL46Z 평가 기판, 평가 기판 어셈블리를 랩톱 또는 다른 내장형 시스템에 연결하기 위한 mini-USB 케이블이 함께 제공됩니다(그림 4).

Broadcom의 AFBR-S50MV85G-EK 평가 키트 이미지그림 4: Broadcom의 AFBR-S50MV85G-EK 평가 키트 및 연결된 소프트웨어는 ToF 거리 측정 응용 제품을 평가하고 시제품을 제작하는 데 완벽한 플랫폼을 제공합니다. (이미지 출처: Broadcom)

평가 키트를 사용하여 ToF 거리 측정을 시작하려면 몇 가지 단계만 수행하면 됩니다. AFBR-S50 SDK를 다운로드하면 설치 마법사가 빠른 설치 절차를 안내합니다. 개발자가 SDK 패키지에 포함된 Broadcom의 AFBR-S50 Explorer 소프트웨어 응용 제품을 시작하면, 소프트웨어가 USB 인터페이스를 통해 AFBR-S50 평가 기판에 연결되고, NXP 기판의 MCU에서 실행 중인 드라이버 소프트웨어를 통해 측정 데이터를 수신하고, 사용자가 1D 또는 3D 그래프로 결과를 표시하도록 허용합니다(그림 5).

Broadcom의 AFBR-S50 Explorer 소프트웨어 이미지(확대하려면 클릭)그림 5: AFBR-S50 Explorer 소프트웨어는 ToF 센서 매트릭스의 각 픽셀에 대해 수신된 조명 진폭을 보여주는 3D 그래프를 통해 ToF 측정에 대한 평가를 간소화합니다. (이미지 출처: Broadcom)

그림 5와 같이 3D 그래프 뷰에는 각 픽셀의 판독 값이 표시되지만, 개발자가 측정에 유효한 것으로 간주되는 픽셀만 볼 수 있도록 소프트웨어는 대체 뷰를 제공합니다. 이 대체 뷰에서 정의된 기준을 충족하지 않는 픽셀은 그래프에서 삭제됩니다(그림 6).

Broadcom의 AFBR-S50 Explorer 소프트웨어 이미지(확대하려면 클릭)그림 6: Broadcom의 AFBR-S50 Explorer 소프트웨어를 사용하면 개발자는 미리 정의된 기준에 맞지 않는 픽셀을 제거한 간소화된 측정 3D 그래프를 볼 수 있습니다. (이미지 출처: Broadcom)

조명, 반사율, 표면 유형과 같은 다양한 응용 시나리오에서 측정 정확도와 성능을 살펴보기 위해 개발자는 고급 3D 응용 제품에 더 많은 픽셀을 사용하거나, 더 정밀한 측정이 필요한 1D 응용 제품에 더 적은 픽셀을 사용하는 등 다양한 감지 구성의 영향을 확인할 수 있습니다. 시제품에서 측정 방법을 평가한 후 개발자는 Broadcom의 AFBR-S50 SDK에 포함된 샘플 소프트웨어를 기반으로 빌드하여 맞춤형 ToF 감지 응용 제품을 빠르게 구현할 수 있습니다.

맞춤형 ToF 감지 소프트웨어 응용 제품 빌드

Broadcom은 센서 하드웨어 관련 코드, 응용 프로그래밍 인터페이스(API), 하드웨어 추상화 계층(HAL)으로 구성된 AFBR-S50 코어 라이브러리를 기반으로 효과적인 아키텍처 관련 ToF 감지 응용 제품 지원을 빌드합니다(그림 7).

Broadcom의 ToF 운영 환경 구성도그림 7: Broadcom의 ToF 운영 환경에서 ToF 드라이버 API는 사전 컴파일된 ToF 드라이버 코어 라이브러리에서 보정, 측정 및 평가 기능에 액세스할 수 있는 응용 코드를 사용자에게 제공합니다. (이미지 출처: Broadcom)

AFBR-S50 SDK 패키지의 일부로 Broadcom은 AFBR-S50MV85G 하드웨어를 실행하는 데 필요한 모든 데이터 및 알고리즘이 내장된 사전 컴파일된 ANSI-C 라이브러리 파일로 코어 라이브러리를 제공합니다. 거리 측정 시스템의 MCU에서 실행되는 코어 라이브러리는 최소한의 처리 부하 또는 전력 소비로 거리 측정을 수행하기 위해 보정, 측정, 평가를 비롯한 기능을 제공합니다. 코어 라이브러리 기능은 모든 기본 정보를 처리하므로 개발자에게 표시되는 기본 측정 주기는 간단합니다(그림 8).

Broadcom의 AFBR-S50 SDK ToF 소프트웨어 이미지(확대하려면 클릭)그림 8: AFBR-S50 SDK ToF 소프트웨어는 가동 인터럽트 및 콜백을 사용하여 프로세서 워크로드를 최소화합니다. (이미지 출처: Broadcom)

정기 타이머 인터럽트 또는 IRQ에 의해 각 측정 주기가 시작되면 MCU는 측정을 시작한 후 유휴 상태로 즉시 돌아가거나 일부 응용 코드를 지속적으로 처리합니다. 측정이 완료되면 AFBR-S50MV85G 모듈에서 연결된 GPIO 라인을 사용하여 인터럽트에 MCU를 깨워서 SPI 버스에서 데이터 판독을 시작한 후 이전 상태로 되돌아가라는 신호를 보냅니다. SPI 완료 IRQ의 신호에 따라 데이터 판독이 완료되면 MCU는 코드를 실행하여 수신된 ToF 센서 데이터를 평가합니다.

측정 데이터가 손실되지 않도록 코어 라이브러리에서는 평가 루틴이 호출될 때까지 데이터 버퍼를 차단하여 새로운 측정 주기가 시작되지 않도록 합니다. 따라서 개발자는 측정 및 평가 작업의 인터리브 실행을 허용하기 위해 원시 데이터에 대한 이중 버퍼를 포함하는 것이 일반적입니다.

응용 소프트웨어 개발자의 경우 코어 라이브러리 루틴은 보정, 측정 및 평가에 대한 세부 정보를 보호합니다. 실제로 개발자는 평가 키트와 AFBR-S50 Explorer 응용 제품을 전체 시제품 제작 플랫폼으로 사용하여 상위 수준 소프트웨어 응용 코드에 측정 데이터를 제공할 수 있습니다.

맞춤형 응용 소프트웨어를 구현해야 하는 개발자의 경우 AFBR-S50 SDK 패키지는 미리 컴파일된 코어 라이브러리 모듈을 여러 소프트웨어 예제와 결합합니다. 따라서 개발자는 SDK에 제공된 샘플 응용 제품을 기반으로 고유한 ToF 감지 응용 제품을 빠르게 생성할 수 있습니다. 개발자는 AFBR-S50 SDK API에서 함수를 호출하고 코어 라이브러리에서 지원되는 다양한 콜백에 대해 고유한 함수를 지정하여 응용 분야별 소프트웨어 코드에서 AFBR-S50MV85G 하드웨어 및 AFBR-S50 코어 라이브러리 기능에 액세스할 수 있습니다(그림 7 참조).

개발자가 필요에 따라 소프트웨어 예제를 빠르게 채택하거나 처음부터 시작할 수 있도록 Broadcom은 API 및 샘플 소프트웨어에 대한 포괄적인 설명서를 제공합니다. 실제로 기본 측정 및 평가 주기는 간단하며, 맞춤형 기능 및 API 호출을 측정 주기와 대응시키면 됩니다(그림 8 참조). 예를 들어 앞서 설명한 측정 주기는 ToF 장치 통합, 데이터 판독, 평가의 3단계로 구성되어 있습니다. 이 3단계를 시작하는 데 필요한 코어 라이브러리 API 호출에는 다음이 포함됩니다.

  • Argus_TriggerMeasurement(): 단일 측정 프레임을 비동기적으로 트리거합니다.
  • Argus_GetStatus(): 측정이 성공적으로 완료되면 STATUS_OK를 반환합니다.
  • Argus_EvaluateData(): 원시 측정 데이터에서 유용한 정보를 평가합니다.

Broadcom은 목록 1과 같이 SDK 배포에 포함된 샘플 응용 제품에서 이 기본 측정 루프를 시연합니다.

복사
int main(void)
{
   status_t status = STATUS_OK;
   
   /* Initialize the platform hardware including the required peripherals
   * for the API. */
   hardware_init();
   
   /* The API module handle that contains all data definitions that is
   * required within the API module for the corresponding hardware device.
   * Every call to an API function requires the passing of a pointer to this
   * data structure. */
   argus_hnd_t * hnd = Argus_CreateHandle();
   handle_error(hnd ? STATUS_OK : ERROR_FAIL, "Argus_CreateHandle failed!");
   
   /* Initialize the API with default values.
   * This implicitly calls the initialization functions
   * of the underlying API modules.
   *
   * The second parameter is stored and passed to all function calls
   * to the S2PI module. This piece of information can be utilized in
   * order to determine the addressed SPI slave and enabled the usage
   * of multiple devices on a single SPI peripheral. */
   
   status = Argus_Init(hnd, SPI_SLAVE);
   handle_error(status, "Argus_Init failed!");
   
   /* Print some information about current API and connected device. */
   uint32_t value = Argus_GetAPIVersion();
   uint8_t a = (value >> 24) & 0xFFU;
   uint8_t b = (value >> 16) & 0xFFU;
   uint8_t c = value & 0xFFFFU;
   uint32_t id = Argus_GetChipID(hnd);
   argus_module_version_t mv = Argus_GetModuleVersion(hnd);
   print("\n##### AFBR-S50 API - Simple Example ##############\n"
   " API Version: v%d.%d.%d\n"
   " Chip ID: %d\n"
   " Module: %s\n"
   "##################################################\n",
   a, b, c, id,
   mv == AFBR_S50MV85G_V1 ? "AFBR-S50MV85G (v1)" :
   mv == AFBR_S50MV85G_V2 ? "AFBR-S50MV85G (v2)" :
   mv == AFBR_S50MV85G_V3 ? "AFBR-S50MV85G (v3)" :
   mv == AFBR_S50LV85D_V1 ? "AFBR-S50LV85D (v1)" :
   mv == AFBR_S50MV68B_V1 ? "AFBR-S50MV68B (v1)" :
   mv == AFBR_S50MV85I_V1 ? "AFBR-S50MV85I (v1)" :
   mv == AFBR_S50SV85K_V1 ? "AFBR-S50SV85K (v1)" :
   "unknown");
      
/* Adjust some configuration parameters by invoking the dedicated API methods. */
   status = Argus_SetConfigurationFrameTime( hnd, 100000 ); // 0.1 second = 10 Hz
   handle_error(status, "Argus_SetConfigurationFrameTime failed!");
   
   /* The program loop ... */
   for (;;)
   {
      myData = 0;
      /* Triggers a single measurement.
      * Note that due to the laser safety algorithms, the method might refuse
      * to restart a measurement when the appropriate time has not been elapsed
      * right now. The function returns with status #STATUS_ARGUS_POWERLIMIT and
      * the function must be called again later. Use the frame time configuration
      * in order to adjust the timing between two measurement frames. */
      Argus_TriggerMeasurement(hnd, measurement_ready_callback);
      handle_error(status, "Argus_StartMeasurementTimer failed!");
      STATUS_ARGUS_POWERLIMIT)
      {
         /* Not ready (due to laser safety) to restart the measurement yet.
         * Come back later. */
         continue;
      }
      else
      {
         /* Wait until measurement data is ready. */
      do
         {
            status = Argus_GetStatus(hnd);
         }
         while (status == STATUS_BUSY);
         handle_error(status, "Waiting for measurement data ready (Argus_GetStatus) failed!");
         /* The measurement data structure. */
         argus_results_t res;
         
         /* Evaluate the raw measurement results. */
         status = Argus_EvaluateData(hnd, &res, (void*) myData);
         handle_error(status, "Argus_EvaluateData failed!");
         
         /* Use the obtain results, e.g. print via UART. */
         print_results(&res);
         }
      }
}

목록 1: Broadcom AFBR-S50 SDK 배포의 샘플 코드는 AFBR-S50MV85G 에서 ToF 데이터를 수집하여 평가하기 위한 기본 설계 패턴을 시연합니다. (코드 출처: Broadcom)

목록과 같이 세 API 함수 호출에 대해서는 앞서 측정 주기 실행 백본에서 언급했습니다. SDK에서 API 설명서와 기타 샘플 응용 제품을 조사하여 개발자는 대상 물체의 속도, 방향 및 경사각과 같은 고급 특성을 결정하는 데 필요한 데이터를 제공하는 모델 기능을 사용하여 복잡한 3D 응용 제품을 빠르게 구현할 수 있습니다.

결론

광학 ToF 감지 장치는 정밀한 거리 측정이 필요한 다양한 세그먼트에 적용할 수 있지만, 측정 범위, 정확도 또는 신뢰성 제한으로 인해 더 긴 범위에서 정확한 결과를 제공할 수 있는 저전력 장치가 필요한 산업용 감지 시스템과 같은 응용 분야로 확장되지 못했습니다. Broadcom의 통합 광학 ToF 서브 시스템은 차세대 감지 응용 분야에 대해 새롭게 등장하는 요구 사항을 충족합니다. 이 장치를 기반으로 평가 키트를 사용하여 개발자는 1D 거리 측정 분야의 정밀 측정과 3D 응용 분야의 복잡한 물체 이동 추적을 위한 시스템을 빠르게 구현할 수 있습니다.

DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

작성자 정보

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk는 전자 산업에 관해 하드웨어, 소프트웨어, 시스템, 응용 제품(예: IoT)을 비롯한 광범위한 주제에 대해 20년 이상 집필한 경력을 갖고 있습니다. 그는 신경 과학의 뉴런 네트워크 박사 학위를 받았으며항공 우주 산업 분야의 광범위하게 분포된 보안 시스템 및 알고리즘 가속 메서드 관련 업무를 수행했습니다. 현재, 기술 및 엔지니어링에 대해 기사를 쓰지 않을 때에는 인식 및 추천 시스템에 대한 심층적 학습 응용 프로그램을 연구하고 있습니다.

게시자 정보

DigiKey 북미 편집자