レーダー・プログラミング・ モデルのビデオ・トレーニングへ ようこそ このトレーニングは ミリ波レーダーの開発にあたる ソフトウェア・システム・エンジニアと テスト・エンジニアの方向けです 対象者の皆さまはFMCWレーダーに 関する基本的な知識を お持ちだと思いますが そうでない場合は FMCWに関するトレーニング資料を 確認されることをお勧めします それでは始めます このトレーニングの目的は TIミリ波デバイスの プログラミング方法を 理解することです このトレーニングでは主に ミリ波フロント・エンドまたは レーダー部分に焦点を当てていきます FMCW信号の基本について説明するほか mmWaveLinkと呼ばれる ソフトウェア・フレームワークを使用して どのようにフロント・エンドを プログラミングできるかを 見ていきます これはTIミリ波SDKの 高次ブロック図を示したものです このトレーニングでは2つの 主要なブロックに焦点を当てます プログラミング対象である ミリ波フロント・エンドと mmWaveLinkフレームワークを 使用したプログラム方法の2つです ミリ波フロント・エンドは ミリ波デバイス内で RFとアナログ・ハードウェア・ ブロックを制御する 閉システムで ミリ波レーダーの 動作も担っています そのアンテナ・ブロックと 動作はすべて メイン・ボックスに送られる メッセージを使用して 構成できます mmWaveLink フレームワークは これらのメッセージを 生成し ミリ波フロント・エンドとの 通信を処理する APIを提供します そのため mmWaveLinkをミリ波 フロント・エンドに対するドライバと見なす ことができます また その名前が示すとおりアプリケーションと ミリ波フロント・エンドとの リンクとして機能します Cortex R4Fまたは DSP上で動作し ミリ波フロント・エンドを 制御するための下位レベルのAPIを 提供します mmWaveLink フレームワークは プラットフォームとOSに 依存しないため 基本的に SBIなどの基本的な 通信インターフェイスや OSルーチンを提供する あらゆる 外部マイコンに移植できます また このフレームワークでは 単一スレッド環境を 実行することも できます ミリ波フロント・エンドと mmWaveLinkフレームワークは すべてのTIミリ波デバイスで 共通して利用 できます ここに mmWaveLinkフレームワークの APIをいくつか示しています これらについては今日の トレーニングで説明します APIは大きく2組に 分かれています 1つはアプリケーションによる ミリ波フロント・エンドの 制御を可能にし 基本的な初期化や フロント・エンドとの ハンドシェイクを担う デバイス・マネージャAPIです もう1つのセンサ制御APIでは アプリケーションによる ミリ波フロント・エンドの プログラムが可能になります センサ制御APIの 説明に入る前に まずプログラム対象の ミリ波フロント・エンド内の いくつかの主要なブロックについて 見てみます 上位レベルから見た場合 ミリ波フロント・エンドには これらの中核となるブロックがあります 1つ目はチャープ・シーケンス (レーダー・タイミング・エンジン) です このブロックはフレーム上の FMCWチャープの構成を担い VCOを制御して これらの信号を 生成します RxおよびTxチャネルは 有効にする必要がある レシーバ数と送信チャネル数を 定義します また 画像処理レーダー向けに どの程度の倍数の ミリ波フロント・エンドを一緒に カスケードできるかも定義します Rxアナログ・チェーンは 受信信号と送信信号を どのように混合するか または異なるLNAと 異なるフィルタをどのように プログラムできるかを 定義します 最後に ADCとデジタル・フロント・ エンドは DSPまたは ハードウェア・アクセラレータ内で さらに処理を行うために IFデータがどのように サンプリングされるかを 定義します LVDSやCSI2などの高速 インターフェイス経由で 同じADCデータを外部プロセッサに 送信することもできます ここでFMCWの基本に 立ち返ってみます FMCWは 周波数変調連続波の 略です 独自のレベルにおいて FMCW信号は 周波数ランプと見なすことができ TIではこれをチャープと呼んでいます チャープは特定の 周波数で開始され その周波数は経時的に 増加します ここに示す 1つ目の図では x軸は時間 y軸は 振幅であり 周波数が経時的に増加する 正弦波を示しています 2番目の図にも同じランプが 表示されていますが x軸は時間 y軸は周波数を 示しています ご覧のように これらのチャープは 特定の周波数で開始され その周波数は経時的に 増加します 周波数の変化レートは 周波数スロープ またはランプ・スロープと 呼ばれます FMCWチャープの他の主要な 特性を見ていきます ランプ時間はランプの開始から 終了までの時間を 定義します 周波数スロープに 加えて 基本的に チャープ帯域幅と呼ばれる 要素を定義します チャープ帯域幅はランプ時間と 周波数スロープを 乗算したものです もう1つの主要なパラメータに アイドル時間があります これは2つの連続チャープ間の 時間を定義します つまり ランプの開始から終了までの 時間がランプ時間であり ランプの終了から次のランプの開始までの 時間がアイドル時間となります ADC有効時間と ADCサンプリング時間は チャープのどの時点で DSPまたは ハードウェア・アクセラレータで 処理される データのサンプリングを 行うかを定義します 同様に Tx開始時間は どの時点で トランスミッタを 開始するかを定義します では このような チャープ特性が どのように距離分解能 IF帯域幅 物体の最大距離などの主要な パラメータに影響を与えているかを 見ていきます 距離分解能はc/2Bに等しく ここでBはチャープの 帯域幅を表します そのため 4GHzの 帯域幅の場合は 約4cmの分解能が 得られます IF帯域幅はチャープ・スロープと 最長距離によって異なります そのため 特定のIF帯域幅では 最長距離dmaxは スロープに 反比例します これを理解できるよう 例を示します 2つのチャープA1とA2を 定義したとします どちらも同じ 周波数77GHzで 開始されます チャープA1のスロープは 68MHz/μsです 約58μsの ランプ時間の場合 約4GHzの帯域幅が得られます これは基本的に A1で約4cmの距離分解能が 得られることを意味します その一方で A2は ランプ時間は同じですが スロープはA1の半分です つまりA2の帯域幅は 2GHzになります そのため 約8cmの 距離分解能が 得られます ただし 特定の IF帯域幅の場合 A2のスロープは A1の半分であるため A2で見られる物体の 最長距離dmaxは A1の2倍になります FMCWチャープの基本を 理解したところで これらのチャープを使用して どの程度大きなFMCW信号 つまりFMCWフレームを 構成できるかを見ていきます FMCWフレームは 基本的には チャープ・シーケンスで これらのシーケンスが経時的に 繰り返される方法を示したものです ここにFMCWフレームの例を いくつか示します 1つ目のフレームでは 1つのチャープのみがあり これが複数回繰り返されることで 大きいFMCWフレームが生成されています 一方で 2つ目のフレームでは スロープが異なる可能性のある 2つのチャープが 定義されており これらが複数回繰り返されることで 大きいフレームが生成されています 同様に 最大で512の 独自チャープを定義して シーケンスにまとめ 1つのFMCW フレームを生成することができます フレームを構成したら シーケンスがどのように 繰り返されるのかを 定義する必要があります フレームの周期性と 送信する必要がある フレーム数を 定義します では このフレームの 周期性とシーケンスが 速度分解能にどのような影響を 与えるのかを見ていきます 速度分解能は λ/2Tfに等しくなります そのため 速度分解能は フレーム時間を増やすことで 向上させることができます 通常 5ミリ秒の フレーム時間で 1.5km/時間の 速度分解能が 得られます これはフレーム時間を増やす ことで向上できます ただし フレーム 時間を増やすと チャープ数も増える ことになります つまり 処理が増え 最終的には 消費電力も増えるため その点を考慮に入れる 必要があります まとめるとFMCW フレームとチャープは FMCWレーダー動作にとって 不可欠な要素であり これらの定義方法は 主に 距離分解能 最長距離 速度分解能などの 主要パラメータの 目標など アプリケーションの 使用事例によって 異なってきます それでは チャープがミリ波 フロント・エンド・デバイス内で どのように構成されるかを 見ていきます その前にまず チャープ・ プロファイルと呼ばれる 別の用語について説明します プロファイルとは 基本的に チャープに関する進路情報が 含まれているテンプレートです プロファイルには 開始周波数 チャープのスロープ アイドル時間 ADC開始時間などの パラメータが含まれます これらのプロファイルは 最大4つ定義できます プロファイルを定義したら 独自チャープを定義する必要があります チャープを定義するには まずそのチャープを 特定のプロファイルに関連付けます これにより このチャープが プロファイルに含まれる すべての情報を継承します プロファイルからの 進路情報に加えて 開始周波数 スロープ ADC開始時間 アイドル時間などの 一部のパラメータに詳細を 加えることができます つまりプロファイルに 含まれている情報を さらに微調整できる ということです また 各チャープで使用する 送信チャネルに加えて これらの各送信 チャネルの位相変調を 定義することもできます まとめると チャープを定義するには まず進路情報が含まれる プロファイルを 定義します 次に 特定のプロファイルを 関連付けることで チャープを定義します また これらのパラメータは さらに微調整することもできます ミリ波フロント・エンドと APIを使用すると チャープとプロファイルの プログラムを事前に行えるため FMCWフレームをプログラム できるようになります では例を挙げて どのように mmWaveLinkフレームワークを使用して ミリ波フロント・エンドで 特定のチャープを構成し プログラムできるかを 見ていきます この例では 77GHzの 周波数で開始され 58μsのランプ時間 68MHz/μsのスロープ 他の主要なパラメータで 構成される チャープを使用します チャープを定義するには まずプロファイルを定義する 必要があります ここに mmWaveLinkフレームワーク内の c構成のスナップショットを 示しています まず プロファイル IDを0にし 先ほど説明した他の主要な パラメータを入力して プロファイルを定義します つまり 開始周波数 アイドル時間 ADC開始時間 ランプ時間などを定義します たとえば アイドル時間の分解能は 10nsであるため 7μsのアイドル時間を プログラムするには この値を700にプログラムする 必要があります 他の主要なパラメータも 同様にプログラムできます このプロファイル構成に含まれる 他の主要なパラメータも 見ていきます Tx出力電力バックオフでは フルパワーで 送信するかどうかを プログラムできます または 最大電力からのある程度の バックオフを可能にできます HPFコーナー周波数では ハイパス・フィルタの カットオフ周波数を プログラムできるため デバイス周囲の パッケージなど 近くにある 物体からの反射を 除去できます Rxゲインでは Rxアナログ・チェーン内の 全体的なゲインを 構成できます プロファイル構成を使用して これらすべてのパラメータを定義したら mmWaveLink APIを使用して この構成を渡す必要が あります この場合 APIには rlSetProfileConfigを使用しており このAPIでこのプロファイル 構成を渡します このAPIを呼び出すと mmWaveLink フレームワークによって メッセージが作成され プロファイルを プログラムするために このメッセージがミリ波 フロント・エンドに送信されます では mmWaveLinkフレームワークを使用して 2つのチャープをプログラムしてみます これは チャープ情報が含まれる mmWaveLinkフレームワーク内の c構成です チャープを定義するには 開始インデックスと 終了インデックスを定義する必要が あります この例では0になっており 1つのチャープのみを プログラムすることを意味しています 説明したように このチャープを 特定のプロファイルに 関連付ける必要があるため ProfileConfig APIを使用して 先ほどプログラムしたプロファイル0と 関連付けます 次に主要なパラメータに 詳細を追加できます 最後に チャープを 送信する 送信チャネルを構成する 必要があります この例では Tx 0で 送信するため この値を1としてプログラムします 同様に 2つ目のチャープの 開始インデックスと 終了インデックスを 1と定義します そしてTx 0で 送信する代わりに チャープをTx 2に送信します そのためTxイネーブルを 4として定義します チャープを定義したら API rlSetChirpConfigを 呼び出す必要があります これにより これら2つのチャープを構成するために ミリ波フロント・エンドに メッセージが送信されます では これら2つのチャープを使用して FMCWフレームを構成します ここに フレーム構成が 含まれるc構成を示して います この例ではまず ChirpConfiguration APIを使用して定義した 2つのチャープ チャープ0と チャープ1を含めています フレームを作成するため これを32回繰り返します フレームを 経時的に繰り返す方法を 定義する必要があります そのため フレームの 周期性とフレーム数を 定義します フレームを無限に 送信する場合は 0に設定できます triggerSelect パラメータでは 送信のトリガ・タイプを プログラムできます APIを使用したソフトウェアベースの トリガを使用することも SYNC_INと呼ばれる ハードウェア信号を使用した フレームの送信を許可する こともできます フレーム・トリガ遅延では ハードウェア信号と チャープの実際の 送信間の遅延を プログラムする ことができます すべてのパラメータを 入力したら ミリ波フロント・エンドで フレームを構成する API rlSetFrameConfigを 呼び出す必要があります では ミリ波フロント・エンドで 他の主要なブロックを プログラムする方法について説明します チャネル構成から 見ていきます チャネル構成を使用すると ミリ波フロント・エンドで 有効にする レシーバ数と 送信チャネル数を 構成できます たとえば 1243と 1443では 最大4つのレシーバ・チャネルと 3つの送信チャネルを 構成できます 一方で1642では 最大4つのレシーバ・チャネルと 2つの送信チャネルを 有効にできます ミリ波フロント・エンドを カスケードすることで 画像処理レーダー向けの 大型アンテナ・アレイを製作できます そのため フロント・エンドを 複数チャープのマスターか スレーブとして構成できます カスケード構成では通常 いずれかのデバイスが LO信号を生成する マスターであり もう一方が フレーム送信用の 高周波LO信号を 受信するスレーブ となります これらすべてをチャネル構成 APIを使用して 構成できます では今からmmWaveLink APIを使用して ADCとデジタル・フロント・エンドを 構成してみます ADC構成では ミリ波 フロント・エンドの出力を 構成できます つまり 12ビット 14ビット 16ビットなどの ADCサンプルのサイズを 構成できるほか 出力データ・フォーマットを 構成することも できます データは実数データまたは 複素数データとして構成できます 複素数1xの場合は フロント・エンドによって 虚数帯域が除去される一方で 複素数2xの場合は 虚数帯域と帯域内 の両方が 送信されます 複素数 1xの場合 虚数帯域は除去されます 虚数帯域には 干渉情報が 含まれるため ミリ波フロント・ エンドはこの情報を 個別のパケットという形で 構成することもできます これをチャープ品質(CQ)と呼びます つまり フロント・エンドも CQデータを受信するように 構成できます これで ミリ波フロント・ エンドの構成が 完了しました すべての構成が 完了したら これら2つのAPIを使用して FMCWフレームの送信を 開始および停止する ことができます 1243の場合は さらなる 処理を行うために ADCと他のデータを 外部プロセッサに送信する 必要もあります この図には データ・パス・モジュール内の さまざまなブロックを示しています ご覧のように デジタル・ フロント・エンドでは 3種類のデータが生成されます 1つは各Rxチャネルからの ADCの未処理データです これに加えて チャープ・ プロファイルも生成されます チャープ・プロファイルには これらの構成した どのプロファイルに ADCデータが属するかを示す 情報が含まれます これにはチャープ番号も 含まれます そのため レシーバは このプロファイルを ADCデータの記録や 処理に使用できます また 説明したように チャープ品質には 干渉 ADC飽和 ADCデータの 品質に関する 他の主要なパラメータが 含まれています そのため このセッションではこれらの データ・パス・モジュールを構成して データを外部プロセッサに 送信する方法について 説明します まず データ・パス構成から 見ていきます 最初に構成する 必要があるのが データ送信の インターフェイスです ミリ波フロント・エンドでは 2つの高速インターフェイス CSI2またはLVDSがサポートされています ここで選択した インターフェイスに加えて 送信するデータの種類も 構成する必要があります つまり ADCデータのみを 送信するのか それともCPとCQデータも 送信するのかを 構成します すべての種類のデータを 送信する場合は データを どの順序で送信するのかを 構成する必要があります フロント・エンドではこのデータを 2つの異なるパケットで 送信することもできます つまり ADCデータまたは CP_CQデータのいずれかが含まれる パケット0とパケット1を 送信できます これにより データを渡す際の オーバーヘッドを低減しながら レシーバ内でADCおよび CP_CQデータをより効率的に 管理できます たとえば CSI2の場合 ADCが含まれるパケット0は 仮想チャネル0で 送信される一方で CPおよびCQデータが 含まれるパケット1は 仮想チャネル1で 送信できます これにより レシーバでデータを受信したり データを渡したりするのが 容易になります 次に構成する必要があるのが 高速インターフェイスの データ・レートです ここに CSI2やLVDSなどの 高速インターフェイス対応 デバイスでサポート されている データ・レートを示しています これらはレーンあたりの データ・レートです データ・レートを 構成する場合 ミリ波フロント・ エンドの構成も 把握しておく必要があります サンプル数とランプ 持続時間に基づいて フロント・エンドで データが生成され このデータがピンポン・ バッファである ADCバッファに 移動されます ピンからのデータが送信される際には 十分なデータ・レートを 使用する必要が あります つまり 次のチャープが処理される前には データが完全に送信されるまでに データがピンで受信されるように する必要があります ここに ミリ波フロント・ エンドに対して使用した 構成を示しています 同じ内容をデータ・パスに対しても 構成する必要があります この構成に加えて 複素サンプルの場合は IデータおよびQデータを ストラップする 必要があるかどうかも 構成できます また データを インターリーブ形式または 非インターリーブ・モードの どちらで送信する必要があるかを 構成できます インターリーブ・ モードの場合は すべてのレシーバからの サンプル0が 一緒に格納されて 送信される一方で 非インターリーブ・モードの場合は 1つのレシーバからのサンプルが 一緒に格納されて送信され その後 別のレシーバ・チャネルからの すべてのサンプルが一緒に 格納されて送信されます 最後に このインターフェイスに データを送信するために 有効にする必要がある レーン数を構成する 必要があります つまり レーン0とレーン1または レーン0とレーン2を有効にするか このAPIを使用してすべての レーンを有効にできます レーダー・プログラミング・ モデルに関する トレーニング・セッションは以上です まとめると TIミリ波デバイスを プログラムするには まずデバイス・マネージャAPIを使用して デバイスとフロント・エンドを 初期化する必要があります 次に センサ制御 APIを使用して ミリ波フロント・エンドとアンテナ・ブロックを プログラムする必要があります 1243の場合 ADCデータを 外部プロセッサに 送信する必要があるため CSI2やLVDSなどの 高速インターフェイスを 構成する必要も あります すべての構成が 完了したら SensorStart APIを使用して フレームを開始できます ミリ波SDKに含まれている ソース・コードと mmWaveLinkフレームワーク用の Doxygenドキュメントには 本日説明した 各APIに関する 詳細が示されています このトレーニングが TIミリ波デバイスの プログラグラミングのお役に立てることを 願っています ありがとうございました