BTE010 ショップページへ
BTE011 ショップページへ
本装置はST社製VL53L1X(赤外光の反射時間を測定する事で測距するセンサモジュール)を使用した非接触測距センサです。
VL53L1XとCPU及び周辺回路を搭載し、CPUのファームウェアを書き換える事により、対象との測距データをデジタルパケットで取得したり、ホストレスで単体で距離をアナログ電圧に変換して出力させるといった運用ができます。
商品番号 | ToFセンサ(TTL) | BTE010 |
ToFセンサ(RS485) | BTE011 | |
主要コンポーネント | MPU | LPC845M301JHI33 |
センサ | VL53L1X | |
(評価版)VL53L0X | ||
DAC | (評価版)MCP4726A0T-E/CH | |
リビジョン | E141 | |
動作温度範囲 | -20~+70℃ (結露無きこと) | |
保存温度範囲 | -40~+85℃ (結露無きこと) | |
電源電圧 | DC5.6~45V (絶対最大定格:±50V) | |
最大消費電力 | 0.4W | |
レーザー安全基準 | IEC 60825-1:CLASS 1 | |
IR中心波長 | 940nm | |
推奨検出距離 | 20~4000mm | |
(評価版)20~1200mm | ||
コマンドシグナル | デジタルパケット | |
プロトコル | 半二重非同期通信 8-1-N | |
リンク方式 | ToFセンサ(TTL) | 1ワイヤ双方向 |
ToFセンサ(RS485) | RS-485 | |
通信速度 | 9.6k~2Mbps | |
AO端子 | シンク・ソース電流 | 40mA以下 |
分解能 | 10bit | |
DO端子 | シンク電流 | 1.3A以下(オープンドレン) |
絶対最大定格 | 60V | |
寸法 | 約40.0×13.0×10.0mm | |
重量 | 20g以下 | |
環境配慮 | RoHS準拠, 鉛フリー半田 |
FRONT | BACK |
TOP | |
3D pdf | |
3D pdf |
※図はRS-485 I/F版。実際に装着されるコネクタは商品番号によって異なる
※センサから延びる2つの円錐はVL53L1XのデータシートのRTN/EMT KEEPOUT Cone
※単位mm
※図はRS-485 I/F版。実際に装着されるコネクタは商品番号によって異なる
本機を設置する際は「接触禁止領域」のパーツ及びランドに固定部材が接触してはならない。 他の電位へ短絡したりパーツを欠損した場合、本品の永久破壊を招く。 |
端子番号 | 信号名 |
1 | 3.3V |
2 | GND |
3 | SWDIO |
4 | SWCLK |
5 | RESET |
CN1は出荷時にブートローダの書き込みや調整に使用する目的で備わっており、ユーザに解放しているものではない。 |
端子番号 | 信号名 |
1 | GND |
2 | VDD (DC5.4~35V) |
3 | TTL Signal |
端子番号 | 信号名 |
1 | GND |
2 | VDD (DC5.4~35V) |
3 | RS-485 D+ |
4 | RS-485 D- |
センサ表面には保護ライナーが添付されているため、使用する前に必ず剥がす事。 剥がさず使用すると正常な計測結果が得られない。 | |
発光及び受光部の開口部が非常に小径のため、センサ表面を直接触れるなどで汚染しないこと。 開口部に異物等が混入すると正常に計測できなくなる。 |
出荷時点でCPUのフラッシュROMには弊社オリジナルのブートローダが書き込まれています。CPUの起動直後に必ず実行され、ユーザプログラム(以後ファームウェアと称する)へ実行を遷移させたり、シリアルターミナルプログラム等を使ってファームウェアの書き換えが行えます。
なお、本品のシリアルI/F・LED周りの回路はDXMIOと合わせているため、DXMIOのそれらの設定をそのまま流用して開発ができます。
また、ファームウェアの書き換えにはCN2,CN3の仕様に合ったBTE068B・BTE079・BTE080のいずれかのI/Fが必要です。
I/Fの違いで3ピンないし4ピンのコネクタが装備された上で出荷されます。I/Fの違いがあっても両I/Fの回路はいずれも装備されており、半田ジャンパ(JP1)にて信号のルートを選択しています。
アナログ出力用のDACとオープンコレクタ出力のDOはランドのみが用意され、いずれもCN2,CN3のGNDを基準とします。
なお、図では簡略化のため配線を直線で描画していますが、配線自体も回路の一部です。配線が長くなればなるほど電気的な影響を無視できないため、例えばRS-485 I/F版では電源のVDD/GNDとRS-485のD+/D-の配線にはシールド付きツイストペアケーブルを使用するべきです。
また、RS-485 I/Fにはソフト的にON/OFFできる終端抵抗を内蔵していますが、各ファームウェアにおいて終端抵抗はデフォルトでONに設定されているため、そのままの状態で複数台を同時に運用すると、RS-485トランシーバの駆動能力を超えてしまい通信ができなくなります。必ず回路構成上末端に配置される装置の終端抵抗のみをONにします。
押下するとCPUのRESET端子がGNDに接地されます。しかし、RESET端子は実行中のファームウェアにより機能を変更する事ができるため、必ずCPUのリセットが行える訳ではありません。
VL53L1Xを機能させるにはかなり面倒な手順が必要で、容易に目的の動作を実現することはほぼ不可能です。データシートの記述は電気的な特性や簡単なフローの記述程度にとどめられており、実際にはST社の評価キットとAPIを用いて挙動を解析する以外に詳細を知る手段がありません。
また、機能を欲張るとST社のAPIによりCPUのメモリを食い潰してしまうため、本品では必要最低限の機能を用い、初期化・測距データ取得・4つのプロファイル切り替えのみに止めています。
GCC Developer Liteの詳細についてはこちら。
フルインストールないしNXP LPC82xで使用を選択する事で必要なコンポーネントが自動的にインストールされます。
LPC824で使用される主要なコンポーネントを簡単に示します。
ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。
汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
ARMコア向けGCC(GNU Compiler Collection)。GCC Developer Liteより適宜呼び出され、ユーザソースのコンパイル・ライブラリ等とリンク・ファイルフォーマット変換等を行う。
LPC82xの内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、スタートアップルーチン、それらをコンパイルしてアーカイブしたライブラリファイル、GDBにてデバッグする際に使用する初期化ファイル、目的別に異なるメモリマップを定義したリンカスクリプトファイルを含む。
GCC Developer LiteではLPC82x用の設定を複数備えています。
例えば、ARMコアの学習・組み込み向けCコンパイラの習熟・内蔵ペリフェラルの機能を試すといった段階ではJTAGを使ってRAM上でデバッグし、慣れてきたらブートローダを経由してprintfデバッグ、最終的に製品等としてリリースして完成させる時はフラッシュROMに、といった段階を踏む場合でもGCC Developer Liteのコンパイルオプションの設定リストから選択し直すだけで設定が完了します。
以下に本品で有用な設定リストとその設定における主な機能を紹介します。
ブートローダを使用してフラッシュROM上へ転送して実行するファイルを生成。「LPC824 (TERM)」に加え、一部のペリフェラルを簡便に扱うためのライブラリと、FreeRTOSが使用可能。
生成ファイルの拡張子 | .bin (バイナリ) |
スタートアドレス | 0x00000c00 (フラッシュROM) |
転送ツール | SIMPLE TERM |
ブートローダ | 必要 |
ICEの様な特殊なI/Fを使用せずとも、汎用のシリアルI/Fで接続した環境だけでプログラムの書き換えが出来ます。
SIMPLE TERMから該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「STMicroelectronics Virtual COM Port (COMxxx)」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。SIMPLE TERMのポートの設定は以下の通りです。
Baudrate:115200 Databits:8 Stopbits:1 Parity:Non Flow Control:Non Protocol:Xmodem
先の設定リストでソースプログラムをコンパイルし成功するとSTERM.exe(SIMPLE TERM)の起動を促されます。「OK」を押してSIMPLE TERMを起動すると、以下の条件でSIMPLE TERMが起動します。
ブートローダがコマンドモードであれば、「スクリプト実行[STERM_LPC82x]」をクリックするだけでプログラムの書き換えにかかる処理(転送ファイルの選択・フラッシュROMの消去・転送)が全て自動的に行われます。
まず、ST社から提供されるAPIを多少改造し、LPC82xのプラットホームに依存する部分を追加したものをライブラリにしています。このライブラリを各ファームウェアにリンクして使用します。
また、LPC824とセンサ・DACはI2C、各種シリアルポートはUSART0の各ペリフェラルを介して接続され、いずれもNXP社のLPCOpen LibrariesをベースにしたLPC82x用ペリフェラルライブラリを介してアクセスします。
更に、測定・通信・操作系等の複数の処理を同時に行う場合はマルチタスクOS(FreeRTOS)を使用します。
なお、LPC824用のペリフェラルライブラリとFreeRTOSは最新のGCC Developer Liteにて提供されます。
機能 | LPC824 | ||
デバイス等 | 端子 | 端子 | ペリフェラル |
LED1 | カソード | PIO0_24 (O) | GPIO |
PB1 | - | PIO0_5 (I) | GPIO |
DO用FET | ゲート | PIO0_13 (O) | GPIO |
RS-485/TTL | DI | PIO0_16 (O) | USARTx |
RO | PIO0_26 (I) | USARTx | |
RE/DE | PIO0_27 (O) | USARTx | |
TE | PIO0_25 (O) | USARTx | |
VL53L1X | SCL | PIO0_10 (I/O) | I2C0 |
SDA | PIO0_11 (I/O) | I2C0 | |
GPIO1 | PIO0_15 (I) | GPIO | |
XSHUT | PIO0_1 (O) | GPIO | |
MCP4726 | SCL | PIO0_10 (I/O) | I2C0 |
SDA | PIO0_11 (I/O) | I2C0 |
シリアルI/Fを介してテキストにて測定結果を送信し続けます。基本サンプルプログラムとしての位置付で、センサの初期化と測定条件の変更、測距データの取得、ターミナルへの送信に限っています。
測距結果をアナログ電圧で出力させたり、指定した測距データをスレッショルドとしてON/OFFの出力を得ます。本体に備わった操作及び表示機能は1個のプッシュボタンスイッチと1個のLEDのみのため、押下時間や点灯パターンを駆使して操作を行います。
Dynamixelシリーズと同じI/Fである利点を生かし、測定条件や測定結果等の情報をコントロールテーブル上に配置し、Dynamixelプロトコルを用いてホストからそれらにアクセスします。また、複数のセンサや他のDynamixelシリーズと同じネットワーク上で使用する事が可能です。
Dynamixelプロトコル対応のファームウェアを使用した際のコントロールテーブルです。
Address | Item | Access | Default Value | Type/Range |
0 | Model Number | R | 16416(0x4015) | uint16 |
1 | ||||
2 | Version of Firmware | R | ? | uint8 |
3 | ID | R/W (NVM) | 1 | uint8 0~253 |
4 | Baudrate | R/W (NVM) | 1 | uint8 0~4 |
5 | Write NVM | R/W | 0 | uint8 0~1 |
6 | Terminator | R/W (NVM) | 1 | uint8 0~1 |
7 | (reserve) | R | - | uint8 |
8 | LED | R/W (NVM) | 2 | uint8 0~2 |
9 | Ranging Profile | R/W (NVM) | 0 | uint8 0~3 |
10 | Average Number | R/W (NVM) | 0 | uint8 0~19 |
11 | Normal Number | R/W (NVM) | 1 | uint8 0~4 |
12 | Analog Out Gain | R/W (NVM) | - | uint16 0~32767 |
13 | ||||
14 | Digital Out Threshold | R/W (NVM) | 0 | uint16 0~4095 |
15 | ||||
16 | Effective SPAD Return Count | R | - | uint16(Q8.8) |
17 | ||||
18 | Signal Rate | R | - | uint16(Q7.9) |
19 | ||||
20 | Ambient Rate | R | - | uint16(Q7.9) |
21 | ||||
22 | (reserve) | R | - | uint8 |
23 | Status | R | - | uint8 |
24 | Distance | R | - | uint16 |
25 |
Address | Item | Access | Default Value | Type/Range |
0 | Model Number | R | 16416(0x4015) | uint16 |
1 | ||||
2 | Model Information | R | 0 | uint32 |
3 | ||||
4 | ||||
5 | ||||
6 | Version of Firmware | R | ? | uint8 |
7 | ID | R/W (NVM) | 1 | uint8 0~252 |
8 | Baudrate | R/W (NVM) | 1 | uint8 0~4 |
9 | Write NVM | R/W | 0 | uint8 0~1 |
10 | Terminator | R/W (NVM) | 1 | uint8 0~1 |
11 | (reserve) | R | - | uint8 |
12 | LED | R/W (NVM) | 2 | uint8 0~2 |
13 | Ranging Profile | R/W (NVM) | 0 | uint8 0~3 |
14 | Average Number | R/W (NVM) | 0 | uint8 0~19 |
15 | Normal Number | R/W (NVM) | 1 | uint8 0~4 |
16 | Analog Out Gain | R/W (NVM) | - | uint16 0~32767 |
17 | ||||
18 | Digital Out Threshold | R/W (NVM) | 0 | uint16 0~4095 |
19 | ||||
20 | Effective SPAD Return Count | R | - | uint16(Q8.8) |
21 | ||||
22 | Signal Rate | R | - | uint16(Q7.9) |
23 | ||||
24 | Ambient Rate | R | - | uint16(Q7.9) |
25 | ||||
26 | (reserve) | R | - | uint8 |
27 | Status | R | - | uint8 |
28 | Distance | R | - | uint16 |
29 |
通信する際のボーレートです。ホストDynamixelのボーレートは一致させなくてはなりません。
Baudrate[bps] = 2000000 / (Value + 1)
Value | Baudrate [bps] |
0 | 9600 |
1 | 57600 |
2 | 115200 |
3 | 1000000 |
4 | 2000000 |
1を書き込むとRS-485 I/Fの終端抵抗がON、0を書き込むとOFFになります。
なお、TTL I/F版において未使用となるRS-485 I/Fの影響を回避するため、常時1を指定する必要があります。
0を書き込むとLEDが消灯、1を書き込むとLEDが点灯します。2を書き込むとStatusと測定周期に応じて明滅します。
測定条件を選択します。
変更には数百msの時間を要し、その間パケット処理は停止します。
Value | Profile | Description | Typical application |
0 | Default | 周期30ms 最大1.2m 標準精度 | 標準 |
1 | High arccuracy | 周期200ms 最大1.2m 精度<±3% | 精度優先 |
2 | Long range | 周期33ms 最大2m 標準精度 | 距離優先で暗い条件 (no IR) |
3 | High speed | 周期20ms 最大1.2m 精度±5% | 速度優先 |
Indoor (no infraed) | Outdoor | |||||
対象反射率 | 距離 | 33ms | 66ms | 距離 | 33ms | 66ms |
白(88%) | 120cm | 4% | 3% | 60cm | 7% | 6% |
灰(17%) | 70cm | 4% | 6% | 40cm | 12% | 9% |
Statusが0の時に測距データを平均化する際のサンプル数を指定します。
Statusが0以外の時に内部の平均値はリセットされます。
内部的には正常測定処理にもかかわらず不定な値が検出されるのを回避するためのカウント値です。
このカウント値の回数だけStatusが0の状態で連続的に測定がなされると、以後Distanceが更新されます。
DistanceにGainを乗じてAO端子から出力します。また、VREFでDAコンバータの最大出力電圧を3.3Vと5Vから選択します。
Bit | 15 | 14~0 |
Value | VREF:0=3.3[V],1=5.0[V] | Gain:0~32767[‰] |
VREF=0 AO[V] = Distance * 3.3[V] / 4096 * Gain / 1000
VREF=1 AO[V] = Distance * 5[V] / 4096 * Gain / 1000
なお、3.3V及び5Vはいずれも内部電源をリファレンスとしており、負荷条件等により最大5%程度の誤差が生じる場合があります。
また、Gainに0を設定すると、DAコンバータはパワーダウンモードになります。
Distanceがこの値以下になるとDO端子がLOWになり、超えるとハイインピーダンスになります。
Effective SPAD Return Count~Distanceは1回の測定毎に更新される測定データです。これらのアイテムの同時性を保つには、1回のインストラクションパケットで一括受信する必要があります。
SPAD(Single photon avalanche diode)リターンカウントです。
整数部8bit、小数部8bitの固定小数点となります。
Effective SPAD Return Count = ((Value & 0xff00) >> 8) + ((Value & 0xff) / 256)
検出対象の反射率です。
整数部7bit、小数部9bitの固定小数点となります。
Signal rate [Mcps] = ((Value & 0xfe00) >> 9) + ((Value & 0x1ff) / 512)
環境光です。
整数部7bit、小数部9bitの固定小数点となります。
Ambient rate [Mcps] = ((Value & 0xfe00) >> 9) + ((Value & 0x1ff) / 512)
レンジステータスです。
ステータスが0以外のDistanceは距離としての意味を持ちません。
Value | Status | Description |
0 | Range Valid | 測距有効 |
1 | Sigma Fail | シグマリミットチェック失敗 |
2 | Signal Fail | 信号チェック失敗 |
3 | Min Range Fail | 最小範囲チェックに失敗 |
4 | Phase Fail | フェーズチェック失敗 |
5 | Hardware Fail | ハードウェアチェック失敗 |
255 | None | No Update |
対象との距離です。精度についてはセンサの設定及び性能に依存します。
Statusがレンジ外やエラー等を示した場合は、センサの測距値ではなくオーバーフローを意味する8191となります。
Distance [mm] = Value