VL53L5CX ToFセンサの使用方法

VL53L5CXは、4 × 4または8 × 8ゾーンの測距データを生成できるマルチゾーン測距ToF(Time-of-Flight)センサです。各ゾーンは最大4つのターゲットを検出し、最大4メートルの距離測定が可能です。最大測距周波数は、4 × 4分解能で構成された場合は60Hz、8 × 8分解能で構成された場合は15Hzとなります。このドライバは、カバーガラス使用時のクロストーク補正、低消費電力動作のための物体閾値検出、および動き検出など多くの追加機能をサポートしています。

demo_animation

VL53L5CX用のドライバは2種類あります。ULD APIは、基本的な機能を実現するために必要な3つのファイルのみから構成される、最小限に最適化されたC関数のコレクションです。一方、X-CUBE-TOF1拡張ソフトウェアパッケージには、複数の抽象化レイヤやサンプルアプリケーションが含まれており、X-NUCLEO-53L5A1拡張ボードVL53L5CS-SATELサテライトボードを使ったプロトタイピングに最適です。X-CUBE-TOF1パッケージは、STM32CubeMXコードコンフィギュレータソフトウェアによく統合されており、UM2853に詳細なスタートアップ手順が記載されています。したがって、この記事ではULD APIに焦点を当て、プロジェクトにドライバを追加するために必要な手作業を説明します。また、最後のセクションでは、上記のアニメーションで示されたサンプルプロジェクトを再現するためのリソースを提供しています。

デバイスの設定

  1. まだの場合は、STM32CubeIDEプロジェクトを新規に作成します
    File > New > STM32 Project)。MCU/MPUセレクタまたはボードセレクタタブを使用して、ターゲットデバイスを選択します。このチュートリアルでは、NUCLEO-F401RE開発ボードを選択しました。プロジェクト名を付けて、Finishをクリックします。
  2. Device Configurator Tool(必要に応じて.iocファイルをダブルクリックして起動します)を使用して、VL53L5CXセンサのハードウェアインターフェースを設定します。まず、デバイスのGPIOピンをI2Cインスタンス、外部割り込み信号、およびイネーブル/リセットライン用にピンアウト画面で設定します。今回は、X-NUCLEO-53L5A1拡張ボードのセンターモジュールを使用したため、UM2889の図2に記載されている回路図に基づき設定しました(表1参照)。私の最終的なピン配置は、図1の通りです。

表1. X-NUCLEO-53L5A1拡張ボードのセンターモジュール用GPIO設定表

X-NUCLEO-53L5CX Signal Name Arduino Pin NUCLEO-F401RE Pin Pin Configuration
I2C_RST_C D3 PB3 GPIO_Output
LPn_C D5 PB4 GPIO_Output
PWR_EN_C A3 PB0 GPIO_Output
INT_C A2 PA4 GPIO_EXTIx
SCL D15 PB8 I2Cx_SCL
SDA D14 PB9 I2Cx_SDA

                図1. 表1の信号に対応するピン配置の変化

  1. 左のComponents Listから、前のステップで設定したSDAとSCLのピンに対応するI2Cペリフェラルを選択します。私のデバイスの場合は、I2C1を選択しました。 Modeパネルで、I2Cの設定のためにドロップダウンリストから「I2C」を選択します。この操作を行うと、ピンアウト画面のSDAとSCLのピンが黄色から緑色に変わることに注意してください。Configurationパネルで、I2C Speed Modeの設定のためドロップダウンリストから「Fast Mode」を選択します。最終的なI2Cの設定は、図2のようになります。

図2. VL53L5CXセンサのI2C設定

  1. COMPONENTS List から GPIO peripheralを選択し、PWR_EN_CとLPn_C ピンのGPIO出力レベルを 「High」に変更します(図3 参照)。オプションで、設定したピンに対応するユーザーラベルを追加すると、分かりやすくなります。

図3: VL53L5CXセンサのGPIO設定

  1. NVICタブで、図4に示すように、INT_Cピンに対応するEXTIラインの横にあるボックスにチェックを入れ ます。

図4. VL53L5CXのINT信号に対応する外部割込みを有効にする

  1. .iocファイルを保存して、プロジェクト用のコードを生成します。

ドライバを追加する

今回もVL53L5CX ULD APIの追加と活用方法について説明します。 X-CUBE-TOF1パッケージを使用したい場合は、UM2853に記載されている手順に従ってください。

  1. ULD APIをダウンロードし、任意の場所に解凍してください。本稿執筆時点では、バージョン1.3が最新版です。
  2. STM32CubeIDEで、Project ExplorerのDriversフォルダを右クリックし、Importを選択します。Import Wizardを使用して、GeneralカテゴリからFile Systemを選択します。 Nextをクリックします。
  3. 「From Directory:」フィールドに ULD ドライバのパスを入力します。<extraction_location>\en.VL53L5CX_ULD_v1.3.0\VL53L5CX_ULD_driver_1.3.0.
    図5のように、VL53L5CX_ULD_APIディレクトリにあるすべてのリソースを選択します。
    Finishをクリックします。

図5. VL53L5CX ULDドライバのインポート

  1. Project ExplorerのDrivers/VL53L5CX_ULD_API/incディレクトリを右クリックします。
    Add/remove include path…を選択し、OKをクリックします。

  2. サンプルのプラットフォームファイルをコピーして、プロジェクトに貼り付けます。

  • コピー
    <extraction_location>/en.VL53L5CX_ULD_v1.3.0/VL53L5CX_ULD_driver_1.3.0/CubeIDE_F401RE_Example/Core/Inc/platform.hをコピーし、Core/Incに貼り付けます。

  • コピー
    <extraction_location>/en.VL53L5CX_ULD_v1.3.0/VL53L5CX_ULD_driver_1.3.0/CubeIDE_F401RE_Example/Core/Inc/platform.cをコピーし、Core/Srcに貼り付けます。

ディレクトリ構造に加えられた変更は、以下の図6に示されています。ドライバの使用を開始するには、main.cファイルのPrivate includesセクションに#include "vl53l5cx_api.h"という行を追加してください。これでプロジェクトは正常に構築されます。

ide_projStruct

図6. プラットフォームファイル

アプリケーション例

冒頭のアニメーションは、8 x 8 NeoPixelマトリックスを使った簡単なアプリケーションの例です。図7にハードウェアのセットアップの静止画を示します。外部5V(2A)電源はNucleo BoardのE5Vに接続され、+5VピンがNeoPixelマトリックスに電力を供給します。PB10ピン(ArduinoヘッダのD6)はNeoPixelの制御信号を供給するため、マトリックスのDINに接続されています。NeoPixel制御信号の生成に関する詳細については、 Controlling NeoPixels with STM32(STM32でNeoPixelを制御する)を参照してください。

図7. アプリケーション写真


Nucleoボードの電源を入れるには、適切なスタートアップ・シーケンスに従わなければなりません!

  1. JP5がE5Vの位置(ピン2 - 3間)であることを確認してください。
  2. JP1が取り外されていることを確認してください。
  3. 外部5V電源を接続し、電源を入れてください。
  4. LD3がオンになっていることを確認してください。
  5. ST-LINK USBコネクタ(CN1)にPCを接続してください。

基板を損傷しないようにするため、外部電源を使用する前に、UM1724の6.3項を読むことを強くお勧めします!

このアプリケーションのmain.cファイルはGitHub Repositoryで公開されています。なお、printf文は、STM32でprintfを簡単に使うで説明した方法で有効にしています。



オリジナル・ソース(English)